Refuse to slice a broken mixed filament

This commit is contained in:
SoftFever
2026-08-22 23:52:11 +08:00
parent 8965b0be21
commit 716bba53df

View File

@@ -11575,9 +11575,11 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice)
if (current_plate->is_slice_result_valid() && this->model.objects.empty() && !current_has_print_instances)
only_has_gcode_need_preview = true;
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": from set_current_panel, no_slice %1%, export_in_progress %2%, model_fits %3%, m_is_slicing %4%")%no_slice%export_in_progress%model_fits%m_is_slicing;
bool mixed_broken = sidebar->has_broken_mixed_filament();
if (!no_slice && !this->model.objects.empty() && !export_in_progress && model_fits && current_has_print_instances)
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": from set_current_panel, no_slice %1%, export_in_progress %2%, model_fits %3%, m_is_slicing %4%, mixed_broken %5%")%no_slice%export_in_progress%model_fits%m_is_slicing%mixed_broken;
if (!no_slice && !this->model.objects.empty() && !export_in_progress && model_fits && current_has_print_instances && !mixed_broken)
{
//if already running in background, not relice here
//BBS: add more judge for slicing
@@ -18792,6 +18794,15 @@ void Plater::reslice()
return;
}
// A mixed filament with deleted or type-mismatched components cannot be resolved at slicing
// time. MainFrame::get_enable_slice_status() already disables the Slice button for it, but the
// Preview-tab switch, auto-slice and queued slice events reach reslice() directly, so refuse
// here too instead of letting the engine slice the broken slot as a plain filament.
if (sidebar().has_broken_mixed_filament()) {
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": broken mixed filament detected, refuse to slice";
return;
}
// In case SLA gizmo is in editing mode, refuse to continue
// and notify user that he should leave it first.
if (get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode(true))