[Bf-blender-cvs] [4ae4d125cd2] functions: simple point emitter node for testing
Jacques Lucke
noreply at git.blender.org
Thu Jul 4 16:45:55 CEST 2019
Commit: 4ae4d125cd272ebbb2c89f7ed9f5d535432e64ef
Author: Jacques Lucke
Date: Thu Jul 4 11:30:49 2019 +0200
Branches: functions
https://developer.blender.org/rB4ae4d125cd272ebbb2c89f7ed9f5d535432e64ef
simple point emitter node for testing
===================================================================
A release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
M source/blender/simulations/bparticles/c_wrapper.cpp
M source/blender/simulations/bparticles/emitters.cpp
M source/blender/simulations/bparticles/emitters.hpp
===================================================================
diff --git a/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py b/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
new file mode 100644
index 00000000000..48ab26faa8b
--- /dev/null
+++ b/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
@@ -0,0 +1,20 @@
+import bpy
+from bpy.props import *
+from .. base import BParticlesNode
+from .. socket_builder import SocketBuilder
+
+class PointEmitterNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_PointEmitterNode"
+ bl_label = "Point Emitter"
+
+ position: FloatVectorProperty(
+ name="Value",
+ size=3,
+ default=(0.0, 0.0, 0.0),
+ )
+
+ def declaration(self, builder : SocketBuilder):
+ builder.emitter_output("emitter", "Emitter")
+
+ def draw(self, layout):
+ layout.column().prop(self, "position", text="Position")
diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index 29914a446e8..390b680791a 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -295,10 +295,35 @@ static void INSERT_EMITTER_mesh_surface(bNode *emitter_node,
}
}
+static void INSERT_EMITTER_point(bNode *emitter_node,
+ IndexedBParticlesTree &bparticles_tree,
+ SmallVector<Emitter *> &r_emitters)
+{
+ BLI_assert(STREQ(emitter_node->idname, "bp_PointEmitterNode"));
+ bNodeSocket *emitter_output = (bNodeSocket *)emitter_node->outputs.first;
+
+ for (SocketWithNode linked : bparticles_tree.base().linked(emitter_output)) {
+ if (!bparticles_tree.is_particle_type_node(linked.node)) {
+ continue;
+ }
+
+ bNode *type_node = linked.node;
+
+ float3 position;
+ PointerRNA rna;
+ RNA_pointer_create(bparticles_tree.btree_id(), &RNA_Node, emitter_node, &rna);
+ RNA_float_get_array(&rna, "position", position);
+
+ Emitter *emitter = EMITTER_point(type_node->name, position);
+ r_emitters.append(emitter);
+ }
+}
+
static ModifierStepDescription *step_description_from_node_tree(bNodeTree *btree)
{
SmallMap<std::string, EmitterInserter> emitter_inserters;
emitter_inserters.add_new("bp_MeshEmitterNode", INSERT_EMITTER_mesh_surface);
+ emitter_inserters.add_new("bp_PointEmitterNode", INSERT_EMITTER_point);
ModifierStepDescription *step_description = new ModifierStepDescription();
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 311f4d12d27..d1c202faddc 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -13,16 +13,18 @@ namespace BParticles {
class PointEmitter : public Emitter {
private:
+ std::string m_particle_type_name;
float3 m_point;
public:
- PointEmitter(float3 point) : m_point(point)
+ PointEmitter(StringRef particle_type_name, float3 point)
+ : m_particle_type_name(particle_type_name.to_std_string()), m_point(point)
{
}
void emit(EmitterInterface &interface) override
{
- auto &target = interface.request(0, 1);
+ auto &target = interface.request(m_particle_type_name, 1);
target.set_float3("Position", {m_point});
target.set_float3("Velocity", {float3{-1, -1, 0}});
target.set_birth_moment(1.0f);
@@ -102,59 +104,9 @@ class SurfaceEmitter : public Emitter {
}
};
-class PathEmitter : public Emitter {
- private:
- Path &m_path;
- float4x4 m_transform;
-
- public:
- PathEmitter(Path &path, float4x4 transform) : m_path(path), m_transform(transform)
- {
- }
-
- void emit(EmitterInterface &interface) override
- {
- SmallVector<float3> positions;
- for (uint i = 0; i < m_path.len - 1; i++) {
- float3 pos1 = m_path.data[i].vec;
- float3 pos2 = m_path.data[i + 1].vec;
-
- for (uint j = 0; j < 10; j++) {
- float factor = (float)j / 100.0f;
- float3 pos = pos1 * (1.0f - factor) + pos2 * factor;
- pos = m_transform.transform_position(pos);
- positions.append(pos);
- }
- }
-
- auto &target = interface.request(0, positions.size());
- target.set_float3("Position", positions);
- target.set_float3("Velocity", SmallVector<float3>(positions.size()));
- target.set_birth_moment(1.0f);
- }
-};
-
-class EmitAtStartEmitter : public Emitter {
- void emit(EmitterInterface &interface) override
- {
- if (!interface.is_first_step()) {
- return;
- }
-
- SmallVector<float3> positions;
- for (uint i = 0; i < 1000000; i++) {
- positions.append(float3(i / 1000.0f, 0, 0));
- }
-
- auto &target = interface.request(0, positions.size());
- target.set_float3("Position", positions);
- target.set_birth_moment(0.0f);
- }
-};
-
-Emitter *EMITTER_point(float3 point)
+Emitter *EMITTER_point(StringRef particle_type_name, float3 point)
{
- return new PointEmitter(point);
+ return new PointEmitter(particle_type_name, point);
}
Emitter *EMITTER_mesh_surface(StringRef particle_type_name,
@@ -167,15 +119,4 @@ Emitter *EMITTER_mesh_surface(StringRef particle_type_name,
particle_type_name, mesh, transform_start, transform_end, normal_velocity);
}
-Emitter *EMITTER_path(Path *path, float4x4 transform)
-{
- BLI_assert(path);
- return new PathEmitter(*path, transform);
-}
-
-Emitter *EMITTER_emit_at_start()
-{
- return new EmitAtStartEmitter();
-}
-
} // namespace BParticles
diff --git a/source/blender/simulations/bparticles/emitters.hpp b/source/blender/simulations/bparticles/emitters.hpp
index 157a8826f63..6c933ce0530 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -9,13 +9,12 @@ namespace BParticles {
using BLI::float4x4;
-Emitter *EMITTER_point(float3 point);
+Emitter *EMITTER_point(StringRef particle_type_name, float3 point);
+
Emitter *EMITTER_mesh_surface(StringRef particle_type_name,
struct Mesh *mesh,
const float4x4 &transform_start,
const float4x4 &transform_end,
float normal_velocity);
-Emitter *EMITTER_path(struct Path *path, float4x4 transform);
-Emitter *EMITTER_emit_at_start();
} // namespace BParticles
More information about the Bf-blender-cvs
mailing list