diff options
Diffstat (limited to 'src/libslic3r/SLAPrint.cpp')
-rw-r--r-- | src/libslic3r/SLAPrint.cpp | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 53a0e8223..61723721e 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -414,6 +414,12 @@ SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig con model_object.sla_support_points = model_object_new.sla_support_points; } model_object.sla_points_status = model_object_new.sla_points_status; + + if (model_object.sla_drain_holes.size() != model_object_new.sla_drain_holes.size()) + { + model_object.sla_drain_holes = model_object_new.sla_drain_holes; + update_apply_status(it_print_object_status->print_object->invalidate_step(slaposHollowing)); + } // Copy the ModelObject name, input_file and instances. The instances will compared against PrintObject instances in the next step. model_object.name = model_object_new.name; @@ -1154,23 +1160,32 @@ const TriangleMesh &SLAPrintObject::transformed_mesh() const { return m_transformed_rmesh.get(); } -std::vector<sla::SupportPoint> SLAPrintObject::transformed_support_points() const +template<class It, class Trafo, class V = typename std::iterator_traits<It>::value_type> +std::vector<V> transform_pts(It from, It to, Trafo &&tr) { - assert(m_model_object != nullptr); - std::vector<sla::SupportPoint>& spts = m_model_object->sla_support_points; - - // this could be cached as well - std::vector<sla::SupportPoint> ret; - ret.reserve(spts.size()); - - for(sla::SupportPoint& sp : spts) { - Vec3f transformed_pos = trafo().cast<float>() * sp.pos; - ret.emplace_back(transformed_pos, sp.head_front_radius, sp.is_new_island); + auto ret = reserve_vector<V>(to - from); + for(auto it = from; it != to; ++it) { + V v = *it; + v.pos = tr * it->pos; + ret.emplace_back(std::move(v)); } - return ret; } +sla::SupportPoints SLAPrintObject::transformed_support_points() const +{ + assert(m_model_object != nullptr); + auto& spts = m_model_object->sla_support_points; + return transform_pts(spts.begin(), spts.end(), trafo().cast<float>()); +} + +sla::DrainHoles SLAPrintObject::transformed_drainhole_points() const +{ + assert(m_model_object != nullptr); + auto& spts = m_model_object->sla_drain_holes; + return transform_pts(spts.begin(), spts.end(), trafo().cast<float>()); +} + DynamicConfig SLAPrintStatistics::config() const { DynamicConfig config; |