From 83f6d67d4878d00f73e19b16aa1034f4f35b4e37 Mon Sep 17 00:00:00 2001 From: Zhicheng Wang <1627343141@qq.com> Date: Mon, 29 Jun 2026 05:46:04 +0800 Subject: [PATCH] modify local AABB compute --- .../primitive/axis/polyline_extrude_axis.hpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/primitive_process/interface/primitive/axis/polyline_extrude_axis.hpp b/primitive_process/interface/primitive/axis/polyline_extrude_axis.hpp index 54b1089..2f508bc 100644 --- a/primitive_process/interface/primitive/axis/polyline_extrude_axis.hpp +++ b/primitive_process/interface/primitive/axis/polyline_extrude_axis.hpp @@ -17,6 +17,19 @@ struct PE_API polyline_extrude_axis final : public extrude_axis { { aabb_t res{}; for (const auto& v : vertices) res.extend(Eigen::Vector3d{v[0], v[1], 0}); + for (size_t i = 0; i < bulges.size(); ++i) { + if (std::abs(bulges[i]) <= epsilon) continue; + const auto& a = vertices[i]; + const auto& b = vertices[i + 1]; + const auto half_ab = 0.5 * (a + b); + const auto bisec_vec = 0.5 * Eigen::Vector2d{a.y() - b.y(), b.x() - a.x()}; + const auto center = half_ab + bisec_vec / bulges[i]; + const auto ca = a - center; + const auto half_theta = std::atan(bulges[i]); + Eigen::Rotation2Dd rot{half_theta}; + const auto mid = center + rot * ca; + res.extend(Eigen::Vector3d{mid[0], mid[1], 0}); + } return res; }