[Bf-blender-cvs] [80a149c] object_nodes: Some basic nodes for nesting force fields inside the object nodes.

Lukas Tönne noreply at git.blender.org
Tue Nov 24 09:42:37 CET 2015


Commit: 80a149c1eb6f2f5f813c45e091a847e9c10484d9
Author: Lukas Tönne
Date:   Fri Jul 17 16:20:51 2015 +0200
Branches: object_nodes
https://developer.blender.org/rB80a149c1eb6f2f5f813c45e091a847e9c10484d9

Some basic nodes for nesting force fields inside the object nodes.

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

M	release/scripts/startup/bl_operators/object_nodes.py
M	release/scripts/startup/bl_ui/properties_data_modifier.py

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

diff --git a/release/scripts/startup/bl_operators/object_nodes.py b/release/scripts/startup/bl_operators/object_nodes.py
index 10a6fbe..d88ea2c 100644
--- a/release/scripts/startup/bl_operators/object_nodes.py
+++ b/release/scripts/startup/bl_operators/object_nodes.py
@@ -39,7 +39,12 @@ node_categories = [
 
 ###############################################################################
 
-class ObjectNodeTreeBase():
+class ObjectNodeTree(NodeTree):
+    '''Object component nodes'''
+    bl_idname = 'ObjectNodeTree'
+    bl_label = 'Object Nodes'
+    bl_icon = 'OBJECT_DATA'
+
     @classmethod
     def get_from_context(cls, context):
         ob = context.object
@@ -48,13 +53,6 @@ class ObjectNodeTreeBase():
         else:
             return None, None, None
 
-
-class ObjectNodeTree(ObjectNodeTreeBase, NodeTree):
-    '''Object component nodes'''
-    bl_idname = 'ObjectNodeTree'
-    bl_label = 'Object Nodes'
-    bl_icon = 'OBJECT_DATA'
-
     @classmethod
     def register(cls):
         global node_categories
@@ -83,16 +81,22 @@ class ForceFieldNode(ObjectNodeBase, ObjectNode):
         return ntree.bl_idname == 'ForceFieldNodeTree'
 
     def draw_buttons(self, context, layout):
-        layout.template_ID(self, "id")
+        layout.template_ID(self, "id", new="object_nodes.force_field_nodes_new")
+        layout.operator("object_nodes.node_edit")
 
 ###############################################################################
 
-class ForceFieldNodeTree(ObjectNodeTreeBase, NodeTree):
+class ForceFieldNodeTree(NodeTree):
     '''Force field nodes'''
     bl_idname = 'ForceFieldNodeTree'
     bl_label = 'Force Field Nodes'
     bl_icon = 'FORCE_FORCE'
 
+    # does not show up in the editor header
+    @classmethod
+    def poll(cls, context):
+        return False
+
 
 class ForceNodeBase():
     @classmethod
@@ -111,40 +115,60 @@ class ForceForceNode(ForceNodeBase, ObjectNode):
 
 ###############################################################################
 
-#class TestNode(ObjectNode):
-class TestNode():
-    '''A custom node'''
-    bl_idname = 'TestNode'
-    bl_label = 'Test Node'
-    bl_icon = 'SOUND'
+class ObjectNodesNew(Operator):
+    """Create new object node tree"""
+    bl_idname = "object_nodes.object_nodes_new"
+    bl_label = "New"
+    bl_options = {'REGISTER', 'UNDO'}
+
+    name = StringProperty(
+            name="Name",
+            )
+
+    def execute(self, context):
+    	return bpy.ops.node.new_node_tree(type='ObjectNodeTree', name="ObjectNodes")
 
-    bl_id_property_type = 'OBJECT'
 
-    myStringProperty = bpy.props.StringProperty()
-    myFloatProperty = bpy.props.FloatProperty(default=3.1415926)
+class ObjectNodeEdit(Operator):
+    """Open a node for editing"""
+    bl_idname = "object_nodes.node_edit"
+    bl_label = "Edit"
+    bl_options = {'REGISTER', 'UNDO'}
+
+    exit = BoolProperty(name="Exit", description="Exit current node tree", default=False)
+
+    @staticmethod
+    def get_node(context):
+        if hasattr(context, "node"):
+            return context.node
+        else:
+            return context.active_node
 
     @classmethod
-    def poll(cls, ntree):
-        return ntree.bl_idname == 'ObjectNodeTree'
+    def poll(cls, context):
+        space = context.space_data
+        if space.type != 'NODE_EDITOR':
+            return False
+        
+        return cls.get_node(context) is not None
 
-    def init(self, context):
-        self.inputs.new('NodeSocketFloat', "Hello")
-        self.inputs.new('NodeSocketFloat', "World")
-        self.inputs.new('NodeSocketVector', "!")
+    def execute(self, context):
+        space = context.space_data
+        node = self.get_node(context)
+        has_tree = hasattr(node, "id") and node.id and isinstance(node.id, bpy.types.NodeTree)
+        exit = self.exit or not has_tree
 
-        self.outputs.new('NodeSocketColor', "How")
-        self.outputs.new('NodeSocketColor', "are")
-        self.outputs.new('NodeSocketFloat', "you")
+        if exit:
+            space.path.pop()
+        else:
+            space.path.append(node.id, node)
 
-    def draw_buttons(self, context, layout):
-        layout.label("Node settings")
-        layout.prop(self, "myFloatProperty")
-        layout.template_ID(self, "id")
+        return {'FINISHED'}
 
 
-class ObjectNodesNew(Operator):
-    """Create new object node tree"""
-    bl_idname = "object_nodes.new"
+class ForceFieldNodesNew(Operator):
+    """Create new force field node tree"""
+    bl_idname = "object_nodes.force_field_nodes_new"
     bl_label = "New"
     bl_options = {'REGISTER', 'UNDO'}
 
@@ -153,4 +177,4 @@ class ObjectNodesNew(Operator):
             )
 
     def execute(self, context):
-    	return bpy.ops.node.new_node_tree(type='ObjectNodeTree', name="NodeTree")
+        return bpy.ops.node.new_node_tree(type='ForceFieldNodeTree', name="ForceFieldNodes")
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 467eedd..1ab86b4 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -37,7 +37,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
         ob = context.object
 
-        layout.template_ID(ob, "node_tree", new="object_nodes.new")
+        layout.template_ID(ob, "node_tree", new="object_nodes.object_nodes_new")
 
         layout.separator()




More information about the Bf-blender-cvs mailing list