From a3ed6cd652e0c9248545fdb25c7735b47fdab64a Mon Sep 17 00:00:00 2001 From: "0YSQD05YY1BMCM6\\Administrator" Date: Wed, 1 Jan 2020 12:18:30 +0800 Subject: [PATCH 1/8] input object's bool property : world origin Whether the object is created at the world origin,at the cursor by default. --- nodes/inputs/ScCircle.py | 25 +++++++++++++++++++------ nodes/inputs/ScCone.py | 31 +++++++++++++++++++++++-------- nodes/inputs/ScCube.py | 23 +++++++++++++++++------ nodes/inputs/ScCylinder.py | 28 +++++++++++++++++++++------- nodes/inputs/ScGrid.py | 25 +++++++++++++++++++------ nodes/inputs/ScIcoSphere.py | 24 ++++++++++++++++++------ nodes/inputs/ScMonkey.py | 19 +++++++++++++++---- nodes/inputs/ScPlane.py | 20 ++++++++++++++++---- nodes/inputs/ScTorus.py | 37 +++++++++++++++++++++++++++---------- nodes/inputs/ScUvSphere.py | 25 +++++++++++++++++++------ 10 files changed, 194 insertions(+), 63 deletions(-) diff --git a/nodes/inputs/ScCircle.py b/nodes/inputs/ScCircle.py index 73b6d45..f8a189b 100644 --- a/nodes/inputs/ScCircle.py +++ b/nodes/inputs/ScCircle.py @@ -13,6 +13,7 @@ class ScCircle(Node, ScInputNode): in_type: EnumProperty(items=[("NOTHING", "Nothing", ""), ("NGON", "Ngon", ""), ("TRIFAN", "Triangle Fan", "")], default="NOTHING", update=ScNode.update_value) in_vertices: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) @@ -20,6 +21,7 @@ def init(self, context): self.inputs.new("ScNodeSocketString", "Fill Type").init("in_type") self.inputs.new("ScNodeSocketNumber", "Vertices").init("in_vertices", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -30,9 +32,20 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_circle_add( - vertices = int(self.inputs["Vertices"].default_value), - radius = self.inputs["Radius"].default_value, - fill_type = self.inputs["Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_circle_add( + vertices = int(self.inputs["Vertices"].default_value), + radius = self.inputs["Radius"].default_value, + fill_type = self.inputs["Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_circle_add( + vertices = int(self.inputs["Vertices"].default_value), + radius = self.inputs["Radius"].default_value, + fill_type = self.inputs["Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScCone.py b/nodes/inputs/ScCone.py index 58519c8..e91abb8 100644 --- a/nodes/inputs/ScCone.py +++ b/nodes/inputs/ScCone.py @@ -15,6 +15,7 @@ class ScCone(Node, ScInputNode): in_radius1: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) in_radius2: FloatProperty(min=0.0, update=ScNode.update_value) in_depth: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) @@ -24,6 +25,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Radius 1").init("in_radius1", True) self.inputs.new("ScNodeSocketNumber", "Radius 2").init("in_radius2") self.inputs.new("ScNodeSocketNumber", "Depth").init("in_depth", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -36,11 +38,24 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_cone_add( - vertices = int(self.inputs["Vertices"].default_value), - radius1 = self.inputs["Radius 1"].default_value, - radius2 = self.inputs["Radius 2"].default_value, - depth = self.inputs["Depth"].default_value, - end_fill_type = self.inputs["Base Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_cone_add( + vertices = int(self.inputs["Vertices"].default_value), + radius1 = self.inputs["Radius 1"].default_value, + radius2 = self.inputs["Radius 2"].default_value, + depth = self.inputs["Depth"].default_value, + end_fill_type = self.inputs["Base Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_cone_add( + vertices = int(self.inputs["Vertices"].default_value), + radius1 = self.inputs["Radius 1"].default_value, + radius2 = self.inputs["Radius 2"].default_value, + depth = self.inputs["Depth"].default_value, + end_fill_type = self.inputs["Base Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScCube.py b/nodes/inputs/ScCube.py index ae223b0..9bdd7d5 100644 --- a/nodes/inputs/ScCube.py +++ b/nodes/inputs/ScCube.py @@ -1,4 +1,4 @@ -import bpy +import bpy from bpy.props import FloatProperty, BoolProperty from bpy.types import Node @@ -11,20 +11,31 @@ class ScCube(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value)#默认世界原点为否 World Origin default=False def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True)#默认原点原点为否,在节点显示 display in node def error_condition(self): return ( super().error_condition() or self.inputs["Size"].default_value <= 0 ) - + #是否是在原点创建物体,不是默认则在游标创建物体 Whether the object is created at the origin, not at the cursor by default def functionality(self): - bpy.ops.mesh.primitive_cube_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_cube_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_cube_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + ) diff --git a/nodes/inputs/ScCylinder.py b/nodes/inputs/ScCylinder.py index 75a503d..b86b0b0 100644 --- a/nodes/inputs/ScCylinder.py +++ b/nodes/inputs/ScCylinder.py @@ -14,6 +14,7 @@ class ScCylinder(Node, ScInputNode): in_vertices: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) in_depth: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) @@ -22,6 +23,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Vertices").init("in_vertices", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) self.inputs.new("ScNodeSocketNumber", "Depth").init("in_depth", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -33,10 +35,22 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_cylinder_add( - vertices = int(self.inputs["Vertices"].default_value), - radius = self.inputs["Radius"].default_value, - depth = self.inputs["Depth"].default_value, - end_fill_type = self.inputs["Cap Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_cylinder_add( + vertices = int(self.inputs["Vertices"].default_value), + radius = self.inputs["Radius"].default_value, + depth = self.inputs["Depth"].default_value, + end_fill_type = self.inputs["Cap Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_cylinder_add( + vertices = int(self.inputs["Vertices"].default_value), + radius = self.inputs["Radius"].default_value, + depth = self.inputs["Depth"].default_value, + end_fill_type = self.inputs["Cap Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScGrid.py b/nodes/inputs/ScGrid.py index c0e9b11..098c491 100644 --- a/nodes/inputs/ScGrid.py +++ b/nodes/inputs/ScGrid.py @@ -13,6 +13,7 @@ class ScGrid(Node, ScInputNode): in_x: IntProperty(default=10, min=2, max=10000000, update=ScNode.update_value) in_y: IntProperty(default=10, min=2, max=10000000, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) @@ -20,6 +21,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "X Subdivisions").init("in_x", True) self.inputs.new("ScNodeSocketNumber", "Y Subdivisions").init("in_y", True) self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -30,9 +32,20 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_grid_add( - x_subdivisions = int(self.inputs["X Subdivisions"].default_value), - y_subdivisions = int(self.inputs["Y Subdivisions"].default_value), - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_grid_add( + x_subdivisions = int(self.inputs["X Subdivisions"].default_value), + y_subdivisions = int(self.inputs["Y Subdivisions"].default_value), + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_grid_add( + x_subdivisions = int(self.inputs["X Subdivisions"].default_value), + y_subdivisions = int(self.inputs["Y Subdivisions"].default_value), + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScIcoSphere.py b/nodes/inputs/ScIcoSphere.py index 64df905..0dd46d6 100644 --- a/nodes/inputs/ScIcoSphere.py +++ b/nodes/inputs/ScIcoSphere.py @@ -12,12 +12,14 @@ class ScIcoSphere(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_subdivision: IntProperty(default=2, min=1, max=10, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Subdivisions").init("in_subdivision", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -26,9 +28,19 @@ def error_condition(self): or self.inputs["Radius"].default_value < 0 ) - def functionality(self): - bpy.ops.mesh.primitive_ico_sphere_add( - subdivisions = int(self.inputs["Subdivisions"].default_value), - radius = self.inputs["Radius"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + def functionality(self): + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_ico_sphere_add( + subdivisions = int(self.inputs["Subdivisions"].default_value), + radius = self.inputs["Radius"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_ico_sphere_add( + subdivisions = int(self.inputs["Subdivisions"].default_value), + radius = self.inputs["Radius"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScMonkey.py b/nodes/inputs/ScMonkey.py index 5658827..05a0361 100644 --- a/nodes/inputs/ScMonkey.py +++ b/nodes/inputs/ScMonkey.py @@ -11,11 +11,13 @@ class ScMonkey(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -24,7 +26,16 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_monkey_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_monkey_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_monkey_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScPlane.py b/nodes/inputs/ScPlane.py index 5bad33c..67396e4 100644 --- a/nodes/inputs/ScPlane.py +++ b/nodes/inputs/ScPlane.py @@ -11,11 +11,14 @@ class ScPlane(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( @@ -24,7 +27,16 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_plane_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_plane_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_plane_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScTorus.py b/nodes/inputs/ScTorus.py index 9f0366e..20a7fa2 100644 --- a/nodes/inputs/ScTorus.py +++ b/nodes/inputs/ScTorus.py @@ -17,6 +17,7 @@ class ScTorus(Node, ScInputNode): in_minor_radius: FloatProperty(default=0.25, min=0.01, max=100, update=ScNode.update_value) in_abs_major_radius: FloatProperty(default=1.25, min=0.01, max=100, update=ScNode.update_value) in_abs_minor_radius: FloatProperty(default=0.75, min=0.01, max=100, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) @@ -28,6 +29,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Minor Radius").init("in_minor_radius", True) self.inputs.new("ScNodeSocketNumber", "Exterior Radius").init("in_abs_major_radius") self.inputs.new("ScNodeSocketNumber", "Interior Radius").init("in_abs_minor_radius") + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -42,13 +44,28 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_torus_add( - major_segments = int(self.inputs["Major Segments"].default_value), - minor_segments = int(self.inputs["Minor Segments"].default_value), - mode = self.inputs["Torus Dimensions"].default_value, - major_radius = self.inputs["Major Radius"].default_value, - minor_radius = self.inputs["Minor Radius"].default_value, - abso_major_rad = self.inputs["Exterior Radius"].default_value, - abso_minor_rad = self.inputs["Interior Radius"].default_value, - generate_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_torus_add( + major_segments = int(self.inputs["Major Segments"].default_value), + minor_segments = int(self.inputs["Minor Segments"].default_value), + mode = self.inputs["Torus Dimensions"].default_value, + major_radius = self.inputs["Major Radius"].default_value, + minor_radius = self.inputs["Minor Radius"].default_value, + abso_major_rad = self.inputs["Exterior Radius"].default_value, + abso_minor_rad = self.inputs["Interior Radius"].default_value, + generate_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_torus_add( + major_segments = int(self.inputs["Major Segments"].default_value), + minor_segments = int(self.inputs["Minor Segments"].default_value), + mode = self.inputs["Torus Dimensions"].default_value, + major_radius = self.inputs["Major Radius"].default_value, + minor_radius = self.inputs["Minor Radius"].default_value, + abso_major_rad = self.inputs["Exterior Radius"].default_value, + abso_minor_rad = self.inputs["Interior Radius"].default_value, + generate_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScUvSphere.py b/nodes/inputs/ScUvSphere.py index b4c203d..6605919 100644 --- a/nodes/inputs/ScUvSphere.py +++ b/nodes/inputs/ScUvSphere.py @@ -13,6 +13,7 @@ class ScUvSphere(Node, ScInputNode): in_segment: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_ring: IntProperty(default=16, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) def init(self, context): super().init(context) @@ -20,6 +21,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Segments").init("in_segment", True) self.inputs.new("ScNodeSocketNumber", "Rings").init("in_ring", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) def error_condition(self): return ( @@ -30,9 +32,20 @@ def error_condition(self): ) def functionality(self): - bpy.ops.mesh.primitive_uv_sphere_add( - segments = int(self.inputs["Segments"].default_value), - ring_count = int(self.inputs["Rings"].default_value), - radius = self.inputs["Radius"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + if (self.inputs["World Origin"].default_value): + bpy.ops.mesh.primitive_uv_sphere_add( + segments = int(self.inputs["Segments"].default_value), + ring_count = int(self.inputs["Rings"].default_value), + radius = self.inputs["Radius"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.mesh.primitive_uv_sphere_add( + segments = int(self.inputs["Segments"].default_value), + ring_count = int(self.inputs["Rings"].default_value), + radius = self.inputs["Radius"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file From c699669a74b9032f8053374a2a4490309dfd2499 Mon Sep 17 00:00:00 2001 From: "0YSQD05YY1BMCM6\\Administrator" Date: Wed, 1 Jan 2020 12:20:21 +0800 Subject: [PATCH 2/8] input object's bool property : world origin Whether the object is created at the world origin,at the cursor by default. --- nodes/inputs/ScCube.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodes/inputs/ScCube.py b/nodes/inputs/ScCube.py index 9bdd7d5..1138add 100644 --- a/nodes/inputs/ScCube.py +++ b/nodes/inputs/ScCube.py @@ -24,7 +24,7 @@ def error_condition(self): super().error_condition() or self.inputs["Size"].default_value <= 0 ) - #是否是在原点创建物体,不是默认则在游标创建物体 Whether the object is created at the origin, not at the cursor by default + #是否是在原点创建物体,不是默认则在游标创建物体 Whether the object is created at the origin, at the cursor by default def functionality(self): if (self.inputs["World Origin"].default_value): bpy.ops.mesh.primitive_cube_add( From e450a1f2bd0d9ef59052cb89c34b9a504c420746 Mon Sep 17 00:00:00 2001 From: "0YSQD05YY1BMCM6\\Administrator" Date: Wed, 1 Jan 2020 22:22:59 +0800 Subject: [PATCH 3/8] nput object's bool property : world origin2 I have no idea in pre_execute() --- nodes/_base/node_input.py | 3 +++ nodes/inputs/ScCircle.py | 4 ++-- nodes/inputs/ScCone.py | 4 ++-- nodes/inputs/ScCube.py | 8 ++++---- nodes/inputs/ScCylinder.py | 4 ++-- nodes/inputs/ScEmpty.py | 13 +++++++++++-- nodes/inputs/ScGrid.py | 4 ++-- nodes/inputs/ScIcoSphere.py | 4 ++-- nodes/inputs/ScMonkey.py | 4 ++-- nodes/inputs/ScPlane.py | 4 ++-- nodes/inputs/ScSingleVertex.py | 5 ++++- nodes/inputs/ScTorus.py | 4 ++-- nodes/inputs/ScUvSphere.py | 4 ++-- 13 files changed, 40 insertions(+), 25 deletions(-) diff --git a/nodes/_base/node_input.py b/nodes/_base/node_input.py index 3df77bb..c9d21ac 100644 --- a/nodes/_base/node_input.py +++ b/nodes/_base/node_input.py @@ -6,6 +6,7 @@ class ScInputNode(ScNode): in_name: StringProperty(default="Object", update=ScNode.update_value) + in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) # in_uv: BoolProperty(default=True, update=ScNode.update_value) out_mesh: PointerProperty(type=bpy.types.Object) @@ -13,6 +14,7 @@ def init(self, context): self.node_executable = True super().init(context) self.inputs.new("ScNodeSocketString", "Name").init("in_name") + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) # self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.outputs.new("ScNodeSocketObject", "Object") @@ -24,6 +26,7 @@ def error_condition(self): def pre_execute(self): focus_on_object(self.out_mesh) remove_object(self.out_mesh) + def post_execute(self): out = {} diff --git a/nodes/inputs/ScCircle.py b/nodes/inputs/ScCircle.py index f8a189b..48bebb2 100644 --- a/nodes/inputs/ScCircle.py +++ b/nodes/inputs/ScCircle.py @@ -13,7 +13,7 @@ class ScCircle(Node, ScInputNode): in_type: EnumProperty(items=[("NOTHING", "Nothing", ""), ("NGON", "Ngon", ""), ("TRIFAN", "Triangle Fan", "")], default="NOTHING", update=ScNode.update_value) in_vertices: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) @@ -21,7 +21,7 @@ def init(self, context): self.inputs.new("ScNodeSocketString", "Fill Type").init("in_type") self.inputs.new("ScNodeSocketNumber", "Vertices").init("in_vertices", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( diff --git a/nodes/inputs/ScCone.py b/nodes/inputs/ScCone.py index e91abb8..904deed 100644 --- a/nodes/inputs/ScCone.py +++ b/nodes/inputs/ScCone.py @@ -15,7 +15,7 @@ class ScCone(Node, ScInputNode): in_radius1: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) in_radius2: FloatProperty(min=0.0, update=ScNode.update_value) in_depth: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) @@ -25,7 +25,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Radius 1").init("in_radius1", True) self.inputs.new("ScNodeSocketNumber", "Radius 2").init("in_radius2") self.inputs.new("ScNodeSocketNumber", "Depth").init("in_depth", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( diff --git a/nodes/inputs/ScCube.py b/nodes/inputs/ScCube.py index 1138add..bbc884f 100644 --- a/nodes/inputs/ScCube.py +++ b/nodes/inputs/ScCube.py @@ -1,4 +1,4 @@ -import bpy +import bpy from bpy.props import FloatProperty, BoolProperty from bpy.types import Node @@ -11,20 +11,20 @@ class ScCube(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value)#默认世界原点为否 World Origin default=False + def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True)#默认原点原点为否,在节点显示 display in node + def error_condition(self): return ( super().error_condition() or self.inputs["Size"].default_value <= 0 ) - #是否是在原点创建物体,不是默认则在游标创建物体 Whether the object is created at the origin, at the cursor by default + #是否是在原点创建物体,不是默认则在游标创建物体 def functionality(self): if (self.inputs["World Origin"].default_value): bpy.ops.mesh.primitive_cube_add( diff --git a/nodes/inputs/ScCylinder.py b/nodes/inputs/ScCylinder.py index b86b0b0..d73e1ee 100644 --- a/nodes/inputs/ScCylinder.py +++ b/nodes/inputs/ScCylinder.py @@ -14,7 +14,7 @@ class ScCylinder(Node, ScInputNode): in_vertices: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) in_depth: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) @@ -23,7 +23,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Vertices").init("in_vertices", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) self.inputs.new("ScNodeSocketNumber", "Depth").init("in_depth", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( diff --git a/nodes/inputs/ScEmpty.py b/nodes/inputs/ScEmpty.py index be241a3..bf9b9b0 100644 --- a/nodes/inputs/ScEmpty.py +++ b/nodes/inputs/ScEmpty.py @@ -25,7 +25,16 @@ def error_condition(self): ) def functionality(self): - bpy.ops.object.empty_add( + if (self.inputs["World Origin"].default_value): + bpy.ops.object.empty_add( type = self.inputs["Type"].default_value, - radius = self.inputs["Radius"].default_value + radius = self.inputs["Radius"].default_value, + align='WORLD', + location=(0.0, 0.0, 0.0), + rotation=(0.0, 0.0, 0.0) + ) + else: + bpy.ops.object.empty_add( + type = self.inputs["Type"].default_value, + radius = self.inputs["Radius"].default_value, ) \ No newline at end of file diff --git a/nodes/inputs/ScGrid.py b/nodes/inputs/ScGrid.py index 098c491..7f92545 100644 --- a/nodes/inputs/ScGrid.py +++ b/nodes/inputs/ScGrid.py @@ -13,7 +13,7 @@ class ScGrid(Node, ScInputNode): in_x: IntProperty(default=10, min=2, max=10000000, update=ScNode.update_value) in_y: IntProperty(default=10, min=2, max=10000000, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) @@ -21,7 +21,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "X Subdivisions").init("in_x", True) self.inputs.new("ScNodeSocketNumber", "Y Subdivisions").init("in_y", True) self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( diff --git a/nodes/inputs/ScIcoSphere.py b/nodes/inputs/ScIcoSphere.py index 0dd46d6..4bb632a 100644 --- a/nodes/inputs/ScIcoSphere.py +++ b/nodes/inputs/ScIcoSphere.py @@ -12,14 +12,14 @@ class ScIcoSphere(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_subdivision: IntProperty(default=2, min=1, max=10, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Subdivisions").init("in_subdivision", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( diff --git a/nodes/inputs/ScMonkey.py b/nodes/inputs/ScMonkey.py index 05a0361..8f7d0fe 100644 --- a/nodes/inputs/ScMonkey.py +++ b/nodes/inputs/ScMonkey.py @@ -11,13 +11,13 @@ class ScMonkey(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( diff --git a/nodes/inputs/ScPlane.py b/nodes/inputs/ScPlane.py index 67396e4..126d952 100644 --- a/nodes/inputs/ScPlane.py +++ b/nodes/inputs/ScPlane.py @@ -11,13 +11,13 @@ class ScPlane(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): diff --git a/nodes/inputs/ScSingleVertex.py b/nodes/inputs/ScSingleVertex.py index f63f18b..c5d4168 100644 --- a/nodes/inputs/ScSingleVertex.py +++ b/nodes/inputs/ScSingleVertex.py @@ -19,7 +19,10 @@ def init(self, context): def functionality(self): m = bpy.data.meshes.new(self.inputs["Name"].default_value) obj = bpy.data.objects.new(self.inputs["Name"].default_value, m) - obj.location = bpy.context.scene.cursor.location + if (self.inputs["World Origin"].default_value): + obj.location = (0,0,0) + else: + obj.location = bpy.context.scene.cursor.location m.vertices.add(1) m.update() obj.show_name = self.inputs["Show Name"].default_value diff --git a/nodes/inputs/ScTorus.py b/nodes/inputs/ScTorus.py index 20a7fa2..efcce83 100644 --- a/nodes/inputs/ScTorus.py +++ b/nodes/inputs/ScTorus.py @@ -17,7 +17,7 @@ class ScTorus(Node, ScInputNode): in_minor_radius: FloatProperty(default=0.25, min=0.01, max=100, update=ScNode.update_value) in_abs_major_radius: FloatProperty(default=1.25, min=0.01, max=100, update=ScNode.update_value) in_abs_minor_radius: FloatProperty(default=0.75, min=0.01, max=100, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) @@ -29,7 +29,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Minor Radius").init("in_minor_radius", True) self.inputs.new("ScNodeSocketNumber", "Exterior Radius").init("in_abs_major_radius") self.inputs.new("ScNodeSocketNumber", "Interior Radius").init("in_abs_minor_radius") - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( diff --git a/nodes/inputs/ScUvSphere.py b/nodes/inputs/ScUvSphere.py index 6605919..2b0862e 100644 --- a/nodes/inputs/ScUvSphere.py +++ b/nodes/inputs/ScUvSphere.py @@ -13,7 +13,7 @@ class ScUvSphere(Node, ScInputNode): in_segment: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_ring: IntProperty(default=16, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + def init(self, context): super().init(context) @@ -21,7 +21,7 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Segments").init("in_segment", True) self.inputs.new("ScNodeSocketNumber", "Rings").init("in_ring", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + def error_condition(self): return ( From becd54260086cf509f923acae928f54d2827889a Mon Sep 17 00:00:00 2001 From: "0YSQD05YY1BMCM6\\Administrator" Date: Thu, 2 Jan 2020 10:26:41 +0800 Subject: [PATCH 4/8] input object's bool property : world origin 3 version3 Meybe I got it! --- helper.py | 22 +++++++++++++++++++- nodes/_base/node_input.py | 6 +++++- nodes/inputs/ScCircle.py | 25 ++++++----------------- nodes/inputs/ScCone.py | 31 ++++++++-------------------- nodes/inputs/ScCube.py | 21 +++++-------------- nodes/inputs/ScCylinder.py | 28 +++++++------------------ nodes/inputs/ScEmpty.py | 13 ++---------- nodes/inputs/ScGrid.py | 25 ++++++----------------- nodes/inputs/ScIcoSphere.py | 24 ++++++---------------- nodes/inputs/ScMonkey.py | 19 ++++------------- nodes/inputs/ScPlane.py | 20 ++++-------------- nodes/inputs/ScSingleVertex.py | 5 +---- nodes/inputs/ScTorus.py | 37 +++++++++------------------------- nodes/inputs/ScUvSphere.py | 25 ++++++----------------- 14 files changed, 91 insertions(+), 210 deletions(-) diff --git a/helper.py b/helper.py index 30c0581..6526d12 100644 --- a/helper.py +++ b/helper.py @@ -188,4 +188,24 @@ def selection_type_to_string(sel_type): if "FACE" in sel_type: out.append("Face") - return " + ".join(out) \ No newline at end of file + return " + ".join(out) + +def world_center(obj): + if (obj): + if (obj.name in bpy.context.view_layer.objects): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + #bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_VOLUME') #set origin to volume centroid + #bpy.context.view_layer.objects.active.location #check origin location if needed for any purpose + #obj.location = bpy.ops.object.location_clear(clear_delta=False)#translate origin to global (0,0,0) + #bpy.ops.object.location_clear(clear_delta=False) + bpy.ops.object.location_clear(clear_delta=False) + #bpy.ops.object = bpy.context.view_layer.objects.active + #obj.location_clear(clear_delta=False)#translate origin to global (0,0,0) + bpy.context.object.location #double check it worked + #obj.transform.resize(value=(0, 0, 0), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', mirror=True, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False) + #obj.location = bpy.ops.transform.resize(value=(0, 0, 0), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', mirror=True, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False) + + + + diff --git a/nodes/_base/node_input.py b/nodes/_base/node_input.py index c9d21ac..7762ba8 100644 --- a/nodes/_base/node_input.py +++ b/nodes/_base/node_input.py @@ -2,7 +2,7 @@ from bpy.props import PointerProperty, StringProperty, BoolProperty from .._base.node_base import ScNode -from ...helper import focus_on_object, remove_object +from ...helper import focus_on_object, remove_object, world_center class ScInputNode(ScNode): in_name: StringProperty(default="Object", update=ScNode.update_value) @@ -27,6 +27,8 @@ def pre_execute(self): focus_on_object(self.out_mesh) remove_object(self.out_mesh) + + def post_execute(self): out = {} @@ -35,4 +37,6 @@ def post_execute(self): if (self.out_mesh.data): self.out_mesh.data.name = self.out_mesh.name out["Object"] = self.out_mesh + if (self.inputs["World Origin"].default_value): + world_center(self.out_mesh) return out \ No newline at end of file diff --git a/nodes/inputs/ScCircle.py b/nodes/inputs/ScCircle.py index 48bebb2..73b6d45 100644 --- a/nodes/inputs/ScCircle.py +++ b/nodes/inputs/ScCircle.py @@ -13,7 +13,6 @@ class ScCircle(Node, ScInputNode): in_type: EnumProperty(items=[("NOTHING", "Nothing", ""), ("NGON", "Ngon", ""), ("TRIFAN", "Triangle Fan", "")], default="NOTHING", update=ScNode.update_value) in_vertices: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) @@ -21,7 +20,6 @@ def init(self, context): self.inputs.new("ScNodeSocketString", "Fill Type").init("in_type") self.inputs.new("ScNodeSocketNumber", "Vertices").init("in_vertices", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) - def error_condition(self): return ( @@ -32,20 +30,9 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_circle_add( - vertices = int(self.inputs["Vertices"].default_value), - radius = self.inputs["Radius"].default_value, - fill_type = self.inputs["Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_circle_add( - vertices = int(self.inputs["Vertices"].default_value), - radius = self.inputs["Radius"].default_value, - fill_type = self.inputs["Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_circle_add( + vertices = int(self.inputs["Vertices"].default_value), + radius = self.inputs["Radius"].default_value, + fill_type = self.inputs["Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScCone.py b/nodes/inputs/ScCone.py index 904deed..58519c8 100644 --- a/nodes/inputs/ScCone.py +++ b/nodes/inputs/ScCone.py @@ -15,7 +15,6 @@ class ScCone(Node, ScInputNode): in_radius1: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) in_radius2: FloatProperty(min=0.0, update=ScNode.update_value) in_depth: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) @@ -25,7 +24,6 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Radius 1").init("in_radius1", True) self.inputs.new("ScNodeSocketNumber", "Radius 2").init("in_radius2") self.inputs.new("ScNodeSocketNumber", "Depth").init("in_depth", True) - def error_condition(self): return ( @@ -38,24 +36,11 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_cone_add( - vertices = int(self.inputs["Vertices"].default_value), - radius1 = self.inputs["Radius 1"].default_value, - radius2 = self.inputs["Radius 2"].default_value, - depth = self.inputs["Depth"].default_value, - end_fill_type = self.inputs["Base Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_cone_add( - vertices = int(self.inputs["Vertices"].default_value), - radius1 = self.inputs["Radius 1"].default_value, - radius2 = self.inputs["Radius 2"].default_value, - depth = self.inputs["Depth"].default_value, - end_fill_type = self.inputs["Base Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_cone_add( + vertices = int(self.inputs["Vertices"].default_value), + radius1 = self.inputs["Radius 1"].default_value, + radius2 = self.inputs["Radius 2"].default_value, + depth = self.inputs["Depth"].default_value, + end_fill_type = self.inputs["Base Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScCube.py b/nodes/inputs/ScCube.py index bbc884f..ae223b0 100644 --- a/nodes/inputs/ScCube.py +++ b/nodes/inputs/ScCube.py @@ -11,31 +11,20 @@ class ScCube(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - def error_condition(self): return ( super().error_condition() or self.inputs["Size"].default_value <= 0 ) - #是否是在原点创建物体,不是默认则在游标创建物体 + def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_cube_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_cube_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - ) + bpy.ops.mesh.primitive_cube_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScCylinder.py b/nodes/inputs/ScCylinder.py index d73e1ee..75a503d 100644 --- a/nodes/inputs/ScCylinder.py +++ b/nodes/inputs/ScCylinder.py @@ -14,7 +14,6 @@ class ScCylinder(Node, ScInputNode): in_vertices: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) in_depth: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) @@ -23,7 +22,6 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Vertices").init("in_vertices", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) self.inputs.new("ScNodeSocketNumber", "Depth").init("in_depth", True) - def error_condition(self): return ( @@ -35,22 +33,10 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_cylinder_add( - vertices = int(self.inputs["Vertices"].default_value), - radius = self.inputs["Radius"].default_value, - depth = self.inputs["Depth"].default_value, - end_fill_type = self.inputs["Cap Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_cylinder_add( - vertices = int(self.inputs["Vertices"].default_value), - radius = self.inputs["Radius"].default_value, - depth = self.inputs["Depth"].default_value, - end_fill_type = self.inputs["Cap Fill Type"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_cylinder_add( + vertices = int(self.inputs["Vertices"].default_value), + radius = self.inputs["Radius"].default_value, + depth = self.inputs["Depth"].default_value, + end_fill_type = self.inputs["Cap Fill Type"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScEmpty.py b/nodes/inputs/ScEmpty.py index bf9b9b0..be241a3 100644 --- a/nodes/inputs/ScEmpty.py +++ b/nodes/inputs/ScEmpty.py @@ -25,16 +25,7 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.object.empty_add( + bpy.ops.object.empty_add( type = self.inputs["Type"].default_value, - radius = self.inputs["Radius"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.object.empty_add( - type = self.inputs["Type"].default_value, - radius = self.inputs["Radius"].default_value, + radius = self.inputs["Radius"].default_value ) \ No newline at end of file diff --git a/nodes/inputs/ScGrid.py b/nodes/inputs/ScGrid.py index 7f92545..c0e9b11 100644 --- a/nodes/inputs/ScGrid.py +++ b/nodes/inputs/ScGrid.py @@ -13,7 +13,6 @@ class ScGrid(Node, ScInputNode): in_x: IntProperty(default=10, min=2, max=10000000, update=ScNode.update_value) in_y: IntProperty(default=10, min=2, max=10000000, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) @@ -21,7 +20,6 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "X Subdivisions").init("in_x", True) self.inputs.new("ScNodeSocketNumber", "Y Subdivisions").init("in_y", True) self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - def error_condition(self): return ( @@ -32,20 +30,9 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_grid_add( - x_subdivisions = int(self.inputs["X Subdivisions"].default_value), - y_subdivisions = int(self.inputs["Y Subdivisions"].default_value), - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_grid_add( - x_subdivisions = int(self.inputs["X Subdivisions"].default_value), - y_subdivisions = int(self.inputs["Y Subdivisions"].default_value), - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_grid_add( + x_subdivisions = int(self.inputs["X Subdivisions"].default_value), + y_subdivisions = int(self.inputs["Y Subdivisions"].default_value), + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScIcoSphere.py b/nodes/inputs/ScIcoSphere.py index 4bb632a..64df905 100644 --- a/nodes/inputs/ScIcoSphere.py +++ b/nodes/inputs/ScIcoSphere.py @@ -12,14 +12,12 @@ class ScIcoSphere(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_subdivision: IntProperty(default=2, min=1, max=10, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Subdivisions").init("in_subdivision", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) - def error_condition(self): return ( @@ -28,19 +26,9 @@ def error_condition(self): or self.inputs["Radius"].default_value < 0 ) - def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_ico_sphere_add( - subdivisions = int(self.inputs["Subdivisions"].default_value), - radius = self.inputs["Radius"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_ico_sphere_add( - subdivisions = int(self.inputs["Subdivisions"].default_value), - radius = self.inputs["Radius"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + def functionality(self): + bpy.ops.mesh.primitive_ico_sphere_add( + subdivisions = int(self.inputs["Subdivisions"].default_value), + radius = self.inputs["Radius"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScMonkey.py b/nodes/inputs/ScMonkey.py index 8f7d0fe..5658827 100644 --- a/nodes/inputs/ScMonkey.py +++ b/nodes/inputs/ScMonkey.py @@ -11,13 +11,11 @@ class ScMonkey(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - def error_condition(self): return ( @@ -26,16 +24,7 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_monkey_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_monkey_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_monkey_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScPlane.py b/nodes/inputs/ScPlane.py index 126d952..5bad33c 100644 --- a/nodes/inputs/ScPlane.py +++ b/nodes/inputs/ScPlane.py @@ -11,14 +11,11 @@ class ScPlane(Node, ScInputNode): in_uv: BoolProperty(default=True, update=ScNode.update_value) in_size: FloatProperty(default=2.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.inputs.new("ScNodeSocketNumber", "Size").init("in_size", True) - - def error_condition(self): return ( @@ -27,16 +24,7 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_plane_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_plane_add( - size = self.inputs["Size"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_plane_add( + size = self.inputs["Size"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScSingleVertex.py b/nodes/inputs/ScSingleVertex.py index c5d4168..f63f18b 100644 --- a/nodes/inputs/ScSingleVertex.py +++ b/nodes/inputs/ScSingleVertex.py @@ -19,10 +19,7 @@ def init(self, context): def functionality(self): m = bpy.data.meshes.new(self.inputs["Name"].default_value) obj = bpy.data.objects.new(self.inputs["Name"].default_value, m) - if (self.inputs["World Origin"].default_value): - obj.location = (0,0,0) - else: - obj.location = bpy.context.scene.cursor.location + obj.location = bpy.context.scene.cursor.location m.vertices.add(1) m.update() obj.show_name = self.inputs["Show Name"].default_value diff --git a/nodes/inputs/ScTorus.py b/nodes/inputs/ScTorus.py index efcce83..9f0366e 100644 --- a/nodes/inputs/ScTorus.py +++ b/nodes/inputs/ScTorus.py @@ -17,7 +17,6 @@ class ScTorus(Node, ScInputNode): in_minor_radius: FloatProperty(default=0.25, min=0.01, max=100, update=ScNode.update_value) in_abs_major_radius: FloatProperty(default=1.25, min=0.01, max=100, update=ScNode.update_value) in_abs_minor_radius: FloatProperty(default=0.75, min=0.01, max=100, update=ScNode.update_value) - def init(self, context): super().init(context) @@ -29,7 +28,6 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Minor Radius").init("in_minor_radius", True) self.inputs.new("ScNodeSocketNumber", "Exterior Radius").init("in_abs_major_radius") self.inputs.new("ScNodeSocketNumber", "Interior Radius").init("in_abs_minor_radius") - def error_condition(self): return ( @@ -44,28 +42,13 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_torus_add( - major_segments = int(self.inputs["Major Segments"].default_value), - minor_segments = int(self.inputs["Minor Segments"].default_value), - mode = self.inputs["Torus Dimensions"].default_value, - major_radius = self.inputs["Major Radius"].default_value, - minor_radius = self.inputs["Minor Radius"].default_value, - abso_major_rad = self.inputs["Exterior Radius"].default_value, - abso_minor_rad = self.inputs["Interior Radius"].default_value, - generate_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_torus_add( - major_segments = int(self.inputs["Major Segments"].default_value), - minor_segments = int(self.inputs["Minor Segments"].default_value), - mode = self.inputs["Torus Dimensions"].default_value, - major_radius = self.inputs["Major Radius"].default_value, - minor_radius = self.inputs["Minor Radius"].default_value, - abso_major_rad = self.inputs["Exterior Radius"].default_value, - abso_minor_rad = self.inputs["Interior Radius"].default_value, - generate_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_torus_add( + major_segments = int(self.inputs["Major Segments"].default_value), + minor_segments = int(self.inputs["Minor Segments"].default_value), + mode = self.inputs["Torus Dimensions"].default_value, + major_radius = self.inputs["Major Radius"].default_value, + minor_radius = self.inputs["Minor Radius"].default_value, + abso_major_rad = self.inputs["Exterior Radius"].default_value, + abso_minor_rad = self.inputs["Interior Radius"].default_value, + generate_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file diff --git a/nodes/inputs/ScUvSphere.py b/nodes/inputs/ScUvSphere.py index 2b0862e..b4c203d 100644 --- a/nodes/inputs/ScUvSphere.py +++ b/nodes/inputs/ScUvSphere.py @@ -13,7 +13,6 @@ class ScUvSphere(Node, ScInputNode): in_segment: IntProperty(default=32, min=3, max=10000000, update=ScNode.update_value) in_ring: IntProperty(default=16, min=3, max=10000000, update=ScNode.update_value) in_radius: FloatProperty(default=1.0, min=0.0, update=ScNode.update_value) - def init(self, context): super().init(context) @@ -21,7 +20,6 @@ def init(self, context): self.inputs.new("ScNodeSocketNumber", "Segments").init("in_segment", True) self.inputs.new("ScNodeSocketNumber", "Rings").init("in_ring", True) self.inputs.new("ScNodeSocketNumber", "Radius").init("in_radius", True) - def error_condition(self): return ( @@ -32,20 +30,9 @@ def error_condition(self): ) def functionality(self): - if (self.inputs["World Origin"].default_value): - bpy.ops.mesh.primitive_uv_sphere_add( - segments = int(self.inputs["Segments"].default_value), - ring_count = int(self.inputs["Rings"].default_value), - radius = self.inputs["Radius"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value, - align='WORLD', - location=(0.0, 0.0, 0.0), - rotation=(0.0, 0.0, 0.0) - ) - else: - bpy.ops.mesh.primitive_uv_sphere_add( - segments = int(self.inputs["Segments"].default_value), - ring_count = int(self.inputs["Rings"].default_value), - radius = self.inputs["Radius"].default_value, - calc_uvs = self.inputs["Generate UVs"].default_value - ) \ No newline at end of file + bpy.ops.mesh.primitive_uv_sphere_add( + segments = int(self.inputs["Segments"].default_value), + ring_count = int(self.inputs["Rings"].default_value), + radius = self.inputs["Radius"].default_value, + calc_uvs = self.inputs["Generate UVs"].default_value + ) \ No newline at end of file From 14329ebd3d56c69b6e517690ca3319f307cdeb96 Mon Sep 17 00:00:00 2001 From: TangHui Date: Tue, 17 Mar 2020 21:48:22 +0800 Subject: [PATCH 5/8] Update helper.py --- helper.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/helper.py b/helper.py index 6526d12..4531f88 100644 --- a/helper.py +++ b/helper.py @@ -195,17 +195,5 @@ def world_center(obj): if (obj.name in bpy.context.view_layer.objects): bpy.context.view_layer.objects.active = obj obj.select_set(True) - #bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_VOLUME') #set origin to volume centroid - #bpy.context.view_layer.objects.active.location #check origin location if needed for any purpose - #obj.location = bpy.ops.object.location_clear(clear_delta=False)#translate origin to global (0,0,0) - #bpy.ops.object.location_clear(clear_delta=False) bpy.ops.object.location_clear(clear_delta=False) - #bpy.ops.object = bpy.context.view_layer.objects.active - #obj.location_clear(clear_delta=False)#translate origin to global (0,0,0) - bpy.context.object.location #double check it worked - #obj.transform.resize(value=(0, 0, 0), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', mirror=True, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False) - #obj.location = bpy.ops.transform.resize(value=(0, 0, 0), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', mirror=True, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False) - - - - + From 1314493331913c108f94ffba94213b6b9f3a782c Mon Sep 17 00:00:00 2001 From: TangHui Date: Tue, 17 Mar 2020 21:50:55 +0800 Subject: [PATCH 6/8] Update node_input.py --- nodes/_base/node_input.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/nodes/_base/node_input.py b/nodes/_base/node_input.py index 7762ba8..38ee567 100644 --- a/nodes/_base/node_input.py +++ b/nodes/_base/node_input.py @@ -6,7 +6,7 @@ class ScInputNode(ScNode): in_name: StringProperty(default="Object", update=ScNode.update_value) - in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value) + in_world_origin: BoolProperty(default=False, update=ScNode.update_value) # in_uv: BoolProperty(default=True, update=ScNode.update_value) out_mesh: PointerProperty(type=bpy.types.Object) @@ -14,7 +14,7 @@ def init(self, context): self.node_executable = True super().init(context) self.inputs.new("ScNodeSocketString", "Name").init("in_name") - self.inputs.new("ScNodeSocketBool", "World Origin").init("in_WorldOrigin",True) + self.inputs.new("ScNodeSocketBool", "World Origin").init("in_world_origin",False) # self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv") self.outputs.new("ScNodeSocketObject", "Object") @@ -26,9 +26,6 @@ def error_condition(self): def pre_execute(self): focus_on_object(self.out_mesh) remove_object(self.out_mesh) - - - def post_execute(self): out = {} @@ -39,4 +36,4 @@ def post_execute(self): out["Object"] = self.out_mesh if (self.inputs["World Origin"].default_value): world_center(self.out_mesh) - return out \ No newline at end of file + return out From 82247263acc95622160431ae449746b17def40ef Mon Sep 17 00:00:00 2001 From: TangHui Date: Tue, 17 Mar 2020 21:52:44 +0800 Subject: [PATCH 7/8] Update helper.py --- helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper.py b/helper.py index 4531f88..8d0888a 100644 --- a/helper.py +++ b/helper.py @@ -196,4 +196,4 @@ def world_center(obj): bpy.context.view_layer.objects.active = obj obj.select_set(True) bpy.ops.object.location_clear(clear_delta=False) - + bpy.context.object.location From 0265fceca88cb44334ab8afd94ab40a5bc0bc9bb Mon Sep 17 00:00:00 2001 From: TangHui Date: Tue, 17 Mar 2020 22:00:40 +0800 Subject: [PATCH 8/8] Update helper.py --- helper.py | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/helper.py b/helper.py index 8d0888a..f4bf96f 100644 --- a/helper.py +++ b/helper.py @@ -12,15 +12,16 @@ def focus_on_object(obj, edit=False): if (edit): bpy.ops.object.mode_set(mode="EDIT") -def remove_object(obj, type='MESH'): +def remove_object(obj): if (obj): data = obj.data - bpy.data.objects.remove(object=obj) - if (data): + type = obj.type + bpy.data.objects.remove(obj, do_unlink=True, do_id_user=True) + if data.users == 0: if (type == 'MESH'): - bpy.data.meshes.remove(mesh=data) - elif (type == 'CURVE'): - bpy.data.curves.remove(curve=data) + bpy.data.meshes.remove(data, do_unlink=True, do_id_user=True) + elif (type in ['CURVE', 'FONT']): + bpy.data.curves.remove(data, do_unlink=True, do_id_user=True) def get_override(active=None, edit=False, selected=[]): override = bpy.context.copy() @@ -66,6 +67,8 @@ def convert_data(data, from_type=None, to_type=None): val = Vector(data).magnitude elif (from_type == "OBJECT"): val = bpy.data.objects.find(data.name) + elif (from_type == "CURVE"): + val = bpy.data.curves.find(data.name) elif (from_type == "ARRAY"): val = len(eval(data)) elif (from_type == "SELECTION_TYPE"): @@ -81,6 +84,8 @@ def convert_data(data, from_type=None, to_type=None): val = bool(data) elif (from_type == "OBJECT"): val = bool(data) + elif (from_type == "CURVE"): + val = bool(data) elif (from_type == "ARRAY"): val = bool(eval(data)) elif (from_type == "SELECTION_TYPE"): @@ -96,6 +101,8 @@ def convert_data(data, from_type=None, to_type=None): val = str(Vector(data).to_tuple()) elif (from_type == "OBJECT"): val = str(repr(data)) + elif (from_type == "CURVE"): + val = str(repr(data)) elif (from_type == "ARRAY"): val = data elif (from_type == "SELECTION_TYPE"): @@ -111,6 +118,8 @@ def convert_data(data, from_type=None, to_type=None): val = data elif (from_type == "OBJECT"): return False, None + elif (from_type == "CURVE"): + return False, None elif (from_type == "ARRAY"): val = Vector((eval(data)[0], eval(data)[1], eval(data)[2])).to_tuple() elif (from_type == "SELECTION_TYPE"): @@ -126,6 +135,25 @@ def convert_data(data, from_type=None, to_type=None): return False, None elif (from_type == "OBJECT"): val = data + elif (from_type == "CURVE"): + return False, None + elif (from_type == "ARRAY"): + return False, None + elif (from_type == "SELECTION_TYPE"): + return False, None + elif (to_type == "CURVE"): + if (from_type == "NUMBER"): + return False, None + elif (from_type == "BOOL"): + return False, None + elif (from_type == "STRING"): + return False, None + elif (from_type == "VECTOR"): + return False, None + elif (from_type == "OBJECT"): + return False, None + elif (from_type == "CURVE"): + val = data elif (from_type == "ARRAY"): return False, None elif (from_type == "SELECTION_TYPE"): @@ -141,6 +169,8 @@ def convert_data(data, from_type=None, to_type=None): val = str(list(data)) elif (from_type == "OBJECT"): val = "[" + repr(data) + "]" + elif (from_type == "CURVE"): + val = "[" + repr(data) + "]" elif (from_type == "ARRAY"): val = data elif (from_type == "SELECTION_TYPE"): @@ -162,6 +192,8 @@ def convert_data(data, from_type=None, to_type=None): val.add("FACE") elif (from_type == "OBJECT"): return False, None + elif (from_type == "CURVE"): + return False, None elif (from_type == "ARRAY"): # Allows you to take in a boolean array data_eval = eval(data) val = set()