[Bf-blender-cvs] [0c2cfb4] object_nodes: Set of basic node classes for representing modifiers in pynodes.

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


Commit: 0c2cfb44f050a64e02f80c1638bbc5df186c7018
Author: Lukas Tönne
Date:   Wed Nov 18 10:20:49 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB0c2cfb44f050a64e02f80c1638bbc5df186c7018

Set of basic node classes for representing modifiers in pynodes.

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

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

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

diff --git a/release/scripts/startup/bl_operators/object_nodes.py b/release/scripts/startup/bl_operators/object_nodes.py
index 3392d73..f226f8b 100644
--- a/release/scripts/startup/bl_operators/object_nodes.py
+++ b/release/scripts/startup/bl_operators/object_nodes.py
@@ -24,6 +24,24 @@ from bpy.types import Operator, ObjectNode, NodeTree, Node, NodeSocket
 from bpy.props import *
 from nodeitems_utils import NodeCategory, NodeItem
 
+###############################################################################
+# Socket Types
+
+class GeometrySocket(NodeSocket):
+    '''Geometry data socket'''
+    bl_idname = 'GeometrySocket'
+    bl_label = 'Geometry'
+
+    def draw(self, context, layout, node, text):
+        layout.label(text)
+
+    def draw_color(self, context, node):
+        return (1.0, 0.4, 0.216, 1.0)
+
+
+###############################################################################
+
+
 # our own base class with an appropriate poll function,
 # so the categories only show up in our own tree type
 class ObjectNodeCategory(NodeCategory):
@@ -32,6 +50,12 @@ class ObjectNodeCategory(NodeCategory):
         tree = context.space_data.edit_tree
         return tree and tree.bl_idname == 'ObjectNodeTree'
 
+class GeometryNodeCategory(NodeCategory):
+    @classmethod
+    def poll(cls, context):
+        tree = context.space_data.edit_tree
+        return tree and tree.bl_idname == 'GeometryNodeTree'
+
 class ForceFieldNodeCategory(NodeCategory):
     @classmethod
     def poll(cls, context):
@@ -40,23 +64,32 @@ class ForceFieldNodeCategory(NodeCategory):
 
 node_categories = [
     ObjectNodeCategory("COMPONENTS", "Components", items=[
+        NodeItem("GeometryNode"),
         NodeItem("ForceFieldNode"),
         ]),
-    ForceFieldNodeCategory("INPUT", "Input", items=[
+    
+    GeometryNodeCategory("GEO_INPUT", "Input", items=[
+        NodeItem("GeometryMeshNode"),
+        ]),
+    GeometryNodeCategory("GEO_OUTPUT", "Output", items=[
+        NodeItem("GeometryOutputNode"),
+        ]),
+    
+    ForceFieldNodeCategory("FORCE_INPUT", "Input", items=[
         NodeItem("ForcePointDataNode"),
         ]),
     ForceFieldNodeCategory("FORCE_OUTPUT", "Output", items=[
         NodeItem("ForceOutputNode"),
         ]),
-    ForceFieldNodeCategory("CONVERTER", "Converter", items=[
+    ForceFieldNodeCategory("FORCE_CONVERTER", "Converter", items=[
         NodeItem("ObjectSeparateVectorNode"),
         NodeItem("ObjectCombineVectorNode"),
         ]),
-    ForceFieldNodeCategory("MATH", "Math", items=[
+    ForceFieldNodeCategory("FORCE_MATH", "Math", items=[
         NodeItem("ObjectMathNode"),
         NodeItem("ObjectVectorMathNode"),
         ]),
-    ForceFieldNodeCategory("GEOMETRY", "Geometry", items=[
+    ForceFieldNodeCategory("FORCE_GEOMETRY", "Geometry", items=[
         NodeItem("ForceClosestPointNode"),
         ]),
     ]
@@ -158,6 +191,24 @@ class ObjectNodeBase():
         return ntree.bl_idname == 'ObjectNodeTree'
 
 
+class GeometryNode(ObjectNodeBase, ObjectNode):
+    '''Geometry'''
+    bl_idname = 'GeometryNode'
+    bl_label = 'Geometry'
+    bl_icon = 'MESH_DATA'
+
+    bl_id_property_type = 'NODETREE'
+    @classmethod
+    def bl_id_property_poll(cls, ntree):
+        return ntree.bl_idname == 'GeometryNodeTree'
+
+    def draw_buttons(self, context, layout):
+        layout.template_ID(self, "id", new="object_nodes.geometry_nodes_new")
+
+    def compile(self, compiler):
+        pass
+
+
 class ForceFieldNode(ObjectNodeBase, ObjectNode):
     '''Force Field'''
     bl_idname = 'ForceFieldNode'
@@ -177,6 +228,51 @@ class ForceFieldNode(ObjectNodeBase, ObjectNode):
 
 ###############################################################################
 
+class GeometryNodeTree(NodeTreeBase, NodeTree):
+    '''Geometry nodes'''
+    bl_idname = 'GeometryNodeTree'
+    bl_label = 'Geometry Nodes'
+    bl_icon = 'MESH_DATA'
+
+    # does not show up in the editor header
+    @classmethod
+    def poll(cls, context):
+        return False
+
+
+class GeometryNodeBase():
+    @classmethod
+    def poll(cls, ntree):
+        return ntree.bl_idname == 'GeometryNodeTree'
+
+
+class GeometryOutputNode(GeometryNodeBase, ObjectNode):
+    '''Geometry output'''
+    bl_idname = 'GeometryOutputNode'
+    bl_label = 'Output'
+
+    def init(self, context):
+        self.inputs.new('GeometrySocket', "")
+
+    def compile(self, compiler):
+        pass
+
+
+class GeometryMeshNode(GeometryNodeBase, ObjectNode):
+    '''Mesh object data'''
+    bl_idname = 'GeometryMeshNode'
+    bl_label = 'Mesh'
+
+    def init(self, context):
+        self.outputs.new('GeometrySocket', "")
+
+    def compile(self, compiler):
+        pass
+
+
+###############################################################################
+
+
 class ForceFieldNodeTree(NodeTreeBase, NodeTree):
     '''Force field nodes'''
     bl_idname = 'ForceFieldNodeTree'
@@ -472,6 +568,20 @@ class ObjectNodeEdit(Operator):
         return {'FINISHED'}
 
 
+class GeometryNodesNew(Operator):
+    """Create new geometry node tree"""
+    bl_idname = "object_nodes.geometry_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='GeometryNodeTree', name="GeometryNodes")
+
+
 class ForceFieldNodesNew(Operator):
     """Create new force field node tree"""
     bl_idname = "object_nodes.force_field_nodes_new"




More information about the Bf-blender-cvs mailing list