From 933f7fced25a2ea6fd73fa5c6d0c67218accd7bc Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 9 Apr 2023 19:28:37 +0000 Subject: [PATCH] Merge OCCT 7.6+ compatibility --- .../opencascade/OpenCascadeConversionResult.cpp | 8 +++----- src/ifcgeom/kernels/opencascade/loop.cpp | 13 +++++++++++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.cpp b/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.cpp index f4f82992cf..aede4adbc7 100644 --- a/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.cpp +++ b/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.cpp @@ -62,8 +62,6 @@ void ifcopenshell::geometry::OpenCascadeShape::Triangulate(const IfcGeom::Iterat std::map, int> edgecount; std::vector > edges_temp; - const TColgp_Array1OfPnt& nodes = tri->Nodes(); - const TColgp_Array1OfPnt2d& uvs = tri->UVNodes(); std::vector coords; BRepGProp_Face prop(face); std::map dict; @@ -72,14 +70,14 @@ void ifcopenshell::geometry::OpenCascadeShape::Triangulate(const IfcGeom::Iterat const bool calculate_normals = !settings.get(IfcGeom::IteratorSettings::WELD_VERTICES) && !settings.get(IfcGeom::IteratorSettings::NO_NORMALS); - for (int i = 1; i <= nodes.Length(); ++i) { - coords.push_back(nodes(i).Transformed(loc).XYZ()); + for (int i = 1; i <= tri->NbNodes(); ++i) { + coords.push_back(tri->Node(i).Transformed(loc).XYZ()); taxonomy_transform(place.components_, *coords.rbegin()); const gp_XYZ& last = *coords.rbegin(); dict[i] = t->addVertex(surface_style_id, last.X(), last.Y(), last.Z()); if (calculate_normals) { - const gp_Pnt2d& uv = uvs(i); + const gp_Pnt2d& uv = tri->UVNode(i); gp_Pnt p; gp_Vec normal_direction; prop.Normal(uv.X(), uv.Y(), p, normal_direction); diff --git a/src/ifcgeom/kernels/opencascade/loop.cpp b/src/ifcgeom/kernels/opencascade/loop.cpp index 9028da110a..93c144b5b5 100644 --- a/src/ifcgeom/kernels/opencascade/loop.cpp +++ b/src/ifcgeom/kernels/opencascade/loop.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -15,6 +14,11 @@ #include #include +#include +#if OCC_VERSION_HEX < 0x70600 +#include +#endif + using namespace ifcopenshell::geometry; using namespace ifcopenshell::geometry::kernels; using namespace IfcGeom; @@ -110,8 +114,13 @@ namespace { // @todo const double precision_ = 1.e-5; Logger::Warning("Approximating BasisCurve due to possible discontinuities", e.instance); - BRepAdaptor_CompCurve cc(boost::get(crv_or_wire), true); + const auto& w = boost::get(crv_or_wire); +#if OCC_VERSION_HEX < 0x70600 + BRepAdaptor_CompCurve cc(w, true); Handle(Adaptor3d_HCurve) hcc = Handle(Adaptor3d_HCurve)(new BRepAdaptor_HCompCurve(cc)); +#else + auto hcc = new BRepAdaptor_CompCurve(w, true); +#endif // @todo, arbitrary numbers here, note they cannot be too high as contiguous memory is allocated based on them. Approx_Curve3d approx(hcc, precision_, GeomAbs_C0, 10, 10); curve = approx.Curve();