[Bf-blender-cvs] [fd8244fb26c] functions: new Combine Behaviors node
Jacques Lucke
noreply at git.blender.org
Thu Sep 5 10:40:42 CEST 2019
Commit: fd8244fb26c40c5604517ef075c26b6075830bc3
Author: Jacques Lucke
Date: Thu Sep 5 10:38:03 2019 +0200
Branches: functions
https://developer.blender.org/rBfd8244fb26c40c5604517ef075c26b6075830bc3
new Combine Behaviors node
===================================================================
A release/scripts/startup/nodes/bparticle_nodes/combine_behaviors.py
M source/blender/simulations/bparticles/node_frontend.cpp
===================================================================
diff --git a/release/scripts/startup/nodes/bparticle_nodes/combine_behaviors.py b/release/scripts/startup/nodes/bparticle_nodes/combine_behaviors.py
new file mode 100644
index 00000000000..f8c68bcce4c
--- /dev/null
+++ b/release/scripts/startup/nodes/bparticle_nodes/combine_behaviors.py
@@ -0,0 +1,11 @@
+import bpy
+from .. base import BParticlesNode
+from .. node_builder import NodeBuilder
+
+class CombineBehaviorsNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_CombineBehaviorsNode"
+ bl_label = "Combine Behaviors"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.particle_effector_input("behaviors", "Behaviors")
+ builder.particle_effector_output("behaviors", "Behaviors")
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index d896c166275..87eadd8cc80 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -33,32 +33,39 @@ class BehaviorCollector {
MultiMap<std::string, OffsetHandler *> &m_offset_handlers;
};
-static bool is_particle_type_node(VirtualNode *vnode)
-{
- return STREQ(vnode->bnode()->idname, "bp_ParticleTypeNode");
-}
+static StringRef particle_type_idname = "bp_ParticleTypeNode";
+static StringRef combine_behaviors_idname = "bp_CombineBehaviorsNode";
static std::unique_ptr<Action> build_action_list(VTreeDataGraph &vtree_data_graph,
VirtualNode *start_vnode,
StringRef name);
-static Vector<VirtualNode *> find_connected_particle_type_nodes(VirtualSocket *output_socket)
+static void find_connected_particle_type_nodes__recursive(VirtualSocket *output_vsocket,
+ SetVector<VirtualNode *> &r_nodes)
{
- BLI_assert(output_socket->is_output());
- Vector<VirtualNode *> type_nodes;
- for (VirtualSocket *connected : output_socket->links()) {
+ BLI_assert(output_vsocket->is_output());
+ for (VirtualSocket *connected : output_vsocket->links()) {
VirtualNode *connected_vnode = connected->vnode();
- if (is_particle_type_node(connected_vnode)) {
- type_nodes.append(connected_vnode);
+ if (connected_vnode->idname() == particle_type_idname) {
+ r_nodes.add(connected_vnode);
+ }
+ else if (connected_vnode->idname() == combine_behaviors_idname) {
+ find_connected_particle_type_nodes__recursive(connected_vnode->output(0), r_nodes);
}
}
- return type_nodes;
}
-static Vector<std::string> find_connected_particle_type_names(VirtualSocket *output_socket)
+static Vector<VirtualNode *> find_connected_particle_type_nodes(VirtualSocket *output_vsocket)
+{
+ SetVector<VirtualNode *> type_nodes;
+ find_connected_particle_type_nodes__recursive(output_vsocket, type_nodes);
+ return Vector<VirtualNode *>(type_nodes);
+}
+
+static Vector<std::string> find_connected_particle_type_names(VirtualSocket *output_vsocket)
{
Vector<std::string> type_names;
- for (VirtualNode *vnode : find_connected_particle_type_nodes(output_socket)) {
+ for (VirtualNode *vnode : find_connected_particle_type_nodes(output_vsocket)) {
type_names.append(vnode->name());
}
return type_names;
More information about the Bf-blender-cvs
mailing list