OrcaSlicer/src/libslic3r/ParameterUtils.cpp
zhimin.zeng 89c58fb4d9 FIX: add clumping detect area parameter
1. add wrapping detect area parameter
2. fix spiral retract bug
3. modify the enable parameter to print config
4. close clumping detect for manual cali mode
jira: STUDIO-13761 & STUDIO-13766

Change-Id: Ib597ca48a0342a8ae3930f5e790085987f252374
(cherry picked from commit 698a5e6bc0b281ba77fc1fd7692daec09cb440b4)
2025-10-02 17:07:17 +08:00

78 lines
2.8 KiB
C++

#include "ParameterUtils.hpp"
#include <cassert>
namespace Slic3r {
std::vector<LayerPrintSequence> get_other_layers_print_sequence(int sequence_nums, const std::vector<int> &sequence)
{
std::vector<LayerPrintSequence> res;
if (sequence_nums == 0 || sequence.empty())
return res;
assert(sequence.size() % sequence_nums == 0);
res.reserve(sequence_nums);
size_t item_nums = sequence.size() / sequence_nums;
for (int i = 0; i < sequence_nums; ++i) {
std::vector<int> item;
item.assign(sequence.begin() + i * item_nums, sequence.begin() + ((i + 1) * item_nums));
assert(item.size() > 2);
std::pair<std::pair<int, int>, std::vector<int>> res_item;
res_item.first.first = item[0];
res_item.first.second = item[1];
res_item.second.assign(item.begin() + 2, item.end());
res.emplace_back(std::move(res_item));
}
return res;
}
void get_other_layers_print_sequence(const std::vector<LayerPrintSequence> &customize_sequences, int &sequence_nums, std::vector<int> &sequence)
{
sequence_nums = 0;
sequence.clear();
if (customize_sequences.empty()) { return; }
sequence_nums = (int) customize_sequences.size();
for (const auto &customize_sequence : customize_sequences) {
sequence.push_back(customize_sequence.first.first);
sequence.push_back(customize_sequence.first.second);
sequence.insert(sequence.end(), customize_sequence.second.begin(), customize_sequence.second.end());
}
}
int get_index_for_extruder_parameter(const DynamicPrintConfig &config, const std::string &opt_key, int cur_extruder_id, ExtruderType extruder_type, NozzleVolumeType nozzle_volume_type)
{
std::string id_name, variant_name;
unsigned int stride = 1;
if (printer_options_with_variant_1.count(opt_key) > 0) { // printer parameter
id_name = "printer_extruder_id";
variant_name = "printer_extruder_variant";
} else if (printer_options_with_variant_2.count(opt_key) > 0) {
id_name = "printer_extruder_id";
variant_name = "printer_extruder_variant";
stride = 2;
} else if (filament_options_with_variant.count(opt_key) > 0) {
// filament don't use id anymore
// id_name = "filament_extruder_id";
variant_name = "filament_extruder_variant";
} else if (print_options_with_variant.count(opt_key) > 0) {
id_name = "print_extruder_id";
variant_name = "print_extruder_variant";
} else {
return 0;
}
// variant index
int variant_index = config.get_index_for_extruder(cur_extruder_id + 1, id_name, extruder_type, nozzle_volume_type, variant_name, stride);
if (variant_index < 0) {
assert(false);
return 0;
}
return variant_index;
}
}; // namespace Slic3r