[Bf-blender-cvs] [cb96f9d] object_nodes: Mockup Nodes: Dummy pynodes for smoke and rigidbody simulations.

Lukas Tönne noreply at git.blender.org
Fri Jan 22 16:47:22 CET 2016


Commit: cb96f9d5680d71698a0e5667b395039802cbf2f7
Author: Lukas Tönne
Date:   Fri Jan 22 10:56:54 2016 +0100
Branches: object_nodes
https://developer.blender.org/rBcb96f9d5680d71698a0e5667b395039802cbf2f7

Mockup Nodes: Dummy pynodes for smoke and rigidbody simulations.

These have no implementation yet, they are just meant to test concepts.

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

M	release/scripts/nodes/__init__.py
M	release/scripts/nodes/forcefield_nodes.py
M	release/scripts/nodes/object_nodes.py
A	release/scripts/nodes/rigidbody_nodes.py
A	release/scripts/nodes/smokesim_nodes.py
M	release/scripts/nodes/socket_types.py

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

diff --git a/release/scripts/nodes/__init__.py b/release/scripts/nodes/__init__.py
index 775a9b0..e65021b 100644
--- a/release/scripts/nodes/__init__.py
+++ b/release/scripts/nodes/__init__.py
@@ -29,6 +29,8 @@ _modules = [
     "group_nodes",
     "forcefield_nodes",
     "geometry_nodes",
+    "rigidbody_nodes",
+    "smokesim_nodes",
     "object_nodes",
 ]
 
diff --git a/release/scripts/nodes/forcefield_nodes.py b/release/scripts/nodes/forcefield_nodes.py
index d16faef..6f06ad4 100644
--- a/release/scripts/nodes/forcefield_nodes.py
+++ b/release/scripts/nodes/forcefield_nodes.py
@@ -115,7 +115,7 @@ class ForceClosestPointNode(ForceNodeBase, ObjectNode):
 
 class ForceFieldNodesNew(Operator):
     """Create new force field node tree"""
-    bl_idname = "object_nodes.force_field_nodes_new"
+    bl_idname = "object_nodes.forcefield_nodes_new"
     bl_label = "New"
     bl_options = {'REGISTER', 'UNDO'}
 
diff --git a/release/scripts/nodes/object_nodes.py b/release/scripts/nodes/object_nodes.py
index 6d09991..16c7cb1 100644
--- a/release/scripts/nodes/object_nodes.py
+++ b/release/scripts/nodes/object_nodes.py
@@ -29,6 +29,8 @@ from common_nodes import NodeTreeBase, NodeBase
 from geometry_nodes import GeometryNodesNew
 from instancing_nodes import InstancingNodesNew
 from forcefield_nodes import ForceFieldNodesNew
+from smokesim_nodes import SmokeSimNodesNew
+from rigidbody_nodes import RigidBodyNodesNew
 
 ###############################################################################
 
@@ -116,7 +118,7 @@ class InstancingNode(ObjectNodeBase, ObjectNode):
 
     def draw_buttons(self, context, layout):
         layout.context_pointer_set("node", self)
-        layout.template_ID(self, "id", new="object_nodes.instancing_nodes_new")
+        layout.template_ID(self, "id", new=InstancingNodesNew.bl_idname)
 
     def compile(self, compiler):
         pass
@@ -144,7 +146,63 @@ class ForceFieldNode(ObjectNodeBase, ObjectNode):
 
     def draw_buttons(self, context, layout):
         layout.context_pointer_set("node", self)
