Some minor polishing of Color print back end.

This commit is contained in:
bubnikv 2020-01-06 09:32:13 +01:00
parent 9406b50447
commit 5294c85dfc
3 changed files with 25 additions and 34 deletions

View file

@ -362,12 +362,11 @@ protected:
bool m_second_layer_things_done; bool m_second_layer_things_done;
// Index of a last object copy extruded. // Index of a last object copy extruded.
std::pair<const PrintObject*, Point> m_last_obj_copy; std::pair<const PrintObject*, Point> m_last_obj_copy;
/* Extensions for colorprint - now it's not a just color_print_heights, // Extensions for colorprint - now it's not a just color_print_heights,
* there can be some custom gcode. // there can be some custom gcode.
* Updated before the export and erased during the process, // Updated before the export and erased during the process,
* so no toolchange occurs twice. // so no toolchange occurs twice.
* */ std::vector<Model::CustomGCode> m_custom_gcode_per_print_z;
std::vector<Model::CustomGCode> m_custom_gcode_per_print_z;
// Time estimators // Time estimators
GCodeTimeEstimator m_normal_time_estimator; GCodeTimeEstimator m_normal_time_estimator;

View file

@ -66,7 +66,7 @@ Model& Model::assign_copy(Model &&rhs)
rhs.objects.clear(); rhs.objects.clear();
// copy custom code per height // copy custom code per height
this->custom_gcode_per_print_z = rhs.custom_gcode_per_print_z; this->custom_gcode_per_print_z = std::move(rhs.custom_gcode_per_print_z);
return *this; return *this;
} }
@ -1946,25 +1946,23 @@ extern bool model_has_advanced_features(const Model &model)
extern void update_custom_gcode_per_print_z_from_config(std::vector<Model::CustomGCode>& custom_gcode_per_print_z, DynamicPrintConfig* config) extern void update_custom_gcode_per_print_z_from_config(std::vector<Model::CustomGCode>& custom_gcode_per_print_z, DynamicPrintConfig* config)
{ {
if (!config->has("colorprint_heights")) auto *colorprint_heights = config->option<ConfigOptionFloats>("colorprint_heights");
if (colorprint_heights == nullptr)
return; return;
const std::vector<std::string>& colors = GCodePreviewData::ColorPrintColors(); if (custom_gcode_per_print_z.empty() && ! colorprint_heights->values.empty()) {
// Convert the old colorprint_heighs only if there is no equivalent data in a new format.
const auto& colorprint_values = config->option<ConfigOptionFloats>("colorprint_heights")->values; const std::vector<std::string>& colors = GCodePreviewData::ColorPrintColors();
const auto& colorprint_values = colorprint_heights->values;
if (!colorprint_values.empty())
{
custom_gcode_per_print_z.clear(); custom_gcode_per_print_z.clear();
custom_gcode_per_print_z.reserve(colorprint_values.size()); custom_gcode_per_print_z.reserve(colorprint_values.size());
int i = 0; int i = 0;
for (auto val : colorprint_values) for (auto val : colorprint_values)
custom_gcode_per_print_z.emplace_back(Model::CustomGCode{ val, ColorChangeCode, 1, colors[(++i)%7] }); 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. // The "colorprint_heights" config value has been deprecated. At this point of time it has been converted
* It wouldn't be used in the future, so erase it. // to a new format and therefore it shall be erased.
* */
config->erase("colorprint_heights"); config->erase("colorprint_heights");
} }

View file

@ -755,21 +755,15 @@ public:
// Extensions for color print // Extensions for color print
struct CustomGCode struct CustomGCode
{ {
bool operator<(const CustomGCode& other) const { return other.print_z > this->print_z; } bool operator<(const CustomGCode& rhs) const { return this->print_z < rhs.print_z; }
bool operator==(const CustomGCode& other) const bool operator==(const CustomGCode& rhs) const
{ {
return (other.print_z == this->print_z ) && return (rhs.print_z == this->print_z ) &&
(other.gcode == this->gcode ) && (rhs.gcode == this->gcode ) &&
(other.extruder == this->extruder ) && (rhs.extruder == this->extruder ) &&
(other.color == this->color ); (rhs.color == this->color );
}
bool operator!=(const CustomGCode& other) const
{
return (other.print_z != this->print_z ) ||
(other.gcode != this->gcode ) ||
(other.extruder != this->extruder ) ||
(other.color != this->color );
} }
bool operator!=(const CustomGCode& rhs) const { return ! (*this == rhs); }
double print_z; double print_z;
std::string gcode; std::string gcode;
@ -880,9 +874,9 @@ extern bool model_volume_list_changed(const ModelObject &model_object_old, const
extern bool model_has_multi_part_objects(const Model &model); extern bool model_has_multi_part_objects(const Model &model);
// If the model has advanced features, then it cannot be processed in simple mode. // If the model has advanced features, then it cannot be processed in simple mode.
extern bool model_has_advanced_features(const Model &model); extern bool model_has_advanced_features(const Model &model);
/* If loaded configuration has a "colorprint_heights" option (if it was imported from older Slicer), // 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 // and if model.custom_gcode_per_print_z is empty (there is no color print data available in a new format
* */ // 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<Model::CustomGCode>& custom_gcode_per_print_z, DynamicPrintConfig* config); extern void update_custom_gcode_per_print_z_from_config(std::vector<Model::CustomGCode>& custom_gcode_per_print_z, DynamicPrintConfig* config);
#ifndef NDEBUG #ifndef NDEBUG