[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