-        layout.template_ID(self, "id", new="object_nodes.force_field_nodes_new")
+        layout.template_ID(self, "id", new=ForceFieldNodesNew.bl_idname)
+
+    def compile(self, compiler):
+        pass
+
+
+class SmokeSimNode(ObjectNodeBase, ObjectNode):
+    '''Smoke simulation'''
+    bl_idname = 'SmokeSimNode'
+    bl_label = 'Smoke Simulation'
+    bl_icon = 'MOD_SMOKE'
+
+    bl_id_property_type = 'NODETREE'
+    def bl_id_property_poll(self, ntree):
+        return ntree.bl_idname == 'SmokeSimNodeTree'
+
+    def compile_dependencies(self, depsnode):
+        ntree = self.id
+        if ntree:
+            ntree.bvm_compile_dependencies(depsnode)
+
+    def eval_dependencies(self, depsnode):
+        ntree = self.id
+        if ntree:
+            ntree.bvm_eval_dependencies(depsnode)
+
+    def draw_buttons(self, context, layout):
+        layout.context_pointer_set("node", self)
+        layout.template_ID(self, "id", new=SmokeSimNodesNew.bl_idname)
+
+    def compile(self, compiler):
+        pass
+
+
+class RigidBodyNode(ObjectNodeBase, ObjectNode):
+    '''Rigid body simulation'''
+    bl_idname = 'RigidBodyNode'
+    bl_label = 'Rigid Body Simulation'
+    bl_icon = 'PHYSICS'
+
+    bl_id_property_type = 'NODETREE'
+    def bl_id_property_poll(self, ntree):
+        return ntree.bl_idname == 'RigidBodyNodeTree'
+
+    def compile_dependencies(self, depsnode):
+        ntree = self.id
+        if ntree:
+            ntree.bvm_compile_dependencies(depsnode)
+
+    def eval_dependencies(self, depsnode):
+        ntree = self.id
+        if ntree:
+            ntree.bvm_eval_dependencies(depsnode)
+
+    def draw_buttons(self, context, layout):
+        layout.context_pointer_set("node", self)
+        layout.template_ID(self, "id", new=RigidBodyNodesNew.bl_idname)
 
     def compile(self, compiler):
         pass
@@ -213,11 +271,15 @@ def register():
     node_categories = [
         ObjectNodeCategory("COMPONENTS", "Components", items=[
             NodeItem("GeometryNode",
-                     settings={"id": "bpy.types.%s.make_node_tree()" % (GeometryNodesNew.bl_rna.identifier)}),
+                     settings={"id": "bpy.types.OBJECT_NODES_OT_geometry_nodes_new.make_node_tree()"}),
             NodeItem("ForceFieldNode",
-                     settings={"id": "bpy.types.%s.make_node_tree()" % (ForceFieldNodesNew.bl_rna.identifier)}),
+                     settings={"id": "bpy.types.OBJECT_NODES_OT_forcefield_nodes_new.make_node_tree()"}),
             NodeItem("InstancingNode",
-                     settings={"id": "bpy.types.%s.make_node_tree()" % (InstancingNodesNew.bl_rna.identifier)}),
+                     settings={"id": "bpy.types.OBJECT_NODES_OT_instancing_nodes_new.make_node_tree()"}),
+            NodeItem("SmokeSimNode",
+                     settings={"id": "bpy.types.OBJECT_NODES_OT_smokesim_nodes_new.make_node_tree()"}),
+            NodeItem("RigidBodyNode",
+                     settings={"id": "bpy.types.OBJECT_NODES_OT_rigidbody_nodes_new.make_node_tree()"}),
             ]),
         ]
     nodeitems_utils.register_node_categories("OBJECT_NODES", node_categories)
