[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