Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <mail@jlucke.com>2019-06-06 11:42:01 +0300
committerJacques Lucke <mail@jlucke.com>2019-06-06 11:42:01 +0300
commit56a0a7164926522cfd363b25ad4883ed24107d2e (patch)
treed5ba5ca641292e5e3955b709e932ef43e94c9a46 /source/blender
parent6f728beec96f7ebbb9ebe276c076f24f7bec90d6 (diff)
new simulations folder with some test code
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/CMakeLists.txt1
-rw-r--r--source/blender/modifiers/CMakeLists.txt2
-rw-r--r--source/blender/modifiers/intern/MOD_nodeparticles.c20
-rw-r--r--source/blender/simulations/CMakeLists.txt23
-rw-r--r--source/blender/simulations/SIM_particles.h20
-rw-r--r--source/blender/simulations/playground.cpp31
6 files changed, 94 insertions, 3 deletions
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index d0e951a8219..85de9f53f17 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -112,6 +112,7 @@ add_subdirectory(modifiers)
add_subdirectory(gpencil_modifiers)
add_subdirectory(shader_fx)
add_subdirectory(functions)
+add_subdirectory(simulations)
add_subdirectory(makesdna)
add_subdirectory(makesrna)
diff --git a/source/blender/modifiers/CMakeLists.txt b/source/blender/modifiers/CMakeLists.txt
index 9b0411b5aa8..e6d4664865c 100644
--- a/source/blender/modifiers/CMakeLists.txt
+++ b/source/blender/modifiers/CMakeLists.txt
@@ -27,6 +27,7 @@ set(INC
../bmesh
../depsgraph
../functions
+ ../simulations
../makesdna
../makesrna
../render/extern/include
@@ -116,6 +117,7 @@ set(LIB
bf_blenkernel
bf_blenlib
bf_functions
+ bf_simulations
)
if(WITH_ALEMBIC)
diff --git a/source/blender/modifiers/intern/MOD_nodeparticles.c b/source/blender/modifiers/intern/MOD_nodeparticles.c
index 6cc94f4be77..cd4992dfcaf 100644
--- a/source/blender/modifiers/intern/MOD_nodeparticles.c
+++ b/source/blender/modifiers/intern/MOD_nodeparticles.c
@@ -26,6 +26,8 @@
*
*/
+#include "MEM_guardedalloc.h"
+
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
@@ -38,13 +40,25 @@
#include "MOD_util.h"
+#include "SIM_particles.h"
+
static Mesh *applyModifier(ModifierData *UNUSED(md),
const struct ModifierEvalContext *UNUSED(ctx),
Mesh *UNUSED(mesh))
{
- Mesh *mesh = BKE_mesh_new_nomain(1, 0, 0, 0, 0);
- float point[] = {1, 2, 3};
- copy_v3_v3(mesh->mvert[0].co, point);
+ ParticleSystemRef particle_system = NULL;
+ uint point_amount = SIM_particles_count(particle_system);
+ Mesh *mesh = BKE_mesh_new_nomain(point_amount, 0, 0, 0, 0);
+
+ float(*positions)[3] = MEM_malloc_arrayN(point_amount, sizeof(float[3]), __func__);
+ SIM_particles_get_positions(particle_system, positions);
+
+ for (uint i = 0; i < point_amount; i++) {
+ copy_v3_v3(mesh->mvert[i].co, positions[i]);
+ }
+
+ MEM_freeN(positions);
+
return mesh;
}
diff --git a/source/blender/simulations/CMakeLists.txt b/source/blender/simulations/CMakeLists.txt
new file mode 100644
index 00000000000..78fbfcf9cd3
--- /dev/null
+++ b/source/blender/simulations/CMakeLists.txt
@@ -0,0 +1,23 @@
+set(INC
+ .
+ ../blenlib
+ ../makesdna
+ ../makesrna
+ ../blenkernel
+ ../depsgraph
+ ../../../intern/guardedalloc
+)
+
+set(INC_SYS
+)
+
+
+set(SRC
+ playground.cpp
+)
+
+set(LIB
+ bf_blenlib
+)
+
+blender_add_lib(bf_simulations "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
diff --git a/source/blender/simulations/SIM_particles.h b/source/blender/simulations/SIM_particles.h
new file mode 100644
index 00000000000..82bb035b901
--- /dev/null
+++ b/source/blender/simulations/SIM_particles.h
@@ -0,0 +1,20 @@
+
+#ifndef __SIM_PARTICLES_C_H__
+#define __SIM_PARTICLES_C_H__
+
+#include "BLI_utildefines.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct OpaqueParticleSystem *ParticleSystemRef;
+
+uint SIM_particles_count(ParticleSystemRef particle_system);
+void SIM_particles_get_positions(ParticleSystemRef particle_system, float (*dst)[3]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SIM_PARTICLES_C_H__ */
diff --git a/source/blender/simulations/playground.cpp b/source/blender/simulations/playground.cpp
new file mode 100644
index 00000000000..aa785ca5269
--- /dev/null
+++ b/source/blender/simulations/playground.cpp
@@ -0,0 +1,31 @@
+#include "BLI_math.h"
+
+#include "SIM_particles.h"
+
+#define WRAPPERS(T1, T2) \
+ inline T1 unwrap(T2 value) \
+ { \
+ return (T1)value; \
+ } \
+ inline T2 wrap(T1 value) \
+ { \
+ return (T2)value; \
+ }
+
+WRAPPERS(void *, ParticleSystemRef);
+
+uint SIM_particles_count(ParticleSystemRef UNUSED(particle_system))
+{
+ return 5;
+}
+
+void SIM_particles_get_positions(ParticleSystemRef UNUSED(particle_system), float (*dst)[3])
+{
+ for (uint i = 0; i < 5; i++) {
+ float vec[3];
+ vec[0] = i;
+ vec[1] = i * 0.3f;
+ vec[2] = 1.0f;
+ copy_v3_v3(dst[i], vec);
+ }
+}