diff --git a/resources/icons/thumb_down.svg b/resources/icons/thumb_down.svg
index 0499cea41..f789b7317 100644
--- a/resources/icons/thumb_down.svg
+++ b/resources/icons/thumb_down.svg
@@ -4,7 +4,7 @@
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
-
+
diff --git a/resources/icons/thumb_up.svg b/resources/icons/thumb_up.svg
index c9045929b..1a0c6f1b7 100644
--- a/resources/icons/thumb_up.svg
+++ b/resources/icons/thumb_up.svg
@@ -4,7 +4,7 @@
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
-
+
diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 4d18a3298..433422d99 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -1124,9 +1124,11 @@ void GCode::_do_export(Print& print, FILE* file)
}
print.throw_if_canceled();
+// #ys_FIXME_no_exported_codes
+ /*
/* To avoid change filament for non-used extruder for Multi-material,
* check model->custom_gcode_per_print_z using tool_ordering values
- * */
+ * /
if (!m_custom_gcode_per_print_z. empty())
{
bool delete_executed = false;
@@ -1155,7 +1157,7 @@ void GCode::_do_export(Print& print, FILE* file)
/* If we are there, current extruder wouldn't be used,
* so this color change is a redundant move.
* Delete this item from m_custom_gcode_per_print_z
- * */
+ * /
it = m_custom_gcode_per_print_z.erase(it);
delete_executed = true;
}
@@ -1163,7 +1165,7 @@ void GCode::_do_export(Print& print, FILE* file)
if (delete_executed)
model->custom_gcode_per_print_z = m_custom_gcode_per_print_z;
}
-
+*/
m_cooling_buffer->set_current_extruder(initial_extruder_id);
diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp
index 5a6beb851..7137527e9 100644
--- a/src/libslic3r/Model.cpp
+++ b/src/libslic3r/Model.cpp
@@ -19,6 +19,7 @@
#include "SVG.hpp"
#include
#include "GCodeWriter.hpp"
+#include "GCode/PreviewData.hpp"
namespace Slic3r {
@@ -125,6 +126,8 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c
if (add_default_instances)
model.add_default_instances();
+ update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, config);
+
return model;
}
@@ -160,6 +163,8 @@ Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig
if (add_default_instances)
model.add_default_instances();
+ update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, config);
+
return model;
}
@@ -1933,6 +1938,30 @@ extern bool model_has_advanced_features(const Model &model)
return false;
}
+extern void update_custom_gcode_per_print_z_from_config(std::vector& custom_gcode_per_print_z, DynamicPrintConfig* config)
+{
+ if (!config->has("colorprint_heights"))
+ return;
+
+ const std::vector& colors = GCodePreviewData::ColorPrintColors();
+
+ const auto& colorprint_values = config->option("colorprint_heights")->values;
+
+ if (!colorprint_values.empty())
+ {
+ custom_gcode_per_print_z.clear();
+ custom_gcode_per_print_z.reserve(colorprint_values.size());
+ int i = 0;
+ for (auto val : colorprint_values)
+ custom_gcode_per_print_z.emplace_back(Model::CustomGCode{ val, ColorChangeCode, 1, colors[(++i)%7] });
+ }
+
+ /* There is one and only place this configuration option is used now.
+ * It wouldn't be used in the future, so erase it.
+ * */
+ config->erase("colorprint_heights");
+}
+
#ifndef NDEBUG
// Verify whether the IDs of Model / ModelObject / ModelVolume / ModelInstance / ModelMaterial are valid and unique.
void check_model_ids_validity(const Model &model)
diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp
index 36ad31175..9f173f6ea 100644
--- a/src/libslic3r/Model.hpp
+++ b/src/libslic3r/Model.hpp
@@ -874,6 +874,10 @@ extern bool model_volume_list_changed(const ModelObject &model_object_old, const
extern bool model_has_multi_part_objects(const Model &model);
// If the model has advanced features, then it cannot be processed in simple mode.
extern bool model_has_advanced_features(const Model &model);
+/* If loaded configuration has a "colorprint_heights" option (if it was imported from older Slicer),
+ * then model.custom_gcode_per_print_z should be updated considering this option
+ * */
+extern void update_custom_gcode_per_print_z_from_config(std::vector& custom_gcode_per_print_z, DynamicPrintConfig* config);
#ifndef NDEBUG
// Verify whether the IDs of Model / ModelObject / ModelVolume / ModelInstance / ModelMaterial are valid and unique.
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index b26c42841..a8b88dd03 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -94,12 +94,13 @@ void BackgroundSlicingProcess::process_fff()
m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data);
#endif // ENABLE_THUMBNAIL_GENERATOR
+ /* #ys_FIXME_no_exported_codes
if (m_fff_print->model().custom_gcode_per_print_z != GUI::wxGetApp().model().custom_gcode_per_print_z) {
GUI::wxGetApp().model().custom_gcode_per_print_z = m_fff_print->model().custom_gcode_per_print_z;
- // #ys_FIXME : controll text
GUI::show_info(nullptr, _(L("To except of redundant tool manipulation, \n"
"Color change(s) for unused extruder(s) was(were) deleted")), _(L("Info")));
}
+ */
if (this->set_step_started(bspsGCodeFinalize)) {
if (! m_export_path.empty()) {
diff --git a/src/slic3r/GUI/PresetBundle.cpp b/src/slic3r/GUI/PresetBundle.cpp
index 56752ab77..dbfd446b1 100644
--- a/src/slic3r/GUI/PresetBundle.cpp
+++ b/src/slic3r/GUI/PresetBundle.cpp
@@ -869,6 +869,9 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
}
// 4) Load the project config values (the per extruder wipe matrix etc).
this->project_config.apply_only(config, s_project_options);
+
+ update_custom_gcode_per_print_z_from_config(GUI::wxGetApp().plater()->model().custom_gcode_per_print_z, &this->project_config);
+
break;
}
case ptSLA: