mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-16 18:12:10 +00:00
ENH: support recommended filament map when print by object
1. support recommended filament map when print by object 2. placeholder_parser support function filament_change 3. extruder_id of filament_map is start from 1 Change-Id: Ide8019cd4a165a25972f22706ff685c3005aa031 (cherry picked from commit b42d94e1d05236b8b7b2e65b4a24810eecf040cb)
This commit is contained in:
@@ -2099,6 +2099,21 @@ void Print::process(long long *time_cost_with_cache, bool use_cache)
|
||||
if (this->config().print_sequence == PrintSequence::ByObject) {
|
||||
// Order object instances for sequential print.
|
||||
print_object_instances_ordering = sort_object_instances_by_model_order(*this);
|
||||
|
||||
// get recommended filament map
|
||||
{
|
||||
std::vector<std::vector<unsigned int>> all_filaments;
|
||||
print_object_instance_sequential_active = print_object_instances_ordering.begin();
|
||||
for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++print_object_instance_sequential_active) {
|
||||
tool_ordering = ToolOrdering(*(*print_object_instance_sequential_active)->print_object, initial_extruder_id);
|
||||
for (const auto &layer_tool : tool_ordering.layer_tools()) { all_filaments.emplace_back(layer_tool.extruders); }
|
||||
}
|
||||
|
||||
std::vector<int> recomended_maps = ToolOrdering::get_recommended_filament_maps(all_filaments, &config());
|
||||
std::transform(recomended_maps.begin(), recomended_maps.end(), recomended_maps.begin(), [](int value) { return value + 1; });
|
||||
update_filament_maps_to_config(recomended_maps);
|
||||
}
|
||||
|
||||
// print_object_instances_ordering = sort_object_instances_by_max_z(print);
|
||||
print_object_instance_sequential_active = print_object_instances_ordering.begin();
|
||||
for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++print_object_instance_sequential_active) {
|
||||
@@ -2607,7 +2622,7 @@ size_t Print::get_extruder_id(unsigned int filament_id) const
|
||||
{
|
||||
std::vector<int> filament_map = get_filament_maps();
|
||||
if (filament_id < filament_map.size()) {
|
||||
return filament_map[filament_id];
|
||||
return filament_map[filament_id] - 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user