From df942f64607d79b072628207b42e2b09c308e945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Granskogen=20Bj=C3=B8rnstad?= Date: Thu, 23 Nov 2017 11:50:55 +0100 Subject: [PATCH] SvgSerializer: Fix bounding box for arc segments Not necessarily minimal, but better to be conservative w.r.t. getting all geometry inside bounds. --- src/ifcconvert/SvgSerializer.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ifcconvert/SvgSerializer.cpp b/src/ifcconvert/SvgSerializer.cpp index 7e46036597..df6471735a 100644 --- a/src/ifcconvert/SvgSerializer.cpp +++ b/src/ifcconvert/SvgSerializer.cpp @@ -118,15 +118,22 @@ void SvgSerializer::write(path_object& p, const TopoDS_Wire& wire) { // the direction is reversed. positive_direction = !positive_direction; } - + + gp_Pnt center; if (ty == STANDARD_TYPE(Geom_Circle)) { Handle(Geom_Circle) circle = Handle(Geom_Circle)::DownCast(curve); r1 = r2 = circle->Radius(); + center = circle->Location(); } else { Handle(Geom_Ellipse) ellipse = Handle(Geom_Ellipse)::DownCast(curve); r1 = ellipse->MajorRadius(); r2 = ellipse->MinorRadius(); + center = ellipse->Location(); } + + // Make sure the arc segment is entirely inside bounding box: + growBoundingBox(center.X() - r1, center.Y() - r1); + growBoundingBox(center.X() + r1, center.Y() + r1); // Calculate the angle between 2d vecs to have signed result const gp_Dir& d = conic->Position().XDirection();