From 5b9e4a4862a5635b7cc97fd02bcbc4b52a890da0 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 10 Mar 2025 15:35:55 +0800 Subject: [PATCH] ENH: CLI: only check filament conflicts before slicing when there is one color jira: no-jira Change-Id: I17fc917b624578491170656372e4c4d1b43f0412 (cherry picked from commit 53a551174e682694374e539572e5337791e0a7d8) --- src/OrcaSlicer.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 257deb6047..81b25d0afe 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -5314,6 +5314,13 @@ int CLI::run(int argc, char **argv) else if (i->print_volume_state == ModelInstancePVS_Inside) { const Transform3d& inst_matrix = i->get_transformation().get_matrix(); + + //get object filaments + std::set object_filaments; + for (const ModelVolume *vol : model_object->volumes) { + std::vector filaments = vol->get_extruders(); + object_filaments.insert(filaments.begin(), filaments.end()); + } for (const ModelVolume* vol : model_object->volumes) { if (vol->is_model_part()) { @@ -5332,10 +5339,13 @@ int CLI::run(int argc, char **argv) std::vector inside_extruders; BuildVolume::ObjectState state = build_volume.check_volume_bbox_state_with_extruder_areas(bbox, inside_extruders); if (state == BuildVolume::ObjectState::Limited) { - for (size_t i = 0; i < inside_extruders.size(); ++i) { - if (!inside_extruders[i]) { - std::vector filaments = vol->get_extruders(); - unprintable_filament_ids[i].insert(filaments.begin(), filaments.end()); + if (object_filaments.size() == 1) { + // Only check for single-color object + for (size_t j = 0; j < inside_extruders.size(); ++j) { + if (!inside_extruders[j]) { + std::vector filaments = vol->get_extruders(); + unprintable_filament_ids[j].insert(filaments.begin(), filaments.end()); + } } } }