[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