batched mesh preview
This commit is contained in:
parent
cebc165282
commit
c1b3cde57f
1 changed files with 25 additions and 7 deletions
|
|
@ -15,23 +15,20 @@ class SLICENODE_GcodeToMesh(ExecSliceNode):
|
||||||
|
|
||||||
def init(self, context):
|
def init(self, context):
|
||||||
self._init_exec()
|
self._init_exec()
|
||||||
self.add_input("SLICESOCK_Gcode", "Gcode")
|
|
||||||
self.add_input("SLICESOCK_String", "Name")
|
self.add_input("SLICESOCK_String", "Name")
|
||||||
|
self.add_multi_socket_group("SLICESOCK_Gcode", name="Gcode")
|
||||||
|
|
||||||
def draw_buttons(self, context, layout):
|
def draw_buttons(self, context, layout):
|
||||||
super().draw_buttons(context, layout)
|
super().draw_buttons(context, layout)
|
||||||
layout.prop(self, 'show_e_0')
|
layout.prop(self, 'show_e_0')
|
||||||
|
|
||||||
def evaluate(self, operator=None):
|
def _process_gcode(self, gcode: str, mesh_name: str, operator=None):
|
||||||
gcode: str = self.resolve("Gcode")
|
|
||||||
mesh_name: str = self.resolve("Name")
|
|
||||||
|
|
||||||
if not gcode:
|
if not gcode:
|
||||||
if mesh_name in bpy.data.objects:
|
if mesh_name in bpy.data.objects:
|
||||||
obj = bpy.data.objects[mesh_name]
|
obj = bpy.data.objects[mesh_name]
|
||||||
if obj.type == 'MESH':
|
if obj.type == 'MESH':
|
||||||
obj.data.clear_geometry()
|
obj.data.clear_geometry()
|
||||||
return 'empty'
|
return
|
||||||
|
|
||||||
vertices = []
|
vertices = []
|
||||||
edges = []
|
edges = []
|
||||||
|
|
@ -128,7 +125,7 @@ class SLICENODE_GcodeToMesh(ExecSliceNode):
|
||||||
last_e = new_e
|
last_e = new_e
|
||||||
|
|
||||||
if not vertices:
|
if not vertices:
|
||||||
return 'no segments'
|
return
|
||||||
|
|
||||||
# Create or find "Debug" mesh object
|
# Create or find "Debug" mesh object
|
||||||
if mesh_name in bpy.data.objects:
|
if mesh_name in bpy.data.objects:
|
||||||
|
|
@ -179,4 +176,25 @@ class SLICENODE_GcodeToMesh(ExecSliceNode):
|
||||||
mod = obj.modifiers.new(name="Preview", type='NODES') # type: ignore
|
mod = obj.modifiers.new(name="Preview", type='NODES') # type: ignore
|
||||||
mod.node_group = ng
|
mod.node_group = ng
|
||||||
|
|
||||||
|
def evaluate(self, operator=None):
|
||||||
|
gcodes = self.resolve_multi_input("Gcode")
|
||||||
|
base_mesh_name: str = self.resolve("Name")
|
||||||
|
|
||||||
|
if not base_mesh_name:
|
||||||
|
base_mesh_name = "GcodePreview"
|
||||||
|
|
||||||
|
# Filter out empty inputs but keep structure to index properly
|
||||||
|
valid_gcodes = [g for g in gcodes if g]
|
||||||
|
|
||||||
|
if not valid_gcodes:
|
||||||
|
if base_mesh_name in bpy.data.objects:
|
||||||
|
obj = bpy.data.objects[base_mesh_name]
|
||||||
|
if obj.type == 'MESH':
|
||||||
|
obj.data.clear_geometry()
|
||||||
|
return 'empty'
|
||||||
|
|
||||||
|
for i, gcode in enumerate(valid_gcodes):
|
||||||
|
mesh_name = base_mesh_name if i == 0 else f"{base_mesh_name}_{i+1}"
|
||||||
|
self._process_gcode(gcode, mesh_name, operator)
|
||||||
|
|
||||||
return 'ok'
|
return 'ok'
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue