[Bf-blender-cvs] [d2442ac] object_nodes: Registering an id property type for ObjectNode subclasses is optional.
Lukas Tönne
noreply at git.blender.org
Tue Nov 24 09:42:35 CET 2015
Commit: d2442ac1cf5af13c28d22f3554dd0aa7dcc3a041
Author: Lukas Tönne
Date: Fri Jul 17 15:39:06 2015 +0200
Branches: object_nodes
https://developer.blender.org/rBd2442ac1cf5af13c28d22f3554dd0aa7dcc3a041
Registering an id property type for ObjectNode subclasses is optional.
===================================================================
M release/scripts/startup/bl_operators/object_nodes.py
M source/blender/makesrna/intern/rna_nodetree.c
===================================================================
diff --git a/release/scripts/startup/bl_operators/object_nodes.py b/release/scripts/startup/bl_operators/object_nodes.py
index 161e782..10a6fbe 100644
--- a/release/scripts/startup/bl_operators/object_nodes.py
+++ b/release/scripts/startup/bl_operators/object_nodes.py
@@ -19,23 +19,128 @@
# <pep8-80 compliant>
import bpy
-from bpy.types import Operator
+import nodeitems_utils
+from bpy.types import Operator, ObjectNode, NodeTree, Node, NodeSocket
from bpy.props import *
+from nodeitems_utils import NodeCategory, NodeItem
-from bpy.types import NodeTree, Node, NodeSocket
-class ObjectNodeTree(NodeTree):
+# our own base class with an appropriate poll function,
+# so the categories only show up in our own tree type
+class ObjectNodeCategory(NodeCategory):
+ @classmethod
+ def poll(cls, context):
+ return context.space_data.tree_type == 'ObjectNodeTree'
+
+node_categories = [
+ ObjectNodeCategory("COMPONENTS", "Components", items=[
+ NodeItem("ForceFieldNode"),
+ ]),
+ ]
+
+###############################################################################
+
+class ObjectNodeTreeBase():
+ @classmethod
+ def get_from_context(cls, context):
+ ob = context.object
+ if ob:
+ return ob.node_tree, ob.node_tree, ob
+ 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 get_from_context(cls, context):
- ob = context.object
- if ob:
- return ob.node_tree, ob.node_tree, ob
- else:
- return None, None, None
+ def register(cls):
+ global node_categories
+ nodeitems_utils.register_node_categories("OBJECT_NODES", node_categories)
+
+ @classmethod
+ def unregister(cls):
+ nodeitems_utils.unregister_node_categories("OBJECT_NODES")
+
+
+class ObjectNodeBase():
+ @classmethod
+ def poll(cls, ntree):
+ return ntree.bl_idname == 'ObjectNodeTree'
+
+
+class ForceFieldNode(ObjectNodeBase, ObjectNode):
+ '''Force Field'''
+ bl_idname = 'ForceFieldNode'
+ bl_label = 'Force Field'
+ bl_icon = 'FORCE_FORCE'
+
+ bl_id_property_type = 'NODETREE'
+ @classmethod
+ def bl_id_property_poll(cls, ntree):
+ return ntree.bl_idname == 'ForceFieldNodeTree'
+
+ def draw_buttons(self, context, layout):
+ layout.template_ID(self, "id")
+
+###############################################################################
+
+class ForceFieldNodeTree(ObjectNodeTreeBase, NodeTree):
+ '''Force field nodes'''
+ bl_idname = 'ForceFieldNodeTree'
+ bl_label = 'Force Field Nodes'
+ bl_icon = 'FORCE_FORCE'
+
+
+class ForceNodeBase():
+ @classmethod
+ def poll(cls, ntree):
+ return ntree.bl_idname == 'ForceFieldNodeTree'
+
+
+class ForceForceNode(ForceNodeBase, ObjectNode):
+ '''Force'''
+ bl_idname = 'ForceForceNode'
+ bl_label = 'Force'
+ bl_icon = 'FORCE_FORCE'
+
+ def init(self, context):
+ self.inputs.new('NodeSocketFloat', "Strength")
+
+###############################################################################
+
+#class TestNode(ObjectNode):
+class TestNode():
+ '''A custom node'''
+ bl_idname = 'TestNode'
+ bl_label = 'Test Node'
+ bl_icon = 'SOUND'
+
+ bl_id_property_type = 'OBJECT'
+
+ myStringProperty = bpy.props.StringProperty()
+ myFloatProperty = bpy.props.FloatProperty(default=3.1415926)
+
+ @classmethod
+ def poll(cls, ntree):
+ return ntree.bl_idname == 'ObjectNodeTree'
+
+ def init(self, context):
+ self.inputs.new('NodeSocketFloat', "Hello")
+ self.inputs.new('NodeSocketFloat', "World")
+ self.inputs.new('NodeSocketVector', "!")
+
+ self.outputs.new('NodeSocketColor', "How")
+ self.outputs.new('NodeSocketColor', "are")
+ self.outputs.new('NodeSocketFloat', "you")
+
+ def draw_buttons(self, context, layout):
+ layout.label("Node settings")
+ layout.prop(self, "myFloatProperty")
+ layout.template_ID(self, "id")
+
class ObjectNodesNew(Operator):
"""Create new object node tree"""
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 0f31551..de703a2 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -6738,7 +6738,7 @@ static void rna_def_object_node(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "typeinfo->id_property_type");
RNA_def_property_enum_items(prop, id_type_items);
RNA_def_property_enum_default(prop, ID_OB);
- RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
RNA_def_property_ui_text(prop, "ID Property Type", "Type of ID-block that is used as the id property");
/* poll */
More information about the Bf-blender-cvs
mailing list