From a6dc8c27a87a126f9eca190608c3c9a5379f72a9 Mon Sep 17 00:00:00 2001 From: "xun.zhang" Date: Tue, 15 Oct 2024 19:35:17 +0800 Subject: [PATCH] FIX: invalid pop up when changing machine profile 1. Machine with multi extruder should set length of extruder offset to extruder num 2. Register retract_restart_extra jira:NONE Signed-off-by: xun.zhang Change-Id: Ic3eb324cb91dc70b091c8922936d2709c361cc38 (cherry picked from commit 13df1ee7bab2bf13c9f5ffca6ad1228ff48e885e) --- src/libslic3r/GCode.cpp | 2 +- src/libslic3r/GCode.hpp | 11 ++++++++--- src/libslic3r/GCode/GCodeProcessor.cpp | 7 ++++++- src/libslic3r/PrintConfig.cpp | 1 + 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index da022c69c3..fac3080bac 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -6808,7 +6808,7 @@ std::string GCode::set_object_info(Print *print) { // convert a model-space scaled point into G-code coordinates Vec2d GCode::point_to_gcode(const Point &point) const { - Vec2d extruder_offset = FILAMENT_CONFIG(extruder_offset); + Vec2d extruder_offset = EXTRUDER_CONFIG(extruder_offset); return unscale(point) + m_origin - extruder_offset; } diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 02df4b7796..849f657d7e 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -84,7 +84,6 @@ public: m_right(float(/*print_config.wipe_tower_x.value +*/ print_config.prime_tower_width.value)), m_wipe_tower_pos(float(print_config.wipe_tower_x.get_at(plate_idx)), float(print_config.wipe_tower_y.get_at(plate_idx))), m_wipe_tower_rotation(float(print_config.wipe_tower_rotation_angle)), - m_extruder_offsets(print_config.extruder_offset.values), m_priming(priming), m_tool_changes(tool_changes), m_final_purge(final_purge), @@ -95,7 +94,13 @@ public: m_enable_timelapse_print(print_config.timelapse_type.value == TimelapseType::tlSmooth), m_is_first_print(true), m_print_config(&print_config) - {} + { + // initialize with the extruder offset of master extruder id + m_extruder_offsets.resize(print_config.filament_map.size(), print_config.extruder_offset.get_at(print_config.master_extruder_id.value - 1)); + const auto& filament_map = print_config.filament_map.values; // 1 based idx + for (size_t idx = 0; idx < filament_map.size(); ++idx) + m_extruder_offsets[idx] = print_config.extruder_offset.get_at(filament_map[idx] - 1); + } std::string prime(GCode &gcodegen); void next_layer() { ++ m_layer_idx; m_tool_change_idx = 0; } @@ -121,7 +126,7 @@ private: const float m_right; const Vec2f m_wipe_tower_pos; const float m_wipe_tower_rotation; - const std::vector m_extruder_offsets; + std::vector m_extruder_offsets; // Reference to cached values at the Printer class. const std::vector &m_priming; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 92ac676693..2db0fd8e32 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -804,8 +804,13 @@ void GCodeProcessor::apply_config(const PrintConfig& config) for (size_t idx = 0; idx < m_result.nozzle_type.size(); ++idx) { m_result.nozzle_type[idx] = NozzleType(config.nozzle_type.values[idx]); } + + std::vector filament_map = config.filament_map.values; // 1 based idxs + // if filament map has wrong length, set filament to master extruder_id + filament_map.resize(filament_count, config.master_extruder_id.value); + for (size_t i = 0; i < filament_count; ++ i) { - m_extruder_offsets[i] = to_3d(config.extruder_offset.get_at(i).cast().eval(), 0.f); + m_extruder_offsets[i] = to_3d(config.extruder_offset.get_at(filament_map[i] - 1).cast().eval(), 0.f); m_extruder_colors[i] = static_cast(i); m_extruder_temps_first_layer_config[i] = static_cast(config.nozzle_temperature_initial_layer.get_at(i)); m_extruder_temps_config[i] = static_cast(config.nozzle_temperature.get_at(i)); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index b9c3f3ce3e..7582b6f111 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -7286,6 +7286,7 @@ std::set printer_options_with_variant_1 = { "wipe_distance", "retract_before_wipe", "retract_length_toolchange", + "retract_restart_extra", "retract_restart_extra_toolchange", "long_retractions_when_cut", "retraction_distances_when_cut",