From a6a77361ba27bd1119548ac06a48b988b98da4c8 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Wed, 11 Mar 2020 16:10:51 +0100 Subject: [PATCH] Multimaterial purging lines fixed on rectangular beds with non-standard origin (#3805) --- src/libslic3r/GCode.cpp | 2 +- src/libslic3r/GCode/WipeTower.cpp | 5 +++++ src/libslic3r/GCode/WipeTower.hpp | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index cfc60ffe354..c72ab30c7fe 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -291,7 +291,7 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T std::string gcode; - // Toolchangeresult.gcode assumes the wipe tower corner is at the origin + // Toolchangeresult.gcode assumes the wipe tower corner is at the origin (except for priming lines) // We want to rotate and shift all extrusions (gcode postprocessing) and starting and ending position float alpha = m_wipe_tower_rotation/180.f * float(M_PI); Vec2f start_pos = tcr.start_pos; diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 5ee57748222..d31adbd8fcc 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -492,6 +492,9 @@ WipeTower::WipeTower(const PrintConfig& config, const std::vector& bed_points = config.bed_shape.values; m_bed_shape = (bed_points.size() == 4 ? RectangularBed : CircularBed); m_bed_width = float(BoundingBoxf(bed_points).size().x()); + m_bed_bottom_left = m_bed_shape == RectangularBed + ? Vec2f(bed_points.front().x(), bed_points.front().y()) + : Vec2f::Zero(); } @@ -566,6 +569,8 @@ std::vector WipeTower::prime( // In case of a circular bed, place it so it goes across the diameter and hope it will fit if (m_bed_shape == CircularBed) cleaning_box.translate(-m_bed_width/2 + m_bed_width * 0.03f, -m_bed_width * 0.12f); + if (m_bed_shape == RectangularBed) + cleaning_box.translate(m_bed_bottom_left); std::vector results; diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index e6832958eff..cc870c08acf 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -236,6 +236,7 @@ class WipeTower CircularBed } m_bed_shape; float m_bed_width; // width of the bed bounding box + Vec2f m_bed_bottom_left; // bottom-left corner coordinates (for rectangular beds) float m_perimeter_width = 0.4f * Width_To_Nozzle_Ratio; // Width of an extrusion line, also a perimeter spacing for 100% infill. float m_extrusion_flow = 0.038f; //0.029f;// Extrusion flow is derived from m_perimeter_width, layer height and filament diameter.