[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57303] trunk/blender/release/scripts/ templates_py: Removed the unused draw_add_menu function from pynodes template.

Lukas Toenne lukas.toenne at googlemail.com
Sun Jun 9 11:49:44 CEST 2013


Revision: 57303
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57303
Author:   lukastoenne
Date:     2013-06-09 09:49:44 +0000 (Sun, 09 Jun 2013)
Log Message:
-----------
Removed the unused draw_add_menu function from pynodes template. This was previously used to extend the node Add menu, now the node categories system is used instead.

Modified Paths:
--------------
    trunk/blender/release/scripts/templates_py/custom_nodes.py

Added Paths:
-----------
    trunk/blender/release/scripts/templates_py/custom_nodes_groups.py

Modified: trunk/blender/release/scripts/templates_py/custom_nodes.py
===================================================================
--- trunk/blender/release/scripts/templates_py/custom_nodes.py	2013-06-09 09:42:34 UTC (rev 57302)
+++ trunk/blender/release/scripts/templates_py/custom_nodes.py	2013-06-09 09:49:44 UTC (rev 57303)
@@ -4,10 +4,6 @@
 # Implementation of custom nodes from Python
 
 
-# Shortcut for node type menu
-def add_nodetype(layout, type):
-    layout.operator("node.add_node", text=type.bl_label).type = type.bl_rna.identifier
-
 # Derived from the NodeTree base type, similar to Menu, Operator, Panel, etc.
 class MyCustomTree(NodeTree):
     # Description string
@@ -22,12 +18,7 @@
     #       Only one base tree class is needed in the editor for selecting the general category
     bl_icon = 'NODETREE'
 
-    def draw_add_menu(self, context, layout):
-        layout.label("Hello World!")
-        add_nodetype(layout, bpy.types.CustomNodeType)
-        add_nodetype(layout, bpy.types.MyCustomGroup)
 
-
 # Custom socket type
 class MyCustomSocket(NodeSocket):
     # Description string

