[Bf-blender-cvs] [a988a16e3d2] functions: new Change Particle Position node
Jacques Lucke
noreply at git.blender.org
Wed Sep 11 11:36:57 CEST 2019
Commit: a988a16e3d242c90f1c8556f7d827765f9844993
Author: Jacques Lucke
Date: Wed Sep 11 11:36:52 2019 +0200
Branches: functions
https://developer.blender.org/rBa988a16e3d242c90f1c8556f7d827765f9844993
new Change Particle Position node
===================================================================
M release/scripts/startup/nodes/bparticle_nodes/change_attribute.py
M source/blender/simulations/bparticles/actions.cpp
M source/blender/simulations/bparticles/actions.hpp
M source/blender/simulations/bparticles/node_frontend.cpp
M source/blender/simulations/bparticles/particle_function.cpp
===================================================================
diff --git a/release/scripts/startup/nodes/bparticle_nodes/change_attribute.py b/release/scripts/startup/nodes/bparticle_nodes/change_attribute.py
index 0329f540e88..73d0a8894b2 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/change_attribute.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/change_attribute.py
@@ -37,6 +37,7 @@ class ChangeParticleVelocityNode(bpy.types.Node, BParticlesNode):
def draw(self, layout):
layout.prop(self, "mode", text="")
+
class ChangeParticleSizeNode(bpy.types.Node, BParticlesNode):
bl_idname = "bp_ChangeParticleSizeNode"
bl_label = "Change Size"
@@ -44,3 +45,12 @@ class ChangeParticleSizeNode(bpy.types.Node, BParticlesNode):
def declaration(self, builder: NodeBuilder):
builder.fixed_input("size", "Size", "Float", default=0.01)
builder.execute_output("execute", "Execute")
+
+
+class ChangeParticlePosition(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_ChangeParticlePositionNode"
+ bl_label = "Change Position"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("position", "Position", "Vector")
+ builder.execute_output("execute", "Execute")
diff --git a/source/blender/simulations/bparticles/actions.cpp b/source/blender/simulations/bparticles/actions.cpp
index d0bf08042f0..3f34d29113b 100644
--- a/source/blender/simulations/bparticles/actions.cpp
+++ b/source/blender/simulations/bparticles/actions.cpp
@@ -105,6 +105,17 @@ void ChangeSizeAction::execute(ActionInterface &interface)
}
}
+void ChangePositionAction::execute(ActionInterface &interface)
+{
+ auto positions = interface.attributes().get<float3>("Position");
+
+ auto inputs = m_compute_inputs->compute(interface);
+ for (uint pindex : interface.pindices()) {
+ float3 position = inputs->get<float3>("Position", 0, pindex);
+ positions[pindex] = position;
+ }
+}
+
void KillAction::execute(ActionInterface &interface)
{
interface.kill(interface.pindices());
diff --git a/source/blender/simulations/bparticles/actions.hpp b/source/blender/simulations/bparticles/actions.hpp
index 4c68c750985..b1cce7d87be 100644
--- a/source/blender/simulations/bparticles/actions.hpp
+++ b/source/blender/simulations/bparticles/actions.hpp
@@ -77,6 +77,19 @@ class ChangeSizeAction : public Action {
void execute(ActionInterface &interface) override;
};
+class ChangePositionAction : public Action {
+ private:
+ std::unique_ptr<ParticleFunction> m_compute_inputs;
+
+ public:
+ ChangePositionAction(std::unique_ptr<ParticleFunction> compute_inputs)
+ : m_compute_inputs(std::move(compute_inputs))
+ {
+ }
+
+ void execute(ActionInterface &interface) override;
+};
+
class ExplodeAction : public Action {
private:
Vector<std::string> m_types_to_emit;
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index d4eca69f84a..5d0b2602dc9 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -199,6 +199,21 @@ static std::unique_ptr<Action> ACTION_change_size(VTreeDataGraph &vtree_data_gra
return std::unique_ptr<Action>(action);
}
+static std::unique_ptr<Action> ACTION_change_position(VTreeDataGraph &vtree_data_graph,
+ VirtualSocket *execute_vsocket)
+{
+ VirtualNode *vnode = execute_vsocket->vnode();
+
+ auto fn_or_error = create_particle_function(vnode, vtree_data_graph);
+ if (fn_or_error.is_error()) {
+ return {};
+ }
+ std::unique_ptr<ParticleFunction> compute_inputs_fn = fn_or_error.extract_value();
+
+ Action *action = new ChangePositionAction(std::move(compute_inputs_fn));
+ return std::unique_ptr<Action>(action);
+}
+
BLI_LAZY_INIT_STATIC(StringMap<ActionParserCallback>, get_action_parsers)
{
StringMap<ActionParserCallback> map;
@@ -208,6 +223,7 @@ BLI_LAZY_INIT_STATIC(StringMap<ActionParserCallback>, get_action_parsers)
map.add_new("bp_ParticleConditionNode", ACTION_condition);
map.add_new("bp_ChangeParticleColorNode", ACTION_change_color);
map.add_new("bp_ChangeParticleSizeNode", ACTION_change_size);
+ map.add_new("bp_ChangeParticlePositionNode", ACTION_change_position);
return map;
}
diff --git a/source/blender/simulations/bparticles/particle_function.cpp b/source/blender/simulations/bparticles/particle_function.cpp
index 463ed83a32c..378e1e03a23 100644
--- a/source/blender/simulations/bparticles/particle_function.cpp
+++ b/source/blender/simulations/bparticles/particle_function.cpp
@@ -36,7 +36,8 @@ ParticleFunction::ParticleFunction(SharedFunction fn_no_deps,
}
if (m_fn_with_deps->output_amount() > 0) {
- m_array_execution = FN::Functions::get_precompiled_array_execution(m_fn_with_deps);
+ // m_array_execution = FN::Functions::get_precompiled_array_execution(m_fn_with_deps);
+ m_array_execution = FN::Functions::get_tuple_call_array_execution(m_fn_with_deps);
}
}
More information about the Bf-blender-cvs
mailing list