diff --git a/release/scripts/nodes/rigidbody_nodes.py b/release/scripts/nodes/rigidbody_nodes.py
new file mode 100644
index 0000000..ec69d5d
--- /dev/null
+++ b/release/scripts/nodes/rigidbody_nodes.py
@@ -0,0 +1,150 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8-80 compliant>
+
+import bpy
+import nodeitems_utils
+from bpy.types import PropertyGroup, Operator, ObjectNode, NodeTree, Node
+from bpy.props import *
+from nodeitems_utils import NodeCategory, NodeItem
+from mathutils import *
+from common_nodes import NodeTreeBase, NodeBase, DynamicSocketListNode, enum_property_copy, enum_property_value_prop
+import group_nodes
+
+###############################################################################
+
+
+# our own base class with an appropriate poll function,
+# so the categories only show up in our own tree type
+class RigidBodyNodeCategory(NodeCategory):
+    @classmethod
+    def poll(cls, context):
+        tree = context.space_data.edit_tree
+        return tree and tree.bl_idname == 'RigidBodyNodeTree'
+
+###############################################################################
+
+class RigidBodyNodeTree(NodeTreeBase, NodeTree):
+    '''Smoke simulation nodes'''
+    bl_idname = 'RigidBodyNodeTree'
+    bl_label = 'Rigid Body Nodes'
+    bl_icon = 'PHYSICS'
+
+    # does not show up in the editor header
+    @classmethod
+    def poll(cls, context):
+        return False
+
+    def init_default(self):
+        #out = self.nodes.new(OutputNode.bl_idname)
+        #out.location = (100, 20)
+        pass
+
+
+class RigidBodyNodeBase(NodeBase):
+    @classmethod
+    def poll(cls, ntree):
+        return ntree.bl_idname == 'RigidBodyNodeTree'
+
+###############################################################################
+
+
+###############################################################################
+
+class RigidBodyNodesNew(Operator):
+    """Create new rigid body simulation node tree"""
+    bl_idname = "object_nodes.rigidbody_nodes_new"
+    bl_label = "New"
+    bl_options = {'REGISTER', 'UNDO'}
+
+    name = StringProperty(
+            name="Name",
+            default="RigidBodyNodes",
+            )
+
+    @classmethod
+    def make_node_tree(cls, name="RigidBodyNodes"):
+        ntree = bpy.data.node_groups.new(name, RigidBodyNodeTree.bl_idname)
+        if ntree:
+            ntree.init_default()
+        return ntree
+
+    def execute(self, context):
+        node = getattr(context, "node", None)
+        ntree = self.make_node_tree(self.name)
+        if ntree is None:
+            return {'CANCELLED'}
+        if node:
+            node.id = ntree
+        return {'FINISHED'}
+
+###############################################################################
+
+def register():
+    gnode, ginput, goutput = group_nodes.make_node_group_types(
+        "RigidBody", RigidBodyNodeTree, RigidBodyNodeBase)
+    bpy.utils.register_module(__name__)
+
+    node_categories = [
+        RigidBodyNodeCategory("SMO_INPUT", "Input", items=[
+            NodeItem("ObjectIterationNode"),
+            NodeItem(ginput.bl_idname),
+            NodeItem("ObjectValueFloatNode"),
+            NodeItem("ObjectValueIntNode"),
+            NodeItem("ObjectValueVectorNode"),
+            NodeItem("ObjectValueColorNode"),
+            ]),
+        RigidBodyNodeCategory("SMO_OUTPUT", "Output", items=[
+            NodeItem(goutput.bl_idname),
+            ]),
+        RigidBodyNodeCategory("SMO_CONVERTER", "Converter", items=[
+            NodeItem("ObjectSeparateVectorNode"),
+            NodeItem("ObjectCombineVectorNode"),
+            ]),
+        RigidBodyNodeCategory("SMO_MATH", "Math", items=[
+            NodeItem("ObjectMathNode"),
+            NodeItem("ObjectVectorMathNode"),
+            NodeItem("ObjectTranslationTransformNode"),
+            NodeItem("ObjectEulerTransformNode"),
+            NodeItem("ObjectAxisAngleTransformNode"),
+            NodeItem("ObjectScaleTransformNode"),
+            NodeItem("ObjectGetTranslationNode"),
+            NodeItem("ObjectGetEulerNode"),
+            NodeItem("ObjectGetAxisAngleNode"),
+            NodeItem("ObjectGetScaleNode"),
+            NodeItem("ObjectRandomNode"),
+            ]),
+        RigidBodyNodeC

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list