Commit: 872ee8bbe04fa9099582ce8e7cacf8b42a73d639
Author: Jacques Lucke
Date: Tue Sep 17 12:32:44 2019 +0200
Branches: functions
https://developer.blender.org/rB872ee8bbe04fa9099582ce8e7cacf8b42a73d639
add some node mockups
===================================================================
M release/scripts/startup/nodes/base.py
A release/scripts/startup/nodes/bparticle_nodes/mockups.py
M release/scripts/startup/nodes/search.py
M release/scripts/startup/nodes/tree_panel.py
===================================================================
diff --git a/release/scripts/startup/nodes/base.py
b/release/scripts/startup/nodes/base.py
index 630841e5078..e7d7491fdcf 100644
--- a/release/scripts/startup/nodes/base.py
+++ b/release/scripts/startup/nodes/base.py
@@ -5,6 +5,11 @@ import itertools
from collections import defaultdict
class BaseTree:
+ show_mockups: BoolProperty(
+ name="Show Mockups",
+ default=False,
+ )
+
def new_link(self, a, b):
if a.is_output:
self.links.new(a, b)
diff --git a/release/scripts/startup/nodes/bparticle_nodes/mockups.py
b/release/scripts/startup/nodes/bparticle_nodes/mockups.py
new file mode 100644
index 00000000000..e168f2edfb4
--- /dev/null
+++ b/release/scripts/startup/nodes/bparticle_nodes/mockups.py
@@ -0,0 +1,113 @@
+import bpy
+from bpy.props import *
+from .. base import BParticlesNode
+from .. node_builder import NodeBuilder
+
+
+class ParticleMeshDistanceNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_ParticleSurfaceDistanceNode"
+ bl_label = "Mockup - Particle Surface Distance"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("object", "Object", "Object")
+ builder.fixed_output("distance", "Distance", "Float")
+ builder.fixed_output("is_inside", "Is Inside", "Boolean")
+
+
+class AddToGroupNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_AddToGroupNode"
+ bl_label = "Mockup - Add to Group"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("group_name", "Group", "Text")
+ builder.execute_output("execute", "Execute")
+
+
+class RemoveFromGroupNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_RemoveFromGroupNode"
+ bl_label = "Mockup - Remove from Group"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("group_name", "Group", "Text")
+ builder.execute_output("execute", "Execute")
+
+
+class IsInGroupNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_IsInGroupNode"
+ bl_label = "Mockup - Is in Group"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("group_name", "Group", "Text")
+ builder.fixed_output("is_in_group", "Is in Group", "Boolean")
+
+
+class DerivedAttributeNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_DerivedAttributeNode"
+ bl_label = "Mockup - Derived Attribute"
+
+ predefined_attributes = {
+ "Position" : "Vector",
+ "Velocity" : "Vector",
+ "Color" : "Color",
+ "Size" : "Float",
+ }
+
+ attribute: EnumProperty(
+ name="Attribute",
+ items=[(name, name, "") for name in predefined_attributes.keys()] +
[("Custom", "Custom", "")],
+ update=BParticlesNode.sync_tree,
+ )
+
+ attribute_type: EnumProperty(
+ name="Attribute Type",
+ items=[
+ ("Vector", "Vector", ""),
+ ("Float", "Float", ""),
+ ("Color", "Color", ""),
+ ],
+ update=BParticlesNode.sync_tree,
+ )
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("is_active", "Is Active", "Boolean")
+ if self.attribute == "Custom":
+ builder.fixed_input("name", "Attribute Name", "Text")
+ builder.fixed_input("value", "Value", self.attribute_type)
+ else:
+ builder.fixed_input("value", "Value",
self.predefined_attributes[self.attribute])
+ builder.influences_output("influence", "Influence")
+
+ def draw(self, layout):
+ layout.prop(self, "attribute", text="")
+ if self.attribute == "Custom":
+ layout.prop(self, "attribute_type", text="")
+
+
+class SetAgeLimitNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_SetAgeLimitNode"
+ bl_label = "Mockup - Set Age Limit"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("lifetime", "Lifetime (seconds)", "Float",
default=3)
+ builder.fixed_input("variation", "Variation", "Float", default=0)
+ builder.execute_output("execute", "Execute")
+
+
+class AgeLimitReachedNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_AgeLimitReachedNode"
+ bl_label = "Mockup - Age Limit Reached"
+
+ kill: BoolProperty(
+ name="Kill",
+ default=True,
+ description="Kill the particle when its age limit is reached",
+ )
+
+ execute__prop: NodeBuilder.ExecuteInputProperty()
+
+ def declaration(self, builder: NodeBuilder):
+ builder.execute_input("execute", "Execute", "execute__prop")
+ builder.influences_output("event", "Event")
+
+ def draw(self, layout):
+ layout.prop(self, "kill")
diff --git a/release/scripts/startup/nodes/search.py
b/release/scripts/startup/nodes/search.py
index a57756e38b7..b7046de9f27 100644
--- a/release/scripts/startup/nodes/search.py
+++ b/release/scripts/startup/nodes/search.py
@@ -11,7 +11,10 @@ class NodeSearch(bpy.types.Operator):
def get_search_items(self, context):
items = []
+ tree = context.space_data.edit_tree
for node_cls in BaseNode.iter_final_subclasses():
+ if node_cls.bl_label.startswith("Mockup") and not
tree.show_mockups:
+ continue
for search_term, settings in node_cls.get_search_terms():
item = encode_search_item(node_cls.bl_idname, search_term,
settings)
items.append(item)
diff --git a/release/scripts/startup/nodes/tree_panel.py
b/release/scripts/startup/nodes/tree_panel.py
index 2dd622238f3..d85b5294e27 100644
--- a/release/scripts/startup/nodes/tree_panel.py
+++ b/release/scripts/startup/nodes/tree_panel.py
@@ -1,15 +1,18 @@
import bpy
from . ui import NodeSidebarPanel
-from . function_tree import FunctionTree
+from . base import BaseTree
class TreePanel(bpy.types.Panel, NodeSidebarPanel):
bl_idname = "FN_PT_tree_panel"
- bl_label = "Functions Tree"
+ bl_label = "Tree"
@classmethod
def poll(self, context):
- try: return isinstance(context.space_data.edit_tree, FunctionTree)
+ try: return isinstance(context.space_data.edit_tree, BaseTree)
except: return False
def draw(self, context):
layout = self.layout
+
+ tree = context.space_data.edit_tree
+ layout.prop(tree, "show_mockups")
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs