From 9ee71ddd925b1f7ac2a3ca7daffb72f09d347a0e Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Tue, 17 Jan 2023 11:23:18 +0100 Subject: [PATCH] WIP fixing trafos --- src/libslic3r/SLA/SupportPoint.hpp | 9 ++++++++- src/libslic3r/SLA/SupportPointGenerator.cpp | 12 ++++++++++++ src/libslic3r/SLAPrint.cpp | 16 ++++++---------- src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp | 4 ++-- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/libslic3r/SLA/SupportPoint.hpp b/src/libslic3r/SLA/SupportPoint.hpp index 71849a3643..cf6dbabbaf 100644 --- a/src/libslic3r/SLA/SupportPoint.hpp +++ b/src/libslic3r/SLA/SupportPoint.hpp @@ -3,7 +3,11 @@ #include -namespace Slic3r { namespace sla { +namespace Slic3r { + +class ModelObject; + +namespace sla { // An enum to keep track of where the current points on the ModelObject came from. enum class PointsStatus { @@ -62,6 +66,9 @@ struct SupportPoint using SupportPoints = std::vector; +SupportPoints transformed_support_points(const ModelObject &mo, + const Transform3d &trafo); + }} // namespace Slic3r::sla #endif // SUPPORTPOINT_HPP diff --git a/src/libslic3r/SLA/SupportPointGenerator.cpp b/src/libslic3r/SLA/SupportPointGenerator.cpp index 6d159b37b6..193333bc6a 100644 --- a/src/libslic3r/SLA/SupportPointGenerator.cpp +++ b/src/libslic3r/SLA/SupportPointGenerator.cpp @@ -661,5 +661,17 @@ void SupportPointGenerator::output_expolygons(const ExPolygons& expolys, const s } #endif +SupportPoints transformed_support_points(const ModelObject &mo, + const Transform3d &trafo) +{ + auto spts = mo.sla_support_points; + Transform3f tr = trafo.cast(); + for (sla::SupportPoint& suppt : spts) { + suppt.pos = tr * suppt.pos; + } + + return spts; +} + } // namespace sla } // namespace Slic3r diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 03c0df4ef1..71d6e889dd 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -1051,20 +1051,16 @@ SLAPrintObject::get_parts_to_slice(SLAPrintObjectStep untilstep) const sla::SupportPoints SLAPrintObject::transformed_support_points() const { - assert(m_model_object != nullptr); - auto spts = m_model_object->sla_support_points; - const Transform3d& vol_trafo = m_model_object->volumes.front()->get_transformation().get_matrix(); - const Transform3f& tr = (trafo() * vol_trafo).cast(); - for (sla::SupportPoint& suppt : spts) { - suppt.pos = tr * suppt.pos; - } - - return spts; + assert(model_object()); + + return sla::transformed_support_points(*model_object(), trafo()); } sla::DrainHoles SLAPrintObject::transformed_drainhole_points() const { - return sla::transformed_drainhole_points(*this->model_object(), trafo()); + assert(model_object()); + + return sla::transformed_drainhole_points(*model_object(), trafo()); } DynamicConfig SLAPrintStatistics::config() const diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index 5bd2d98fdf..31252d319e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -123,7 +123,7 @@ void GLGizmoHollow::render_points(const Selection& selection) return; double shift_z = m_c->selection_info()->print_object()->get_current_elevation(); - Transform3d trafo(inst->get_transformation().get_matrix() * inst->get_object()->volumes.front()->get_matrix()); + Transform3d trafo(inst->get_transformation().get_matrix()); trafo.translation()(2) += shift_z; const Geometry::Transformation transformation{trafo}; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index b117a2bebb..301bbcdbe1 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -153,7 +153,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection) return; double shift_z = m_c->selection_info()->print_object()->get_current_elevation(); - Transform3d trafo(inst->get_transformation().get_matrix() * inst->get_object()->volumes.front()->get_matrix()); + Transform3d trafo = inst->get_transformation().get_matrix(); trafo.translation()(2) += shift_z; const Geometry::Transformation transformation{trafo}; @@ -1084,7 +1084,7 @@ void GLGizmoSlaSupports::get_data_from_backend() if (po->model_object()->id() == mo->id()) { m_normal_cache.clear(); const std::vector& points = po->get_support_points(); - auto mat = (po->trafo() * po->model_object()->volumes.front()->get_transformation().get_matrix()).inverse().cast(); + auto mat = po->trafo().inverse().cast(); for (unsigned int i=0; i