FIX: the flush volume matrix is modified when loading MW file

jira: STUDIO-8736
Change-Id: I671b920b222c001c6c08f43911b0e9a156bb154c
This commit is contained in:
zhimin.zeng 2024-11-14 20:56:21 +08:00 committed by lane.wei
parent 5a632cd2dd
commit d484ec3ec0

View File

@ -13712,33 +13712,32 @@ void Plater::update_flush_volume_matrix(size_t old_nozzle_size, size_t new_nozzl
assert(nozzle_nums == new_nozzle_size); assert(nozzle_nums == new_nozzle_size);
if (old_nozzle_size < new_nozzle_size) { if (old_nozzle_size < new_nozzle_size) {
std::vector<double> flush_volume_mtx = get_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, -1, old_nozzle_size);
std::vector<double> first_flush_volume_mtx = get_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, 0, old_nozzle_size); std::vector<double> first_flush_volume_mtx = get_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, -1, old_nozzle_size);
if (first_flush_volume_mtx.size() == filament_nums * filament_nums * new_nozzle_size) { // load file
set_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, first_flush_volume_mtx, -1, new_nozzle_size);
} else {
first_flush_volume_mtx.resize(filament_nums * filament_nums); first_flush_volume_mtx.resize(filament_nums * filament_nums);
std::vector<double> flush_volume_mtx;
std::vector<double> flush_multipliers = project_config->option<ConfigOptionFloats>("flush_multiplier")->values;
double first_flush_multiplier = project_config->option<ConfigOptionFloats>("flush_multiplier")->values.at(0);
flush_volume_mtx.clear();
for (size_t i = 0; i < new_nozzle_size; ++i) { for (size_t i = 0; i < new_nozzle_size; ++i) {
flush_volume_mtx.insert(flush_volume_mtx.end(), first_flush_volume_mtx.begin(), first_flush_volume_mtx.end()); flush_volume_mtx.insert(flush_volume_mtx.end(), first_flush_volume_mtx.begin(), first_flush_volume_mtx.end());
} }
flush_multipliers.resize(nozzle_nums, 1.f);
set_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, flush_volume_mtx, -1, new_nozzle_size); set_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, flush_volume_mtx, -1, new_nozzle_size);
}
std::vector<double> flush_multipliers = project_config->option<ConfigOptionFloats>("flush_multiplier")->values;
flush_multipliers.resize(nozzle_nums, 1.f);
project_config->option<ConfigOptionFloats>("flush_multiplier")->values = flush_multipliers; project_config->option<ConfigOptionFloats>("flush_multiplier")->values = flush_multipliers;
} }
else if (old_nozzle_size > new_nozzle_size) { else if (old_nozzle_size > new_nozzle_size) {
std::vector<double> new_flush_volume_mtx; std::vector<double> new_flush_volume_mtx;
for (size_t i = 0; i < new_nozzle_size; ++i) { for (size_t i = 0; i < new_nozzle_size; ++i) {
std::vector<double> flush_volume_mtx = get_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, i, old_nozzle_size); std::vector<double> flush_volume_mtx = get_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, -1, old_nozzle_size);
flush_volume_mtx.resize(filament_nums * filament_nums); flush_volume_mtx.resize(filament_nums * filament_nums);
new_flush_volume_mtx.insert(new_flush_volume_mtx.end(), flush_volume_mtx.begin(), flush_volume_mtx.end()); new_flush_volume_mtx.insert(new_flush_volume_mtx.end(), flush_volume_mtx.begin(), flush_volume_mtx.end());
} }
std::vector<double> flush_multipliers = project_config->option<ConfigOptionFloats>("flush_multiplier")->values; std::vector<double> flush_multipliers = project_config->option<ConfigOptionFloats>("flush_multiplier")->values;
flush_multipliers.resize(nozzle_nums); flush_multipliers.resize(nozzle_nums, 1.f);
set_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, new_flush_volume_mtx, -1, new_nozzle_size); set_flush_volumes_matrix(project_config->option<ConfigOptionFloats>("flush_volumes_matrix")->values, new_flush_volume_mtx, -1, new_nozzle_size);
project_config->option<ConfigOptionFloats>("flush_multiplier")->values = flush_multipliers; project_config->option<ConfigOptionFloats>("flush_multiplier")->values = flush_multipliers;
} }