From d400a48a9d390d7c959ec1b83bd5e8dda28c26b6 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 11 Jun 2024 14:14:47 +0200 Subject: [PATCH] Remember your own conventions: lines run along positive Z --- src/ifcgeom/kernels/opencascade/loop.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/loop.cpp b/src/ifcgeom/kernels/opencascade/loop.cpp index da117091cb..ee263fcef1 100644 --- a/src/ifcgeom/kernels/opencascade/loop.cpp +++ b/src/ifcgeom/kernels/opencascade/loop.cpp @@ -83,7 +83,7 @@ namespace { curve_creation_visitor_result_type operator()(const taxonomy::line::ptr& l) { const auto& m = l->matrix->ccomponents(); - return result = Handle(Geom_Curve)(new Geom_Line(OpenCascadeKernel::convert_xyz2(m.col(3)), OpenCascadeKernel::convert_xyz2(m.col(0)))); + return result = Handle(Geom_Curve)(new Geom_Line(OpenCascadeKernel::convert_xyz2(m.col(3)), OpenCascadeKernel::convert_xyz2(m.col(2)))); } curve_creation_visitor_result_type operator()(const taxonomy::circle::ptr& c) { @@ -198,7 +198,15 @@ bool OpenCascadeKernel::convert(const taxonomy::loop::ptr loop, TopoDS_Wire& wir TopTools_ListOfShape converted_segments; for (auto& segment : loop->children) { - auto segment_wire = boost::get(convert_curve(this, segment)); + TopoDS_Wire segment_wire; + try { + segment_wire = boost::get(convert_curve(this, segment)); + } catch (...) { + // @todo we should do some better logging here and catch specific exceptions + // but most notably we just want to continue processing when there are + // duplicate vertices in our loop (or remove them earlier in the mapping?). + continue; + } #ifdef IFOPSH_DEBUG std::ostringstream o;