From ee4705d6b7bc006e6e48bb1ff6f02e2f5d8b1652 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 17 Mar 2023 13:49:35 +0100 Subject: [PATCH] Wipe tower: changed the way how initial wipe tower preview depth is calculated --- src/libslic3r/GCode/WipeTower.cpp | 27 +++++++++++++++++++++++++++ src/libslic3r/GCode/WipeTower.hpp | 1 + 2 files changed, 28 insertions(+) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 2d6d6d765..32dad15cd 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1328,6 +1328,33 @@ WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter, bool return construct_tcr(writer, false, old_tool, true, 0.f); } +// Static method to extract wipe_volumes[from][to] from the configuration. +std::vector> WipeTower::extract_wipe_volumes(const PrintConfig& config) +{ + // Get wiping matrix to get number of extruders and convert vector to vector: + std::vector wiping_matrix(cast(config.flush_volumes_matrix.values)); + auto scale = config.flush_multiplier; + + // Orca todo: currently we only/always support SEMM. + // The values shall only be used when SEMM is enabled. The purging for other printers + // is determined by filament_minimal_purge_on_wipe_tower. + // if (! config.single_extruder_multi_material.value) + // std::fill(wiping_matrix.begin(), wiping_matrix.end(), 0.f); + + // Extract purging volumes for each extruder pair: + std::vector> wipe_volumes; + const unsigned int number_of_extruders = (unsigned int)(sqrt(wiping_matrix.size())+EPSILON); + for (unsigned int i = 0; i(wiping_matrix.begin()+i*number_of_extruders, wiping_matrix.begin()+(i+1)*number_of_extruders)); + + // Also include filament_minimal_purge_on_wipe_tower. This is needed for the preview. + for (unsigned int i = 0; i(wipe_volumes[i][j] * scale, config.filament_minimal_purge_on_wipe_tower.get_at(j)); + + return wipe_volumes; +} + // Appends a toolchange into m_plan and calculates neccessary depth of the corresponding box void WipeTower::plan_toolchange(float z_par, float layer_height_par, unsigned int old_tool, unsigned int new_tool, float wipe_volume, float purge_volume) diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 2c2d38ba9..73cd15ccc 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -25,6 +25,7 @@ public: // WipeTower height to minimum depth map static const std::map min_depth_per_height; + static std::vector> extract_wipe_volumes(const PrintConfig& config); struct Extrusion {