From 99ec668aa013994f9c67c46c9bc37a8af57b0d18 Mon Sep 17 00:00:00 2001 From: "jiangkai.zhao" Date: Tue, 11 Mar 2025 16:14:49 +0800 Subject: [PATCH] Fix:crash when multicolor printing jira: none Change-Id: I6289934a897644fb025acd20b59bea1a69995f89 (cherry picked from commit 576d931475c4b42582d78092e75ce0b0b7394ca7) --- src/slic3r/GUI/3DScene.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 851fde8bd3..462fc08932 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -823,25 +823,24 @@ int GLVolumeCollection::load_real_wipe_tower_preview( if (wt_mesh.its.vertices.empty()) return int(this->volumes.size() - 1); std::vector extruder_colors = GUI::wxGetApp().plater()->get_extruders_colors(); - std::vector colors; GUI::PartPlateList &ppl = GUI::wxGetApp().plater()->get_partplate_list(); std::vector plate_extruders = ppl.get_plate(plate_idx)->get_extruders(true); - - for (int extruder_id : plate_extruders) { - if (extruder_id <= extruder_colors.size()) - colors.push_back(extruder_colors[extruder_id - 1]); + std::vector colors; + if (!plate_extruders.empty()) { + if (plate_extruders.front() <= extruder_colors.size()) + colors.push_back(extruder_colors[plate_extruders.front() - 1]); else colors.push_back(extruder_colors[0]); } - - volumes.emplace_back(new GLWipeTowerVolume(colors)); + if (colors.empty()) return int(this->volumes.size() - 1); + volumes.emplace_back(new GLWipeTowerVolume({colors})); GLWipeTowerVolume &v = *dynamic_cast(volumes.back()); - v.model_per_colors.resize(colors.size()); auto mesh = wt_mesh; if (render_brim) { mesh.merge(brim_mesh); } if (!colors.empty()) { + v.model_per_colors.resize(1); v.model_per_colors[0].init_from(mesh); } TriangleMesh wipe_tower_shell = mesh.convex_hull_3d();