From 12232deb7a6eccc7639d711759b4edb11378ca54 Mon Sep 17 00:00:00 2001 From: Aleksandr Dobkin Date: Mon, 16 Mar 2026 13:48:42 -0700 Subject: [PATCH] Fix z-offset handling for ZAA --- src/libslic3r/ContourZ.cpp | 9 +++------ src/libslic3r/PrintObject.cpp | 7 ++++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/ContourZ.cpp b/src/libslic3r/ContourZ.cpp index 0182b35aad..8eb1a8b5a8 100644 --- a/src/libslic3r/ContourZ.cpp +++ b/src/libslic3r/ContourZ.cpp @@ -30,8 +30,6 @@ static double slope_from_normal(const Eigen::Vector3d& normal) return angle_rad; } -// const int LINE = 180; - static bool contour_extrusion_path(LayerRegion *region, const sla::IndexedMesh &mesh, ExtrusionPath &path) { if (region->region().config().zaa_region_disable) { @@ -213,14 +211,13 @@ static void contour_extrusion_entity(LayerRegion *region, const sla::IndexedMesh } static void handle_extrusion_collection(LayerRegion *region, const sla::IndexedMesh &mesh, ExtrusionEntityCollection &collection, std::initializer_list roles) { - for (ExtrusionEntity *extr : collection.entities) { - // printf("handling extrusion collection %p %p\n", &collection, extr); - if (!contains(roles, extr->role())) { + for (ExtrusionEntity* extr : collection.entities) { + if (!contains(roles, extr->role())) { continue; } contour_extrusion_entity(region, mesh, extr); - } + } } void Layer::make_contour_z(const sla::IndexedMesh &mesh) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 12d2d6855b..5dd342eaf9 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -731,13 +730,15 @@ void PrintObject::contour_z() } ModelInstance *inst = m_model_object->instances.front(); - Point center_offset = this->center_offset(); + Point center_offset = this->center_offset(); Geometry::Transformation trans = inst->get_transformation(); + double z = trans.get_offset().z() - unscale(this->height()) / 2; trans.set_offset(Vec3d(-unscale(center_offset.x()), -unscale(center_offset.y()), 0)); - mesh.transform(trans.get_matrix()); sla::IndexedMesh imesh(mesh); + imesh.ground_level_offset(-z); + std::mutex mtx; size_t completed = 0; tbb::parallel_for(