Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/startup/nodes/function_nodes/object_mesh.py')
-rw-r--r--release/scripts/startup/nodes/function_nodes/object_mesh.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/release/scripts/startup/nodes/function_nodes/object_mesh.py b/release/scripts/startup/nodes/function_nodes/object_mesh.py
new file mode 100644
index 00000000000..c1848e56f52
--- /dev/null
+++ b/release/scripts/startup/nodes/function_nodes/object_mesh.py
@@ -0,0 +1,113 @@
+import bpy
+from bpy.props import *
+from .. base import FunctionNode
+from .. node_builder import NodeBuilder
+
+class ObjectMeshNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_ObjectMeshNode"
+ bl_label = "Object Mesh"
+
+ def declaration(self, builder):
+ builder.fixed_input("object", "Object", "Object", display_name=False)
+ builder.fixed_output("vertex_locations", "Vertex Locations", "Vector List")
+
+
+class VertexInfo(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_VertexInfoNode"
+ bl_label = "Vertex Info"
+
+ def declaration(self, builder):
+ builder.fixed_output("position", "Position", "Vector")
+
+
+class ClosestLocationOnObjectNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_ClosestLocationOnObjectNode"
+ bl_label = "Closest Location on Object"
+
+ use_list__object: NodeBuilder.VectorizedProperty()
+ use_list__position: NodeBuilder.VectorizedProperty()
+
+ def declaration(self, builder: NodeBuilder):
+ builder.vectorized_input("object", "use_list__object", "Object", "Objects", "Object", display_name=False)
+ builder.vectorized_input("position", "use_list__position", "Position", "Positions", "Vector")
+
+ vectorize_props = ["use_list__object", "use_list__position"]
+ builder.vectorized_output("closest_hook", vectorize_props, "Closest Hook", "Closest Hooks", "Surface Hook")
+ builder.vectorized_output("closest_position", vectorize_props, "Closest Position", "Closest Positions", "Vector")
+ builder.vectorized_output("closest_normal", vectorize_props, "Closest Normal", "Closest Normals", "Vector")
+
+
+class GetPositionOnSurfaceNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_GetPositionOnSurfaceNode"
+ bl_label = "Get Position on Surface"
+
+ use_list__surface_hook: NodeBuilder.VectorizedProperty()
+
+ def declaration(self, builder: NodeBuilder):
+ builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+ builder.vectorized_output("position", ["use_list__surface_hook"], "Position", "Positions", "Vector")
+
+
+class GetNormalOnSurfaceNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_GetNormalOnSurfaceNode"
+ bl_label = "Get Normal on Surface"
+
+ use_list__surface_hook: NodeBuilder.VectorizedProperty()
+
+ def declaration(self, builder):
+ builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+ builder.vectorized_output("normal", ["use_list__surface_hook"], "Normal", "Normals", "Vector")
+
+
+class GetWeightOnSurfaceNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_GetWeightOnSurfaceNode"
+ bl_label = "Get Weight on Surface"
+
+ use_list__surface_hook: NodeBuilder.VectorizedProperty()
+ use_list__vertex_group_name: NodeBuilder.VectorizedProperty()
+
+ def declaration(self, builder: NodeBuilder):
+ builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+ builder.vectorized_input("vertex_group_name", "use_list__vertex_group_name", "Name", "Names", "Text",
+ default="Group", display_name=False, display_icon="GROUP_VERTEX")
+ builder.vectorized_output("weight", ["use_list__surface_hook", "use_list__vertex_group_name"], "Weight", "Weights", "Float")
+
+
+class GetImageColorOnSurfaceNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_GetImageColorOnSurfaceNode"
+ bl_label = "Get Image Color on Surface"
+
+ use_list__surface_hook: NodeBuilder.VectorizedProperty()
+ use_list__image: NodeBuilder.VectorizedProperty()
+
+ def declaration(self, builder: NodeBuilder):
+ builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+ builder.vectorized_input("image", "use_list__image", "Image", "Images", "Image", display_name=False)
+ builder.vectorized_output("color", ["use_list__surface_hook", "use_list__image"], "Color", "Colors", "Color")
+
+
+class SampleObjectSurfaceNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_SampleObjectSurfaceNode"
+ bl_label = "Sample Object Surface"
+
+ weight_mode: EnumProperty(
+ name="Weight Mode",
+ items=[
+ ("UNIFORM", "Uniform", "", "NONE", 0),
+ ("VERTEX_WEIGHTS", "Vertex Weights", "", "NONE", 1),
+ ],
+ default="UNIFORM",
+ update=FunctionNode.sync_tree,
+ )
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("object", "Object", "Object", display_name=False)
+ builder.fixed_input("amount", "Amount", "Integer", default=10)
+ builder.fixed_input("seed", "Seed", "Integer")
+ if self.weight_mode == "VERTEX_WEIGHTS":
+ builder.fixed_input("vertex_group_name", "Vertex Group", "Text", default="Group")
+
+ builder.fixed_output("surface_hooks", "Surface Hooks", "Surface Hook List")
+
+ def draw(self, layout):
+ layout.prop(self, "weight_mode", text="")