|
|
|
@ -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; |
|
|
|
} |
|
|
|
|
|
|
|
|