Copied: trunk/blender/release/scripts/templates_py/custom_nodes_groups.py (from rev 57302, trunk/blender/release/scripts/templates_py/custom_nodes.py)
===================================================================
--- trunk/blender/release/scripts/templates_py/custom_nodes_groups.py	                        (rev 0)
+++ trunk/blender/release/scripts/templates_py/custom_nodes_groups.py	2013-06-09 09:49:44 UTC (rev 57303)
@@ -0,0 +1,178 @@
+import bpy
+from bpy_types import NodeTree, Node, NodeSocket
+
+# Implementation of custom nodes from Python
+
+
+# Shortcut for node type menu
+def add_nodetype(layout, type):
+    layout.operator("node.add_node", text=type.bl_label).type = type.bl_rna.identifier
+
+# Derived from the NodeTree base type, similar to Menu, Operator, Panel, etc.
+class MyCustomTree(NodeTree):
+    # Description string
+    '''A custom node tree type that will show up in the node editor header'''
+    # Optional identifier string. If not explicitly defined, the python class name is used.
+    bl_idname = 'CustomTreeType'
+    # Label for nice name display
+    bl_label = 'Custom Node Tree'
+    # Icon identifier
+    # NOTE: If no icon is defined, the node tree will not show up in the editor header!
+    #       This can be used to make additional tree types for groups and similar nodes (see below)
+    #       Only one base tree class is needed in the editor for selecting the general category
+    bl_icon = 'NODETREE'
+
+    def draw_add_menu(self, context, layout):
+        layout.label("Hello World!")
+        add_nodetype(layout, bpy.types.CustomNodeType)
+        add_nodetype(layout, bpy.types.MyCustomGroup)
+
+
+# Custom socket type
+class MyCustomSocket(NodeSocket):
+    # Description string
+    '''Custom node socket type'''
+    # Optional identifier string. If not explicitly defined, the python class name is used.
+    bl_idname = 'CustomSocketType'
+    # Label for nice name display
+    bl_label = 'Custom Node Socket'
+
+    # Enum items list
+    my_items = [
+        ("DOWN", "Down", "Where your feet are"),
+        ("UP", "Up", "Where your head should be"),
+        ("LEFT", "Left", "Not right"),
+        ("RIGHT", "Right", "Not left")
+    ]
+
+    myEnumProperty = bpy.props.EnumProperty(name="Direction", description="Just an example", items=my_items, default='UP')
+
+    # Optional function for drawing the socket input value
+    def draw(self, context, layout, node, text):
+        if self.is_linked:
+            layout.label(text)
+        else:
+            layout.prop(self, "myEnumProperty", text=text)
+
+    # Socket color
+    def draw_color(self, context, node):
+        return (1.0, 0.4, 0.216, 0.5)
+
+# Mix-in class for all custom nodes in this tree type.
+# Defines a poll function to enable instantiation.
+class MyCustomTreeNode :
+    @classmethod
+    def poll(cls, ntree):
+        return ntree.bl_idname == 'CustomTreeType'
+
+# Derived from the Node base type.
+class MyCustomNode(Node, MyCustomTreeNode):
+    # === Basics ===
+    # Description string
+    '''A custom node'''
+    # Optional identifier string. If not explicitly defined, the python class name is used.
+    bl_idname = 'CustomNodeType'
+    # Label for nice name display
+    bl_label = 'Custom Node'
+    # Icon identifier
+    bl_icon = 'SOUND'
+
+    # === Custom Properties ===
+    # These work just like custom properties in ID data blocks
+    # Extensive information can be found under
+    # http://wiki.blender.org/index.php/Doc:2.6/Manual/Extensions/Python/Properties
+    myStringProperty = bpy.props.StringProperty()
+    myFloatProperty = bpy.props.FloatProperty(default=3.1415926)
+
+    # === Optional Functions ===
+    # Initialization function, called when a new node is created.
+    # This is the most common place to create the sockets for a node, as shown below.
+    # NOTE: this is not the same as the standard __init__ function in Python, which is
+    #       a purely internal Python method and unknown to the node system!
+    def init(self, context):
+        self.inputs.new('CustomSocketType', "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")
+
+    # Copy function to initialize a copied node from an existing one.
+    def copy(self, node):
+        print("Copying from node ", node)
+
+    # Free function to clean up on removal.
+    def free(self):
+        print("Removing node ", self, ", Goodbye!")
+
+    # Additional buttons displayed on the node.
+    def draw_buttons(self, context, layout):
+        layout.label("Node settings")
+        layout.prop(self, "myFloatProperty")
+
+    # Detail buttons in the sidebar.
+    # If this function is not defined, the draw_buttons function is used instead
+    def draw_buttons_ext(self, context, layout):
+        layout.prop(self, "myFloatProperty")
+        # myStringProperty button will only be visible in the sidebar
+        layout.prop(self, "myStringProperty")
+
+
+### Node Categories ###
+# Node categories are a python system for automatically
+# extending the Add menu, toolbar panels and search operator.
+# For more examples see release/scripts/startup/nodeitems_builtins.py
+
+import nodeitems_utils
+from nodeitems_utils import NodeCategory, NodeItem
+
+# our own base class with an appropriate poll function,
+# so the categories only show up in our own tree type
+class MyNodeCategory(NodeCategory):
+    @classmethod
+    def poll(cls, context):
+        return context.space_data.tree_type == 'CustomTreeType'
+
+# all categories in a list
+node_categories = [
+    # identifier, label, items list
+    MyNodeCategory("SOMENODES", "Some Nodes", items=[
+        # our basic node
+        NodeItem("CustomNodeType"),
+        ]),
+    MyNodeCategory("OTHERNODES", "Other Nodes", items=[
+        # the node item can have additional settings,
+        # which are applied to new nodes
+        # NB: settings values are stored as string expressions,
+        # for this reason they should be converted to strings using repr()
+        NodeItem("CustomNodeType", label="Node A", settings={
+            "myStringProperty" : repr("Lorem ipsum dolor sit amet"),
+            "myFloatProperty" : repr(1.0),
+            }),
+        NodeItem("CustomNodeType", label="Node B", settings={
+            "myStringProperty" : repr("consectetur adipisicing elit"),
+            "myFloatProperty" : repr(2.0),
+            }),
+        ]),
+    ]
+
+
+def register():
+    bpy.utils.register_class(MyCustomTree)
+    bpy.utils.register_class(MyCustomSocket)
+    bpy.utils.register_class(MyCustomNode)
+
+    nodeitems_utils.register_node_categories("CUSTOM_NODES", node_categories)
+
+
+def unregister():
+    nodeitems_utils.unregister_node_categories("CUSTOM_NODES")
+
+    bpy.utils.unregister_class(MyCustomTree)
+    bpy.utils.unregister_class(MyCustomSocket)
+    bpy.utils.unregister_class(MyCustomNode)
+
+
+if __name__ == "__main__":
+    register()




More information about the Bf-blender-cvs mailing list