diff --git a/src/ifcgeom/kernels/cgal/CgalKernel.cpp b/src/ifcgeom/kernels/cgal/CgalKernel.cpp index ea725fc024..156bb36023 100644 --- a/src/ifcgeom/kernels/cgal/CgalKernel.cpp +++ b/src/ifcgeom/kernels/cgal/CgalKernel.cpp @@ -365,6 +365,10 @@ namespace { dispatch_curve_creation::dispatch(e.basis, v); this->points = v.points; + + if (!e.orientation.get_value_or(true)) { + std::reverse(this->points.begin(), this->points.end()); + } } void operator()(const taxonomy::item& e) { @@ -443,6 +447,14 @@ bool CgalKernel::convert(const taxonomy::loop* loop, cgal_wire_t& result) { Logger::Message(Logger::LOG_WARNING, ss.str(), loop->instance); } + /* + std::wcerr << "[" << std::endl; + for (auto& p : polygon) { + std::wcerr << " (" << CGAL::to_double(p.cartesian(0)) << ", " << CGAL::to_double(p.cartesian(1)) << ", " << CGAL::to_double(p.cartesian(2)) << ")," << std::endl; + } + std::wcerr << "]" << std::endl; + */ + if (count < 3) { Logger::Message(Logger::LOG_ERROR, "Not enough edges for:", loop->instance); return false;