Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions nodes/_base/node_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@

class ScInputNode(ScNode):
in_name: StringProperty(default="Object", update=ScNode.update_value)
in_WorldOrigin: BoolProperty(default=False, update=ScNode.update_value)

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in_world_origin
(Just for consistency in variable names)

# in_uv: BoolProperty(default=True, update=ScNode.update_value)
out_mesh: PointerProperty(type=bpy.types.Object)

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)

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keep this property hidden by default because each input node has its own set of sockets visible by default (just to slightly increase UX)

# self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv")
self.outputs.new("ScNodeSocketObject", "Object")

Expand All @@ -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 = {}
Expand Down
25 changes: 19 additions & 6 deletions nodes/inputs/ScCircle.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ 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)
self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv")
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 (
Expand All @@ -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
)
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
)
31 changes: 23 additions & 8 deletions nodes/inputs/ScCone.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


def init(self, context):
super().init(context)
Expand All @@ -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)


def error_condition(self):
return (
Expand All @@ -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
)
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
)
21 changes: 16 additions & 5 deletions nodes/inputs/ScCube.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


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):
bpy.ops.mesh.primitive_cube_add(
size = self.inputs["Size"].default_value,
calc_uvs = self.inputs["Generate UVs"].default_value
)
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,
)
28 changes: 21 additions & 7 deletions nodes/inputs/ScCylinder.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


def init(self, context):
super().init(context)
Expand All @@ -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)


def error_condition(self):
return (
Expand All @@ -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
)
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
)
13 changes: 11 additions & 2 deletions nodes/inputs/ScEmpty.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)
25 changes: 19 additions & 6 deletions nodes/inputs/ScGrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ 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)
self.inputs.new("ScNodeSocketBool", "Generate UVs").init("in_uv")
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 (
Expand All @@ -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
)
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
)
24 changes: 18 additions & 6 deletions nodes/inputs/ScIcoSphere.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


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 (
Expand All @@ -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
)
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
)
19 changes: 15 additions & 4 deletions nodes/inputs/ScMonkey.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


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 (
Expand All @@ -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
)
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
)
20 changes: 16 additions & 4 deletions nodes/inputs/ScPlane.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


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 (
Expand All @@ -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
)
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
)
Loading