mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-06-21 11:23:37 +00:00
ENH: wipe tower support filaments that do not adhere to each other
jira:none Change-Id: Ia52340f4e8bdb34791cb2019e9763bddfbc8dc5f (cherry picked from commit e1e0de6efb667a2a198be47d75c90b0f2f0a4324)
This commit is contained in:
@@ -305,6 +305,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
|
||||
|| opt_key == "filament_map_mode"
|
||||
|| opt_key == "filament_map"
|
||||
|| opt_key == "unprintable_filament_map"
|
||||
|| opt_key == "filament_category"
|
||||
|| opt_key == "wipe_tower_bridging"
|
||||
|| opt_key == "wipe_tower_extra_flow"
|
||||
|| opt_key == "wipe_tower_no_sparse_layers"
|
||||
@@ -2832,6 +2833,8 @@ void Print::_make_wipe_tower()
|
||||
// m_wipe_tower_data.priming = Slic3r::make_unique<std::vector<WipeTower::ToolChangeResult>>(
|
||||
// wipe_tower.prime((float)this->skirt_first_layer_height(), m_wipe_tower_data.tool_ordering.all_extruders(), false));
|
||||
|
||||
std::set<int> used_filament_ids;
|
||||
|
||||
// Lets go through the wipe tower layers and determine pairs of extruder changes for each
|
||||
// to pass to wipe_tower (so that it can use it for planning the layout of the tower)
|
||||
{
|
||||
@@ -2861,6 +2864,8 @@ void Print::_make_wipe_tower()
|
||||
bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front();
|
||||
wipe_tower.plan_toolchange((float)layer_tools.print_z, (float)layer_tools.wipe_tower_layer_height, current_filament_id, current_filament_id);
|
||||
|
||||
used_filament_ids.insert(layer_tools.extruders.begin(), layer_tools.extruders.end());
|
||||
|
||||
for (const auto filament_id : layer_tools.extruders) {
|
||||
if (filament_id == current_filament_id)
|
||||
continue;
|
||||
@@ -2898,9 +2903,17 @@ void Print::_make_wipe_tower()
|
||||
}
|
||||
}
|
||||
|
||||
wipe_tower.set_used_filament_ids(std::vector<int>(used_filament_ids.begin(), used_filament_ids.end()));
|
||||
|
||||
std::vector<int> categories;
|
||||
for (size_t i = 0; i < m_config.filament_category.values.size(); ++i) {
|
||||
categories.push_back(m_config.filament_category.get_at(i));
|
||||
}
|
||||
wipe_tower.set_filament_categories(categories);
|
||||
|
||||
// Generate the wipe tower layers.
|
||||
m_wipe_tower_data.tool_changes.reserve(m_wipe_tower_data.tool_ordering.layer_tools().size());
|
||||
wipe_tower.generate(m_wipe_tower_data.tool_changes);
|
||||
wipe_tower.generate_new(m_wipe_tower_data.tool_changes);
|
||||
m_wipe_tower_data.depth = wipe_tower.get_depth();
|
||||
m_wipe_tower_data.brim_width = wipe_tower.get_brim_width();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user