diff --git a/core/nodeslicer/nodes.py b/core/nodeslicer/nodes.py index e13e88f..eb30dd8 100644 --- a/core/nodeslicer/nodes.py +++ b/core/nodeslicer/nodes.py @@ -16,6 +16,7 @@ from ...registry import register_class from .. import slice from ..slice import Pather, slice_at_range, SlicePaths from ...infra.blender.blender_mesh_capture import SlicingCollection, SlicingObject, capture_mesh_edges, SlicingGroup +from ...infra.blender.blender_bridge import get_all_children from ...infra.blender.blender_slice_nodes_generic import SliceNode, resolve_input from .bpy_ns_types import notify_tree_changed from ...infra._3mf_writer._3mf import prepare_3mf @@ -384,18 +385,10 @@ class SLICENODE_GetMesh(SliceNode): if socket_name != "Mesh": return None obj: Any = self.resolve("Object") + if not obj: return None - modifiers = {v.field: v.value_str for k, v in dict(obj.nodeslicer.modifiers).items()} - extruder = obj.nodeslicer.extruder - part_type = obj.nodeslicer.object_type - - so: SlicingObject = SlicingObject(obj, obj.name) - so.assign_modifiers(modifiers) - so.object_type = part_type - so.extruder = extruder - - sc: SlicingCollection = SlicingCollection([], obj.name) - sc.objects = [so] + family = [obj] + get_all_children(obj) + sc: SlicingCollection = SlicingCollection(family, obj.name) return sc diff --git a/infra/blender/blender_bridge.py b/infra/blender/blender_bridge.py index 7f1d5ae..e16a952 100644 --- a/infra/blender/blender_bridge.py +++ b/infra/blender/blender_bridge.py @@ -4,4 +4,6 @@ def get_all_children(obj): children = [] for child in obj.children: children += [child] + get_all_children(child) + + children = list(set(children)) return children \ No newline at end of file diff --git a/infra/blender/blender_mesh_capture.py b/infra/blender/blender_mesh_capture.py index 5b8716f..28d8437 100644 --- a/infra/blender/blender_mesh_capture.py +++ b/infra/blender/blender_mesh_capture.py @@ -35,6 +35,11 @@ class SlicingObject(): assert bpy.context.scene.unit_settings scene_scale: float = bpy.context.scene.unit_settings.scale_length + if ns := getattr(obj, 'nodeslicer', None): + self.object_type = ns.object_type + self.extruder = ns.extruder + self.modifiers = [{'param_id': m.field, 'param_value': m.value_str} for m in ns.modifiers] + if obj: if obj.mode == 'EDIT': obj.update_from_editmode() @@ -223,8 +228,6 @@ class SlicingGroup(): for obj in selected_objs: family.append(obj) family.extend(get_all_children(obj)) - # Remove duplicates - family = list(set(family)) filtered_objs = [o for o in family] # if getattr(o, TYPES_NAME).object_type != 'Ignore'