diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fe60769e7..91a69d544 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -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); if (old_nozzle_size < new_nozzle_size) { - std::vector flush_volume_mtx = get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, -1, old_nozzle_size); - std::vector first_flush_volume_mtx = get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, 0, old_nozzle_size); - first_flush_volume_mtx.resize(filament_nums * filament_nums); - std::vector flush_multipliers = project_config->option("flush_multiplier")->values; - double first_flush_multiplier = project_config->option("flush_multiplier")->values.at(0); - - flush_volume_mtx.clear(); - 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()); + std::vector first_flush_volume_mtx = get_flush_volumes_matrix(project_config->option("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("flush_volumes_matrix")->values, first_flush_volume_mtx, -1, new_nozzle_size); + } else { + first_flush_volume_mtx.resize(filament_nums * filament_nums); + std::vector flush_volume_mtx; + 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()); + } + set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, flush_volume_mtx, -1, new_nozzle_size); } - + std::vector flush_multipliers = project_config->option("flush_multiplier")->values; flush_multipliers.resize(nozzle_nums, 1.f); - - set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, flush_volume_mtx, -1, new_nozzle_size); project_config->option("flush_multiplier")->values = flush_multipliers; } else if (old_nozzle_size > new_nozzle_size) { std::vector new_flush_volume_mtx; for (size_t i = 0; i < new_nozzle_size; ++i) { - std::vector flush_volume_mtx = get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, i, old_nozzle_size); + std::vector flush_volume_mtx = get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, -1, old_nozzle_size); 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()); } std::vector flush_multipliers = project_config->option("flush_multiplier")->values; - flush_multipliers.resize(nozzle_nums); + flush_multipliers.resize(nozzle_nums, 1.f); set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, new_flush_volume_mtx, -1, new_nozzle_size); project_config->option("flush_multiplier")->values = flush_multipliers; }