From fac5104bd85193c08b3dbd2ee52343215ad91115 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 12 Feb 2025 10:57:30 +0100 Subject: [PATCH] Take into account edge orientation also for polygonal edges #6113 --- src/ifcgeom/kernels/opencascade/loop.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/loop.cpp b/src/ifcgeom/kernels/opencascade/loop.cpp index 840952acca..581cbf8567 100644 --- a/src/ifcgeom/kernels/opencascade/loop.cpp +++ b/src/ifcgeom/kernels/opencascade/loop.cpp @@ -109,6 +109,8 @@ namespace { throw std::runtime_error("Different trim types not supported"); } + const bool reversed = !e->orientation.get_value_or(true); + TopoDS_Edge E; auto e_basis = e->basis; if (e_basis) { @@ -140,7 +142,6 @@ namespace { curve = approx.Curve(); } - const bool reversed = !e->orientation.get_value_or(true); const bool is_conic = e_basis->kind() == taxonomy::ELLIPSE || e_basis->kind() == taxonomy::CIRCLE; auto e_start = e->start; @@ -180,10 +181,6 @@ namespace { if (!e->curve_sense.get_value_or(true)) { E.Reverse(); } - - if (reversed) { - E.Reverse(); - } } else { if (e->start.which() != 1) { throw std::runtime_error("Non-cartesian trim on edge without curve"); @@ -194,6 +191,10 @@ namespace { E = BRepBuilderAPI_MakeEdge(p1, p2).Edge(); } + if (reversed) { + E.Reverse(); + } + #ifdef IFOPSH_DEBUG std::ostringstream oss; e->print(oss);