[Bf-blender-cvs] [6a82c17] object_nodes: Create a default minimal node setup when creating new trees or groups.

Lukas Tönne noreply at git.blender.org
Sun Dec 27 10:31:15 CET 2015


Commit: 6a82c17c10a0fb4d652552f8fb575c8466bc7bb7
Author: Lukas Tönne
Date:   Fri Dec 25 17:02:39 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB6a82c17c10a0fb4d652552f8fb575c8466bc7bb7

Create a default minimal node setup when creating new trees or groups.

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

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	release/scripts/nodes/forcefield_nodes.py
M	release/scripts/nodes/geometry_nodes.py
M	release/scripts/nodes/group_nodes.py
M	release/scripts/nodes/instancing_nodes.py
M	release/scripts/nodes/object_nodes.py

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

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 9628dc1..c651e63 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 9628dc1922be2fb6281bc66f5f7512c2a57c294a
+Subproject commit c651e63a9a537624f639950f3127a1dee29205d0
diff --git a/release/scripts/addons b/release/scripts/addons
index 407d0ea..3fc5b82 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 407d0ea752b3af73d3f13ba072671bd09eefecb1
+Subproject commit 3fc5b82c6bdba2f9c954fbf497621b9bb794a1bc
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 9f29e18..cf842d8 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 9f29e18707917ec5be262431d2e09dbb85332f41
+Subproject commit cf842d8bb7b0033ca4fa99f7ebedcbd3810fd274
diff --git a/release/scripts/nodes/forcefield_nodes.py b/release/scripts/nodes/forcefield_nodes.py
index fd6a6f6..d16faef 100644
--- a/release/scripts/nodes/forcefield_nodes.py
+++ b/release/scripts/nodes/forcefield_nodes.py
@@ -49,6 +49,10 @@ class ForceFieldNodeTree(NodeTreeBase, NodeTree):
     def poll(cls, context):
         return False
 
+    def init_default(self):
+        out = self.nodes.new(ForceOutputNode.bl_idname)
+        out.location = (100, 20)
+
 
 class ForceNodeBase(NodeBase):
     @classmethod
@@ -117,10 +121,24 @@ class ForceFieldNodesNew(Operator):
 
     name = StringProperty(
             name="Name",
+            default="ForceFieldNodes",
             )
 
+    @classmethod
+    def make_node_tree(cls, name="ForceFieldNodes"):
+        ntree = bpy.data.node_groups.new(name, ForceFieldNodeTree.bl_idname)
+        if ntree:
+            ntree.init_default()
+        return ntree
+
     def execute(self, context):
-        return bpy.ops.node.new_node_tree(type='ForceFieldNodeTree', name="ForceFieldNodes")
+        node = getattr(context, "node", None)
+        ntree = self.make_node_tree(self.name)
+        if ntree is None:
+            return {'CANCELLED'}
+        if node:
+            node.id = ntree
+        return {'FINISHED'}
 
 
 ###############################################################################
diff --git a/release/scripts/nodes/geometry_nodes.py b/release/scripts/nodes/geometry_nodes.py
index 9d7e3c5..32fd9e9 100644
--- a/release/scripts/nodes/geometry_nodes.py
+++ b/release/scripts/nodes/geometry_nodes.py
@@ -51,6 +51,14 @@ class GeometryNodeTree(NodeTreeBase, NodeTree):
     def poll(cls, context):
         return False
 
+    def init_default(self):
+        mesh = self.nodes.new(GeometryMeshLoadNode.bl_idname)
+        mesh.location = (-100 - mesh.bl_width_default, 20)
+        out = self.nodes.new(GeometryOutputNode.bl_idname)
+        out.location = (100, 20)
+
+        self.links.new(mesh.outputs[0], out.inputs[0])
+
 
 class GeometryNodeBase(NodeBase):
     @classmethod
@@ -342,15 +350,30 @@ class GeometryNodesNew(Operator):
 
     name = StringProperty(
             name="Name",
+            default="GeometryNodes",
             )
 
+    @classmethod
+    def make_node_tree(cls, name="GeometryNodes"):
+        ntree = bpy.data.node_groups.new(name, GeometryNodeTree.bl_idname)
+        if ntree:
+            ntree.init_default()
+        return ntree
+
     def execute(self, context):
-        return bpy.ops.node.new_node_tree(type='GeometryNodeTree', name="GeometryNodes")
+        node = getattr(context, "node", None)
+        ntree = self.make_node_tree(self.name)
+        if ntree is None:
+            return {'CANCELLED'}
+        if node:
+            node.id = ntree
+        return {'FINISHED'}
 
 ###############################################################################
 
 def register():
