diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index f20b3091fa..b302cd1394 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -175,8 +175,13 @@ ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool this->collect_extruders(*object, per_layer_extruder_switches); // Reorder the extruders to minimize tool switches. + std::vector first_layer_tool_order; if (first_extruder == (unsigned int)-1) { - this->reorder_extruders(generate_first_layer_tool_order(print)); + first_layer_tool_order = generate_first_layer_tool_order(print); + } + + if (!first_layer_tool_order.empty()) { + this->reorder_extruders(first_layer_tool_order); } else { this->reorder_extruders(first_extruder); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index e56223216c..3b7a42b259 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1777,11 +1777,10 @@ void Print::_make_wipe_tower() // BBS: priming logic is removed, so don't consider it in tool ordering m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int)-1, false); - // if enable_timelapse_print(), update all layer_tools parameters(has_wipe_tower, wipe_tower_partitions) + // if enable_timelapse_print(), update all layer_tools parameters: wipe_tower_partitions if (enable_timelapse_print()) { std::vector& layer_tools_array = m_wipe_tower_data.tool_ordering.layer_tools(); for (LayerTools& layer_tools : layer_tools_array) { - layer_tools.has_wipe_tower = true; if (layer_tools.wipe_tower_partitions == 0) { layer_tools.wipe_tower_partitions = 1; } diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index f72a71b703..42f1ef8453 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3521,9 +3521,12 @@ void DynamicPrintConfig::normalize_fdm(int used_filaments) ConfigOptionBool* islh_opt = this->option("independent_support_layer_height", true); ConfigOptionBool* alh_opt = this->option("adaptive_layer_height"); ConfigOptionEnum* ps_opt = this->option>("print_sequence"); - - if (used_filaments == 1 || ps_opt->value == PrintSequence::ByObject) - ept_opt->value = false; + + ConfigOptionBool *timelapse_opt = this->option("timelapse_no_toolhead"); + if (timelapse_opt && timelapse_opt->value == false) { + if (used_filaments == 1 || ps_opt->value == PrintSequence::ByObject) + ept_opt->value = false; + } if (ept_opt->value) { if (islh_opt)