[Bf-blender-cvs] [ec7054772bf] functions: utility operators to create emitter and particle system trees

Jacques Lucke noreply at git.blender.org
Tue Jul 16 18:20:35 CEST 2019


Commit: ec7054772bf231b8f1b04ec110571cc5cde6445a
Author: Jacques Lucke
Date:   Tue Jul 16 17:33:13 2019 +0200
Branches: functions
https://developer.blender.org/rBec7054772bf231b8f1b04ec110571cc5cde6445a

utility operators to create emitter and particle system trees

===================================================================

M	release/scripts/startup/bl_operators/modifiers.py
M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py

===================================================================

diff --git a/release/scripts/startup/bl_operators/modifiers.py b/release/scripts/startup/bl_operators/modifiers.py
index 1f8e47428b6..cc60a7341e6 100644
--- a/release/scripts/startup/bl_operators/modifiers.py
+++ b/release/scripts/startup/bl_operators/modifiers.py
@@ -58,7 +58,33 @@ class NewPointGeneratorFunction(bpy.types.Operator, ModifierOperator):
         mod.function_tree = tree
         return {'FINISHED'}
 
+class NewBParticlesTree(bpy.types.Operator, ModifierOperator):
+    bl_idname = "bp.new_bparticles_tree"
+    bl_label = "New BParticles Tree"
+
+    def execute(self, context):
+        mod = self.get_modifier()
+        if mod is None:
+            return {'CANCELLED'}
+
+        tree = bpy.data.node_groups.new("Particle System", "BParticlesTree")
+
+        type_node = tree.nodes.new("bp_ParticleTypeNode")
+
+        emitter_node = tree.nodes.new("bp_PointEmitterNode")
+        emitter_node.location = (-250, 100)
+
+        gravity_node = tree.nodes.new("bp_GravityForceNode")
+        gravity_node.location = (-250, -100)
+
+        tree.links.new(emitter_node.outputs[0], type_node.inputs[0])
+        tree.links.new(gravity_node.outputs[0], type_node.inputs[1])
+
+        mod.bparticles_tree = tree
+        return {'FINISHED'}
+
 classes = (
     NewDeformationFunction,
     NewPointGeneratorFunction,
+    NewBParticlesTree,
 )
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index c755f0fff2a..9605f0d1394 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1662,7 +1662,12 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         props.modifier_name = md.name
 
     def BPARTICLES(self, layout, ob, md):
-        layout.prop(md, "bparticles_tree")
+        row = layout.row(align=True)
+        row.prop(md, "bparticles_tree")
+        props = row.operator("bp.new_bparticles_tree", text="", icon="ADD")
+        props.object_name = ob.name
+        props.modifier_name = md.name
+
         layout.operator("object.bparticles_clear_cache", text="Clear Cache")
 
 
diff --git a/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py b/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
index 859dab80695..aed71ca419f 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
@@ -2,6 +2,7 @@ import bpy
 from bpy.props import *
 from .. base import FunctionNode
 from .. socket_builder import SocketBuilder
+from .. node_operators import new_function_tree
 
 class CustomEmitterNode(bpy.types.Node, FunctionNode):
     bl_idname = "bp_CustomEmitterNode"
@@ -21,7 +22,20 @@ class CustomEmitterNode(bpy.types.Node, FunctionNode):
         builder.emitter_output("emitter", "Emitter")
 
     def draw(self, layout):
-        layout.prop(self, "function_tree", text="")
+        row = layout.row(align=True)
+        row.prop(self, "function_tree", text="")
+        if self.function_tree is None:
+            self.invoke_function(row, "new_function", "", icon='PLUS')
+
+    def new_function(self):
+        self.function_tree = new_function_tree("Custom Emitter", [
+            ("Float", "Start Time"),
+            ("Float", "Time Step"),
+        ], [
+            ("Vector List", "Position"),
+            ("Vector List", "Velocity"),
+            ("Float List", "Size"),
+        ])
 
     def iter_dependency_trees(self):
         if self.function_tree is not None:



More information about the Bf-blender-cvs mailing list