-    gnode, ginput, goutput = group_nodes.make_node_group_types("Geometry", GeometryNodeTree, GeometryNodeBase, "object_nodes.geometry_nodes_new")
+    gnode, ginput, goutput = group_nodes.make_node_group_types(
+        "Geometry", GeometryNodeTree, GeometryNodeBase)
     bpy.utils.register_module(__name__)
 
     node_categories = [
diff --git a/release/scripts/nodes/group_nodes.py b/release/scripts/nodes/group_nodes.py
index d2d9815..8673bdd 100644
--- a/release/scripts/nodes/group_nodes.py
+++ b/release/scripts/nodes/group_nodes.py
@@ -179,7 +179,7 @@ def make_node_group_interface(prefix, treetype, tree_items_update):
 
 ###############################################################################
 
-def make_node_group_types(prefix, treetype, node_base, op_tree_new):
+def make_node_group_types(prefix, treetype, node_base):
     ntree_idname = treetype.bl_idname
     groupnode_idname = '%sGroupNode' % prefix
 
@@ -192,10 +192,26 @@ def make_node_group_types(prefix, treetype, node_base, op_tree_new):
 
         name = StringProperty(
                 name="Name",
+                default="%s Node Group" % prefix,
                 )
 
+        @classmethod
+        def init_default(cls, ntree):
+            gin = ntree.nodes.new(GroupInputNode.bl_idname)
+            gin.location = (-100 - gin.bl_width_default, 20)
+            gout = ntree.nodes.new(GroupOutputNode.bl_idname)
+            gout.location = (100, 20)
+
         def execute(self, context):
-            return bpy.ops.node.new_node_tree(type=self.bl_ntree_idname, name="%s Node Group" % prefix)
+            node = getattr(context, "node", None)
+            ntree = bpy.data.node_groups.new(self.name, self.bl_ntree_idname)
+            if ntree is None:
+                return {'CANCELLED'}
+            
+            self.init_default(ntree)
+            if node:
+                node.id = ntree
+            return {'FINISHED'}
 
     # updates all affected nodes when the interface changes
     def tree_items_update(self, context=bpy.context):
@@ -296,7 +312,7 @@ def make_node_group_types(prefix, treetype, node_base, op_tree_new):
             return True
 
         def draw_buttons(self, context, layout):
-            layout.template_ID(self, "id", new=op_tree_new)
+            layout.template_ID(self, "id", new=NodeGroupNew.bl_idname)
 
         def compile_dependencies(self, depsnode):
             ntree = self.id
diff --git a/release/scripts/nodes/instancing_nodes.py b/release/scripts/nodes/instancing_nodes.py
index 8010ccf..6cf6dc1 100644
--- a/release/scripts/nodes/instancing_nodes.py
+++ b/release/scripts/nodes/instancing_nodes.py
@@ -51,6 +51,10 @@ class InstancingNodeTree(NodeTreeBase, NodeTree):
     def poll(cls, context):
         return False
 
+    def init_default(self):
+        out = self.nodes.new(OutputNode.bl_idname)
+        out.location = (100, 20)
+
 
 class InstancingNodeBase(NodeBase):
     @classmethod
@@ -159,15 +163,29 @@ class InstancingNodesNew(Operator):
 
     name = StringProperty(
             name="Name",
+            default="DupliNodes",
             )
 
+    @classmethod
+    def make_node_tree(cls, name="DupliNodes"):
+        ntree = bpy.data.node_groups.new(name, InstancingNodeTree.bl_idname)
+        if ntree:
+            ntree.init_default()
+        return ntree
+
     def execute(self, context):
-        return bpy.ops.node.new_node_tree(type='InstancingNodeTree', name="InstancingNodes")
+        node = getattr(context, "node", None)
+        ntree = self.make_node_tree(self.name)
+        if ntree is None:
+            return {'CANCELLED'}
+        if node:
+            node.id = ntree
+        return {'FINISHED'}
 
 ###############################################################################
 
 def register():
-    gnode, ginput, goutput = group_nodes.make_node_group_types("Instancing", InstancingNodeTree, InstancingNodeBase, "object_nodes.instancing_nodes_new")
+    gnode, ginput, goutput = group_nodes.make_node_group_types("Instancing", InstancingNodeTree, InstancingNodeBase)
     bpy.utils.register_module(__name__)
 
     node_categories = [
diff --git a/release/scripts/nodes/object_nodes.py b/release/scripts/nodes/object_nodes.py
index 791fddc..a935328 100644
--- a/release/scripts/nodes/object_nodes.py
+++ b/release/scripts/nodes/object_nodes.py
@@ -24,7 +24,11 @@ from bpy.types import Operator, ObjectNode, NodeTree, Node, NodeSocket
 from bpy.props import *
 from nodeitems_utils import NodeCategory, NodeItem
 from mathutils import *
+
 from common_nodes import NodeTreeBase, NodeBase
+from geometry_nodes import GeometryNodesNew
+from instancing_nodes import InstancingNodesNew
+from forcefield_nodes import ForceFieldNodesNew
 
 ###############################################################################
 
@@ -80,7 +84,11 @@ class GeometryNode(ObjectNodeBase, ObjectNode):
             ntree.bvm_eval_dependencies(depsnode)
 
     def draw_buttons(self, context, layout):
-        layout.template_ID(self, "id", new="object_nodes.geometry_nodes_new")
+        layout.context_pointer_set("node", self)
+        layout.template_ID(self, "id", new=GeometryNodesNew.bl_idname)
+
+    def init(self, context):
+        self.id = GeometryNodesNew.make_node_tree()
 
     def compile(self, compiler):
         pass
@@ -107,6 +115,7 @@ class InstancingNode(ObjectNodeBase, ObjectNode):
             ntree.bvm_eval_dependencies(depsnode)
 
     def draw_buttons(self, context, layout):
+        layout.context_pointer_set("node", self)
         layout.template_ID(self, "id", new="object_nodes.instancing_nodes_new")
 
     def compile(self, compiler):
@@ -134,6 +143,7 @@ class ForceFieldNode(ObjectNodeBase, ObjectNode):
             ntree.bvm_eval_dependencies(depsnode)
 
     def draw_buttons(self, context, layout):
+        layout.context_pointer_set("node", self)
         layout.template_ID(self, "id", new="object_nodes.force_field_nodes_new")
 
     def compile(self, compiler):




More information about the Bf-blender-cvs mailing list