git: d25a7563aaa6 - main - cad/freecad: update to 0.19.4
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 03 Mar 2022 21:10:55 UTC
The branch main has been updated by cmt: URL: https://cgit.FreeBSD.org/ports/commit/?id=d25a7563aaa6b357e7ee4fcea1a634bbc5fb40c9 commit d25a7563aaa6b357e7ee4fcea1a634bbc5fb40c9 Author: Christoph Moench-Tegeder <cmt@FreeBSD.org> AuthorDate: 2022-03-03 21:08:54 +0000 Commit: Christoph Moench-Tegeder <cmt@FreeBSD.org> CommitDate: 2022-03-03 21:08:54 +0000 cad/freecad: update to 0.19.4 Notes: https://github.com/FreeCAD/FreeCAD/releases/tag/0.19.4 Also switch back to current opencascade to make this port actually installable in the presence of other ports --- cad/freecad/Makefile | 4 +- cad/freecad/distinfo | 6 +- .../patch-74639da997d5f2e53f001d9f256be86ceee901f5 | 477 +++++++++++++++++++++ ...c_3rdParty_salomesmesh_src_SMESH_SMESH_Mesh.cpp | 10 + .../files/patch-src_Mod_Fem_App_FemConstraint.cpp | 22 + .../patch-src_Mod_Fem_App_FemConstraintFixed.cpp | 11 + .../patch-src_Mod_MeshPart_App_MeshFlattening.cpp | 52 +++ ...h-src_Mod_PartDesign_Gui_ViewProviderAddSub.cpp | 21 + ..._Mod_PartDesign_Gui_ViewProviderTransformed.cpp | 19 + .../files/patch-src_Mod_Part_App_AppPartPy.cpp | 29 ++ cad/freecad/files/patch-src_Mod_Part_App_Tools.cpp | 45 ++ .../files/patch-src_Mod_Part_App_TopoShape.cpp | 146 +++++++ .../patch-src_Mod_Part_Gui_ViewProviderExt.cpp | 81 ++++ .../patch-src_Mod_Raytracing_App_PovTools.cpp | 23 + 14 files changed, 941 insertions(+), 5 deletions(-) diff --git a/cad/freecad/Makefile b/cad/freecad/Makefile index 47bf2a05f54e..2c9833d244fa 100644 --- a/cad/freecad/Makefile +++ b/cad/freecad/Makefile @@ -1,5 +1,5 @@ PORTNAME= FreeCAD -DISTVERSION= 0.19.3 +DISTVERSION= 0.19.4 # use these for bugfixes/snapshots # DISTVERSION= 0.18-16093 # git rev-list --count # DISTVERSIONSUFFIX= -g690774c0e @@ -22,7 +22,7 @@ LIB_DEPENDS= libexpat.so:textproc/expat2 \ libpng.so:graphics/png \ libtiff.so:graphics/tiff \ libvtksys-${VTK_VER}.so:math/vtk${VTK_VER:R} \ - libTKernel.so:cad/opencascade740 \ + libTKernel.so:cad/opencascade \ libxerces-c.so:textproc/xerces-c3 \ libboost_thread.so:devel/boost-libs \ libarea.so:devel/libarea \ diff --git a/cad/freecad/distinfo b/cad/freecad/distinfo index ce81c476485f..4786748e1b59 100644 --- a/cad/freecad/distinfo +++ b/cad/freecad/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1646330977 -SHA256 (FreeCAD-FreeCAD-0.19.3_GH0.tar.gz) = 568fa32a9601693ff9273f3a5a2e825915f58b2455ffa173bc23f981edecd07d -SIZE (FreeCAD-FreeCAD-0.19.3_GH0.tar.gz) = 296986058 +TIMESTAMP = 1646236843 +SHA256 (FreeCAD-FreeCAD-0.19.4_GH0.tar.gz) = e40a1c343956e13c56cc8578d025ae83d68d9d20acda1732953bc8a3883e9722 +SIZE (FreeCAD-FreeCAD-0.19.4_GH0.tar.gz) = 296990652 diff --git a/cad/freecad/files/patch-74639da997d5f2e53f001d9f256be86ceee901f5 b/cad/freecad/files/patch-74639da997d5f2e53f001d9f256be86ceee901f5 new file mode 100644 index 000000000000..dcd1a2d81116 --- /dev/null +++ b/cad/freecad/files/patch-74639da997d5f2e53f001d9f256be86ceee901f5 @@ -0,0 +1,477 @@ +commit 74639da997d5f2e53f001d9f256be86ceee901f5 +Author: wmayer <wmayer@users.sourceforge.net> +Date: Sat Oct 9 13:49:02 2021 +0200 + + OCCT: port FreeCAD sources to version 7.6 + SMESH is not yet ported + Although FreeCAD code compiles with OCCT 7.6 it doesn't work at the moment + +diff --git src/Mod/Drawing/App/DrawingExport.cpp src/Mod/Drawing/App/DrawingExport.cpp +index b87891ed50..7572be417c 100644 +--- src/Mod/Drawing/App/DrawingExport.cpp ++++ src/Mod/Drawing/App/DrawingExport.cpp +@@ -64,10 +64,7 @@ + #include <BRep_Tool.hxx> + + #include <BRepAdaptor_CompCurve.hxx> +-#include <BRepAdaptor_HCompCurve.hxx> + #include <Approx_Curve3d.hxx> +-#include <BRepAdaptor_HCurve.hxx> +-#include <BRepAdaptor_HCurve.hxx> + #include <Geom_BSplineCurve.hxx> + #include <Geom_BezierCurve.hxx> + #include <GeomConvert_BSplineCurveToBezierCurve.hxx> +@@ -75,11 +72,19 @@ + #include <Geom2d_BSplineCurve.hxx> + #include <BRepLProp_CLProps.hxx> + #include <Standard_Failure.hxx> ++#include <Standard_Version.hxx> ++#if OCC_VERSION_HEX < 0x070600 ++#include <BRepAdaptor_HCurve.hxx> ++#endif + + #include "DrawingExport.h" + #include <Base/Tools.h> + #include <Base/Vector3D.h> + ++#if OCC_VERSION_HEX >= 0x070600 ++using BRepAdaptor_HCurve = BRepAdaptor_Curve; ++#endif ++ + using namespace Drawing; + using namespace std; + +diff --git src/Mod/Drawing/App/ProjectionAlgos.cpp src/Mod/Drawing/App/ProjectionAlgos.cpp +index 9afae7e9c0..da03d49057 100644 +--- src/Mod/Drawing/App/ProjectionAlgos.cpp ++++ src/Mod/Drawing/App/ProjectionAlgos.cpp +@@ -61,10 +61,7 @@ + #include <BRepMesh_IncrementalMesh.hxx> + #include <BRepLib.hxx> + #include <BRepAdaptor_CompCurve.hxx> +-#include <BRepAdaptor_HCompCurve.hxx> + #include <Approx_Curve3d.hxx> +-#include <BRepAdaptor_HCurve.hxx> +-#include <BRepAdaptor_HCurve.hxx> + #include <Geom_BSplineCurve.hxx> + #include <Geom_BezierCurve.hxx> + #include <GeomConvert_BSplineCurveToBezierCurve.hxx> +diff --git src/Mod/Import/App/ImpExpDxf.cpp src/Mod/Import/App/ImpExpDxf.cpp +index 09827bd928..dcd88ef138 100644 +--- src/Mod/Import/App/ImpExpDxf.cpp ++++ src/Mod/Import/App/ImpExpDxf.cpp +@@ -29,7 +29,6 @@ + + #include <Approx_Curve3d.hxx> + #include <BRepAdaptor_Curve.hxx> +-#include <BRepAdaptor_HCurve.hxx> + #include <BRep_Builder.hxx> + #include <BRepBuilderAPI_MakeEdge.hxx> + #include <BRepBuilderAPI_MakeVertex.hxx> +@@ -47,6 +46,7 @@ + #include <gp_Pnt.hxx> + #include <gp_Dir.hxx> + #include <gp_Vec.hxx> ++#include <Standard_Version.hxx> + #include <TopoDS.hxx> + #include <TopoDS_Edge.hxx> + #include <TopoDS_Vertex.hxx> +@@ -55,6 +55,9 @@ + #include <TopExp_Explorer.hxx> + #include <TopoDS_Edge.hxx> + #include <TColgp_Array1OfPnt.hxx> ++#if OCC_VERSION_HEX < 0x070600 ++#include <BRepAdaptor_HCurve.hxx> ++#endif + + #include <Base/Console.h> + #include <Base/Parameter.h> +@@ -68,6 +71,10 @@ + + using namespace Import; + ++#if OCC_VERSION_HEX >= 0x070600 ++using BRepAdaptor_HCurve = BRepAdaptor_Curve; ++#endif ++ + + //****************************************************************************** + // reading +diff --git src/Mod/Part/App/GeomPlate/CurveConstraintPyImp.cpp src/Mod/Part/App/GeomPlate/CurveConstraintPyImp.cpp +index 3271f3651a..b63227d537 100644 +--- src/Mod/Part/App/GeomPlate/CurveConstraintPyImp.cpp ++++ src/Mod/Part/App/GeomPlate/CurveConstraintPyImp.cpp +@@ -24,10 +24,13 @@ + #include "PreCompiled.h" + #ifndef _PreComp_ + # include <GeomAdaptor_Curve.hxx> +-# include <GeomAdaptor_HCurve.hxx> + # include <Geom2dAdaptor_Curve.hxx> +-# include <Geom2dAdaptor_HCurve.hxx> + # include <Standard_Failure.hxx> ++# include <Standard_Version.hxx> ++# if OCC_VERSION_HEX < 0x070600 ++# include <GeomAdaptor_HCurve.hxx> ++# include <Geom2dAdaptor_HCurve.hxx> ++# endif + #endif + + #include "GeomPlate/CurveConstraintPy.h" +@@ -76,6 +79,16 @@ int CurveConstraintPy::PyInit(PyObject* args, PyObject* kwds) + return -1; + } + ++#if OCC_VERSION_HEX >= 0x070600 ++ Handle(Adaptor3d_Curve) hCurve; ++ if (curve->getTypeId().isDerivedFrom(GeomTrimmedCurve::getClassTypeId())) { ++ GeomTrimmedCurve* trim = static_cast<GeomTrimmedCurve*>(curve); ++ hCurve = new GeomAdaptor_Curve(handle, trim->getFirstParameter(), trim->getLastParameter()); ++ } ++ else { ++ hCurve = new GeomAdaptor_Curve(handle); ++ } ++#else + Handle(Adaptor3d_HCurve) hCurve; + if (curve->getTypeId().isDerivedFrom(GeomTrimmedCurve::getClassTypeId())) { + GeomTrimmedCurve* trim = static_cast<GeomTrimmedCurve*>(curve); +@@ -86,6 +99,7 @@ int CurveConstraintPy::PyInit(PyObject* args, PyObject* kwds) + GeomAdaptor_Curve adapt(handle); + hCurve = new GeomAdaptor_HCurve(adapt); + } ++#endif + + ptr.reset(new GeomPlate_CurveConstraint(hCurve, order, nbPts, tolDist, tolAng, tolCurv)); + } +@@ -212,11 +226,15 @@ PyObject* CurveConstraintPy::curve3d(PyObject *args) + return nullptr; + + try { +- Handle(Adaptor3d_HCurve) hAdapt = getGeomPlate_CurveConstraintPtr()->Curve3d(); ++ auto hAdapt = getGeomPlate_CurveConstraintPtr()->Curve3d(); + if (hAdapt.IsNull()) + Py_Return; + ++#if OCC_VERSION_HEX >= 0x070600 ++ const Adaptor3d_Curve& a3d = *hAdapt; ++#else + const Adaptor3d_Curve& a3d = hAdapt->Curve(); ++#endif + std::unique_ptr<GeomCurve> ptr(Part::makeFromCurveAdaptor(a3d)); + return ptr->getPyObject(); + } +@@ -282,6 +300,16 @@ PyObject* CurveConstraintPy::setProjectedCurve(PyObject *args) + return nullptr; + } + ++#if OCC_VERSION_HEX >= 0x070600 ++ Handle(Adaptor2d_Curve2d) hCurve; ++ if (handle->IsKind(STANDARD_TYPE(Geom2d_TrimmedCurve))) { ++ Handle(Geom2d_TrimmedCurve) aTC (Handle(Geom2d_TrimmedCurve)::DownCast (handle)); ++ hCurve = new Geom2dAdaptor_Curve(handle, aTC->FirstParameter(), aTC->LastParameter()); ++ } ++ else { ++ hCurve = new Geom2dAdaptor_Curve(handle); ++ } ++#else + Handle(Adaptor2d_HCurve2d) hCurve; + if (handle->IsKind(STANDARD_TYPE(Geom2d_TrimmedCurve))) { + Handle(Geom2d_TrimmedCurve) aTC (Handle(Geom2d_TrimmedCurve)::DownCast (handle)); +@@ -292,6 +320,7 @@ PyObject* CurveConstraintPy::setProjectedCurve(PyObject *args) + Geom2dAdaptor_Curve adapt(handle); + hCurve = new Geom2dAdaptor_HCurve(adapt); + } ++#endif + + getGeomPlate_CurveConstraintPtr()->SetProjectedCurve(hCurve, tolU, tolV); + Py_Return; +@@ -308,11 +337,15 @@ PyObject* CurveConstraintPy::projectedCurve(PyObject *args) + return nullptr; + + try { +- Handle(Adaptor2d_HCurve2d) hAdapt = getGeomPlate_CurveConstraintPtr()->ProjectedCurve(); ++ auto hAdapt = getGeomPlate_CurveConstraintPtr()->ProjectedCurve(); + if (hAdapt.IsNull()) + Py_Return; + ++#if OCC_VERSION_HEX >= 0x070600 ++ const Adaptor2d_Curve2d& a2d = *hAdapt; ++#else + const Adaptor2d_Curve2d& a2d = hAdapt->Curve2d(); ++#endif + std::unique_ptr<Geom2dCurve> ptr(Part::makeFromCurveAdaptor2d(a2d)); + return ptr->getPyObject(); + } +diff --git src/Mod/Part/App/Geometry.cpp src/Mod/Part/App/Geometry.cpp +index e6d6396ca9..1d1d67d4f0 100644 +--- src/Mod/Part/App/Geometry.cpp ++++ src/Mod/Part/App/Geometry.cpp +@@ -51,7 +51,6 @@ + # include <Geom_RectangularTrimmedSurface.hxx> + # include <Geom_SurfaceOfRevolution.hxx> + # include <Geom_SurfaceOfLinearExtrusion.hxx> +-# include <GeomAdaptor_HCurve.hxx> + # include <GeomAPI_Interpolate.hxx> + # include <GeomConvert.hxx> + # include <GeomConvert_CompCurveToBSplineCurve.hxx> +@@ -101,6 +100,9 @@ + # include <GeomAPI_ExtremaCurveCurve.hxx> + # include <ShapeConstruct_Curve.hxx> + # include <LProp_NotDefined.hxx> ++# if OCC_VERSION_HEX < 0x070600 ++# include <GeomAdaptor_HCurve.hxx> ++# endif + + # include <ctime> + # include <cmath> +@@ -144,6 +146,9 @@ + + #include "Geometry.h" + ++#if OCC_VERSION_HEX >= 0x070600 ++using GeomAdaptor_HCurve = GeomAdaptor_Curve; ++#endif + + using namespace Part; + +diff --git src/Mod/Part/App/PartFeatures.cpp src/Mod/Part/App/PartFeatures.cpp +index 2dc503bdf2..4d9e1fc0f9 100644 +--- src/Mod/Part/App/PartFeatures.cpp ++++ src/Mod/Part/App/PartFeatures.cpp +@@ -25,9 +25,7 @@ + #ifndef _PreComp_ + # include <BRepFill.hxx> + # include <BRepAdaptor_Curve.hxx> +-# include <BRepAdaptor_HCurve.hxx> + # include <BRepAdaptor_CompCurve.hxx> +-# include <BRepAdaptor_HCompCurve.hxx> + # include <BRepLib_MakeWire.hxx> + # include <Geom_BSplineSurface.hxx> + # include <TopoDS.hxx> +@@ -43,7 +41,7 @@ + # include <TopExp_Explorer.hxx> + # include <TopoDS.hxx> + # include <Precision.hxx> +-# include <Adaptor3d_HCurve.hxx> ++# include <memory> + #endif + + +@@ -170,22 +168,18 @@ App::DocumentObjectExecReturn *RuledSurface::execute(void) + + if (Orientation.getValue() == 0) { + // Automatic +- Handle(Adaptor3d_HCurve) a1; +- Handle(Adaptor3d_HCurve) a2; ++ std::unique_ptr<Adaptor3d_Curve> a1; ++ std::unique_ptr<Adaptor3d_Curve> a2; + if (!isWire) { +- BRepAdaptor_Curve adapt1(TopoDS::Edge(S1)); +- BRepAdaptor_Curve adapt2(TopoDS::Edge(S2)); +- a1 = new BRepAdaptor_HCurve(adapt1); +- a2 = new BRepAdaptor_HCurve(adapt2); ++ a1 = std::make_unique<BRepAdaptor_Curve>(TopoDS::Edge(S1)); ++ a2 = std::make_unique<BRepAdaptor_Curve>(TopoDS::Edge(S2)); + } + else { +- BRepAdaptor_CompCurve adapt1(TopoDS::Wire(S1)); +- BRepAdaptor_CompCurve adapt2(TopoDS::Wire(S2)); +- a1 = new BRepAdaptor_HCompCurve(adapt1); +- a2 = new BRepAdaptor_HCompCurve(adapt2); ++ a1 = std::make_unique<BRepAdaptor_CompCurve>(TopoDS::Wire(S1)); ++ a2 = std::make_unique<BRepAdaptor_CompCurve>(TopoDS::Wire(S2)); + } + +- if (!a1.IsNull() && !a2.IsNull()) { ++ if (a1 && a2) { + // get end points of 1st curve + Standard_Real first, last; + first = a1->FirstParameter(); +diff --git src/Mod/Part/App/TopoShapeFacePyImp.cpp src/Mod/Part/App/TopoShapeFacePyImp.cpp +index ea6cd98bdf..63e8bead74 100644 +--- src/Mod/Part/App/TopoShapeFacePyImp.cpp ++++ src/Mod/Part/App/TopoShapeFacePyImp.cpp +@@ -493,6 +493,15 @@ PyObject* TopoShapeFacePy::getUVNodes(PyObject *args) + return Py::new_reference_to(list); + } + ++#if OCC_VERSION_HEX >= 0x070600 ++ for (int i=1; i<=mesh->NbNodes(); i++) { ++ gp_Pnt2d pt2d = mesh->UVNode(i); ++ Py::Tuple uv(2); ++ uv.setItem(0, Py::Float(pt2d.X())); ++ uv.setItem(1, Py::Float(pt2d.Y())); ++ list.append(uv); ++ } ++#else + const TColgp_Array1OfPnt2d& aNodesUV = mesh->UVNodes(); + for (int i=aNodesUV.Lower(); i<=aNodesUV.Upper(); i++) { + gp_Pnt2d pt2d = aNodesUV(i); +@@ -501,6 +510,7 @@ PyObject* TopoShapeFacePy::getUVNodes(PyObject *args) + uv.setItem(1, Py::Float(pt2d.Y())); + list.append(uv); + } ++#endif + + return Py::new_reference_to(list); + } +diff --git src/Mod/Part/App/TopoShapeWirePyImp.cpp src/Mod/Part/App/TopoShapeWirePyImp.cpp +index 95c1aff681..a1f32d6d03 100644 +--- src/Mod/Part/App/TopoShapeWirePyImp.cpp ++++ src/Mod/Part/App/TopoShapeWirePyImp.cpp +@@ -344,9 +344,9 @@ PyObject* TopoShapeWirePy::approximate(PyObject *args, PyObject *kwds) + return 0; + try { + BRepAdaptor_CompCurve adapt(TopoDS::Wire(getTopoShapePtr()->getShape())); +- Handle(Adaptor3d_HCurve) hcurve = adapt.Trim(adapt.FirstParameter(), +- adapt.LastParameter(), +- tol2d); ++ auto hcurve = adapt.Trim(adapt.FirstParameter(), ++ adapt.LastParameter(), ++ tol2d); + Approx_Curve3d approx(hcurve, tol3d, GeomAbs_C0, maxseg, maxdeg); + if (approx.IsDone()) { + return new BSplineCurvePy(new GeomBSplineCurve(approx.Curve())); +diff --git src/Mod/Part/Gui/TaskCheckGeometry.cpp src/Mod/Part/Gui/TaskCheckGeometry.cpp +index 5de7c16920..aaef13d9d0 100644 +--- src/Mod/Part/Gui/TaskCheckGeometry.cpp ++++ src/Mod/Part/Gui/TaskCheckGeometry.cpp +@@ -711,8 +711,10 @@ int TaskCheckGeometryResults::goBOPSingleCheck(const TopoDS_Shape& shapeIn, Resu + #if OCC_VERSION_HEX >= 0x060900 + #if OCC_VERSION_HEX < 0x070500 + BOPCheck.SetProgressIndicator(theProgress); +-#else ++#elif OCC_VERSION_HEX < 0x070600 + BOPCheck.SetProgressIndicator(theScope); ++#else ++ Q_UNUSED(theScope) + #endif // 0x070500 + #else + Q_UNUSED(theProgress); +@@ -740,7 +742,7 @@ int TaskCheckGeometryResults::goBOPSingleCheck(const TopoDS_Shape& shapeIn, Resu + Base::TimeInfo start_time; + #endif + +-BOPCheck.Perform(); ++ BOPCheck.Perform(); + + #ifdef FC_DEBUG + float bopAlgoTime = Base::TimeInfo::diffTimeF(start_time,Base::TimeInfo()); +diff --git src/Mod/Part/Gui/ViewProviderExt.cpp src/Mod/Part/Gui/ViewProviderExt.cpp +index 77cefbe3e0..8a52f1701b 100644 +--- src/Mod/Part/Gui/ViewProviderExt.cpp ++++ src/Mod/Part/Gui/ViewProviderExt.cpp +@@ -1150,16 +1150,25 @@ + + + // cycling through the poly mesh ++#if OCC_VERSION_HEX < 0x070600 + const Poly_Array1OfTriangle& Triangles = mesh->Triangles(); + const TColgp_Array1OfPnt& Nodes = mesh->Nodes(); + TColgp_Array1OfDir Normals (Nodes.Lower(), Nodes.Upper()); ++#else ++ int numNodes = mesh->NbNodes(); ++ TColgp_Array1OfDir Normals (1, numNodes); ++#endif + if (NormalsFromUV) + getNormals(actFace, mesh, Normals); + + for (int g=1;g<=nbTriInFace;g++) { + // Get the triangle + Standard_Integer N1,N2,N3; ++#if OCC_VERSION_HEX < 0x070600 + Triangles(g).Get(N1,N2,N3); ++#else ++ mesh->Triangle(g).Get(N1,N2,N3); ++#endif + + // change orientation of the triangle if the face is reversed + if ( orient != TopAbs_FORWARD ) { +@@ -1169,7 +1178,11 @@ + } + + // get the 3 points of this triangle ++#if OCC_VERSION_HEX < 0x070600 + gp_Pnt V1(Nodes(N1)), V2(Nodes(N2)), V3(Nodes(N3)); ++#else ++ gp_Pnt V1(mesh->Node(N1)), V2(mesh->Node(N2)), V3(mesh->Node(N3)); ++#endif + + // get the 3 normals of this triangle + gp_Vec NV1, NV2, NV3; +@@ -1246,7 +1259,11 @@ + // rare cases where some points are only referenced by the polygon + // but not by any triangle. Thus, we must apply the coordinates to + // make sure that everything is properly set. ++#if OCC_VERSION_HEX < 0x070600 + gp_Pnt p(Nodes(nodeIndex)); ++#else ++ gp_Pnt p(mesh->Node(nodeIndex)); ++#endif + if (!identity) + p.Transform(myTransf); + verts[index].setValue((float)(p.X()),(float)(p.Y()),(float)(p.Z())); +diff --git src/Mod/Path/App/AppPathPy.cpp src/Mod/Path/App/AppPathPy.cpp +index 6e0c72d2f5..ce912b4474 100644 +--- src/Mod/Path/App/AppPathPy.cpp ++++ src/Mod/Path/App/AppPathPy.cpp +@@ -49,10 +49,7 @@ + #include <TopExp_Explorer.hxx> + #include <gp_Lin.hxx> + #include <BRep_Tool.hxx> +-#include <BRepAdaptor_CompCurve.hxx> +-#include <BRepAdaptor_HCompCurve.hxx> +-#include <Approx_Curve3d.hxx> +-#include <BRepAdaptor_HCurve.hxx> ++#include <BRepAdaptor_Curve.hxx> + + #include "CommandPy.h" + #include "PathPy.h" +diff --git src/Mod/TechDraw/App/Geometry.cpp src/Mod/TechDraw/App/Geometry.cpp +index b6c3637137..59a92d7e51 100644 +--- src/Mod/TechDraw/App/Geometry.cpp ++++ src/Mod/TechDraw/App/Geometry.cpp +@@ -28,13 +28,13 @@ + #include <BRepAdaptor_Curve.hxx> + #include <BRep_Tool.hxx> + #include <BRepTools.hxx> +-#include <BRepAdaptor_HCurve.hxx> + #include <BRepLib.hxx> + #include <BRepBuilderAPI_MakeVertex.hxx> + #include <BRepBuilderAPI_MakeEdge.hxx> + #include <BRepBuilderAPI_MakeWire.hxx> + #include <BRepBuilderAPI_MakeFace.hxx> + #include <BRepExtrema_DistShapeShape.hxx> ++#include <BRepLProp_CLProps.hxx> + #include <Precision.hxx> + #include <GCPnts_AbscissaPoint.hxx> + #include <gce_MakeCirc.hxx> +@@ -58,14 +58,16 @@ + #include <GeomLProp_CLProps.hxx> + #include <GeomAPI_ProjectPointOnCurve.hxx> + #include <Poly_Polygon3D.hxx> ++#include <Standard_Version.hxx> + #include <TopoDS.hxx> + #include <TopoDS_Edge.hxx> + #include <TopExp.hxx> + #include <TopExp_Explorer.hxx> + #include <TColgp_Array1OfPnt2d.hxx> + #include <TColgp_Array1OfPnt.hxx> +-#include <BRepLProp_CLProps.hxx> +- ++#if OCC_VERSION_HEX < 0x070600 ++#include <BRepAdaptor_HCurve.hxx> ++#endif + #include <cmath> + #endif // #ifndef _PreComp_ + +@@ -86,6 +88,10 @@ + using namespace TechDraw; + using namespace std; + ++#if OCC_VERSION_HEX >= 0x070600 ++using BRepAdaptor_HCurve = BRepAdaptor_Curve; ++#endif ++ + #define GEOMETRYEDGE 0 + #define COSMETICEDGE 1 + #define CENTERLINE 2 diff --git a/cad/freecad/files/patch-src_3rdParty_salomesmesh_src_SMESH_SMESH_Mesh.cpp b/cad/freecad/files/patch-src_3rdParty_salomesmesh_src_SMESH_SMESH_Mesh.cpp new file mode 100644 index 000000000000..f88315cbaeb4 --- /dev/null +++ b/cad/freecad/files/patch-src_3rdParty_salomesmesh_src_SMESH_SMESH_Mesh.cpp @@ -0,0 +1,10 @@ +--- src/3rdParty/salomesmesh/src/SMESH/SMESH_Mesh.cpp.orig 2022-01-30 21:22:20.383703000 +0100 ++++ src/3rdParty/salomesmesh/src/SMESH/SMESH_Mesh.cpp 2022-01-30 21:22:56.240456000 +0100 +@@ -64,7 +64,6 @@ + + #include <GEOMUtils.hxx> + +-#undef _Precision_HeaderFile + #include <BRepBndLib.hxx> + #include <BRepPrimAPI_MakeBox.hxx> + #include <Bnd_Box.hxx> diff --git a/cad/freecad/files/patch-src_Mod_Fem_App_FemConstraint.cpp b/cad/freecad/files/patch-src_Mod_Fem_App_FemConstraint.cpp new file mode 100644 index 000000000000..88d9de1b36e6 --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_Fem_App_FemConstraint.cpp @@ -0,0 +1,22 @@ +--- src/Mod/Fem/App/FemConstraint.cpp.orig 2022-02-04 00:04:15.767125000 +0100 ++++ src/Mod/Fem/App/FemConstraint.cpp 2022-02-04 00:04:38.270409000 +0100 +@@ -36,8 +36,6 @@ + # include <BRepAdaptor_Curve.hxx> + # include <GCPnts_AbscissaPoint.hxx> + # include <Adaptor3d_IsoCurve.hxx> +-# include <Adaptor3d_HSurface.hxx> +-# include <BRepAdaptor_HSurface.hxx> + # include <BRepAdaptor_Surface.hxx> + # include <GProp_GProps.hxx> + # include <BRepGProp.hxx> +@@ -248,8 +246,8 @@ + gp_Pnt center; + + // Get an estimate for the number of arrows by finding the average length of curves +- Handle(Adaptor3d_HSurface) hsurf; +- hsurf = new BRepAdaptor_HSurface(surface); ++ Handle(Adaptor3d_Surface) hsurf; ++ hsurf = new BRepAdaptor_Surface(surface); + + Adaptor3d_IsoCurve isoc(hsurf); + try { diff --git a/cad/freecad/files/patch-src_Mod_Fem_App_FemConstraintFixed.cpp b/cad/freecad/files/patch-src_Mod_Fem_App_FemConstraintFixed.cpp new file mode 100644 index 000000000000..319300cae57e --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_Fem_App_FemConstraintFixed.cpp @@ -0,0 +1,11 @@ +--- src/Mod/Fem/App/FemConstraintFixed.cpp.orig 2022-02-03 23:52:01.569143000 +0100 ++++ src/Mod/Fem/App/FemConstraintFixed.cpp 2022-02-03 23:52:36.672029000 +0100 +@@ -32,8 +32,6 @@ + #include <BRepAdaptor_Surface.hxx> + #include <GCPnts_AbscissaPoint.hxx> + #include <Adaptor3d_IsoCurve.hxx> +-#include <Adaptor3d_HSurface.hxx> +-#include <BRepAdaptor_HSurface.hxx> + #include <GProp_GProps.hxx> + #include <BRepGProp.hxx> + #include <TopoDS_Vertex.hxx> diff --git a/cad/freecad/files/patch-src_Mod_MeshPart_App_MeshFlattening.cpp b/cad/freecad/files/patch-src_Mod_MeshPart_App_MeshFlattening.cpp new file mode 100644 index 000000000000..b68142a11254 --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_MeshPart_App_MeshFlattening.cpp @@ -0,0 +1,52 @@ +--- src/Mod/MeshPart/App/MeshFlattening.cpp.orig 2022-02-03 23:13:33.919226000 +0100 ++++ src/Mod/MeshPart/App/MeshFlattening.cpp 2022-02-03 23:30:59.747315000 +0100 +@@ -141,37 +141,37 @@ + if (triangulation.IsNull()) + throw std::runtime_error("null triangulation in face construction"); + ++ Standard_Integer numNodes = triangulation->NbNodes(); ++ Standard_Integer numTriangles = triangulation->NbTriangles(); ++ + // compute uv coordinates + if (triangulation->HasUVNodes()) + { +- const TColgp_Array1OfPnt2d &_uv_nodes = triangulation->UVNodes(); +- this->uv_nodes.resize(triangulation->NbNodes(), 2); ++ this->uv_nodes.resize(numNodes, 2); + i = 0; +- for (Standard_Integer index = _uv_nodes.Lower(); index <= _uv_nodes.Upper(); ++index) ++ for (Standard_Integer index = 1; index <= numNodes; ++index) + { +- const gp_Pnt2d& _uv_node = _uv_nodes.Value(index); ++ const gp_Pnt2d& _uv_node = triangulation->UVNode(index); + this->uv_nodes.row(i) << _uv_node.X(), _uv_node.Y(); + i++; + } + } + // +- const TColgp_Array1OfPnt &_nodes = triangulation->Nodes(); +- this->xyz_nodes.resize(triangulation->NbNodes(), 3); ++ this->xyz_nodes.resize(numNodes, 3); + i = 0; +- for (Standard_Integer index = _nodes.Lower(); index <= _nodes.Upper(); ++index) ++ for (Standard_Integer index = 1; index <= numNodes; ++index) + { +- gp_Pnt _node = _nodes.Value(index); ++ gp_Pnt _node = triangulation->Node(index); + this->xyz_nodes.row(i) << _node.X(), _node.Y(), _node.Z(); + i++; + } + +- const Poly_Array1OfTriangle &_tris = triangulation->Triangles(); +- this->tris.resize(triangulation->NbTriangles(), 3); ++ this->tris.resize(numTriangles, 3); + i = 0; +- for (Standard_Integer index = _tris.Lower(); index <= _tris.Upper(); ++index) ++ for (Standard_Integer index = 1; index <= numTriangles; ++index) + { + int n1, n2, n3; +- Poly_Triangle _tri = _tris.Value(index); ++ Poly_Triangle _tri = triangulation->Triangle(index); + _tri.Get(n1, n2, n3); + this->tris.row(i) << n1-1, n2-1, n3-1; + i++; diff --git a/cad/freecad/files/patch-src_Mod_PartDesign_Gui_ViewProviderAddSub.cpp b/cad/freecad/files/patch-src_Mod_PartDesign_Gui_ViewProviderAddSub.cpp new file mode 100644 index 000000000000..7c7c3c09accd --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_PartDesign_Gui_ViewProviderAddSub.cpp @@ -0,0 +1,21 @@ +--- src/Mod/PartDesign/Gui/ViewProviderAddSub.cpp.orig 2022-03-03 20:43:05.599798000 +0100 ++++ src/Mod/PartDesign/Gui/ViewProviderAddSub.cpp 2022-03-03 21:06:11.466643000 +0100 +@@ -194,8 +194,7 @@ + + // cycling through the poly mesh + const Poly_Array1OfTriangle& Triangles = mesh->Triangles(); +- const TColgp_Array1OfPnt& Nodes = mesh->Nodes(); +- TColgp_Array1OfDir Normals (Nodes.Lower(), Nodes.Upper()); ++ TColgp_Array1OfDir Normals (1, nbNodesInFace); + getNormals(actFace, mesh, Normals); + + for (int g=1;g<=nbTriInFace;g++) { +@@ -211,7 +210,7 @@ + } + + // get the 3 points of this triangle +- gp_Pnt V1(Nodes(N1)), V2(Nodes(N2)), V3(Nodes(N3)); ++ gp_Pnt V1(mesh->Node(N1)), V2(mesh->Node(N2)), V3(mesh->Node(N3)); + + // get the 3 previewNormals of this triangle + gp_Dir NV1(Normals(N1)), NV2(Normals(N2)), NV3(Normals(N3)); diff --git a/cad/freecad/files/patch-src_Mod_PartDesign_Gui_ViewProviderTransformed.cpp b/cad/freecad/files/patch-src_Mod_PartDesign_Gui_ViewProviderTransformed.cpp new file mode 100644 index 000000000000..2e2c02a95065 --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_PartDesign_Gui_ViewProviderTransformed.cpp @@ -0,0 +1,19 @@ +--- src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp.orig 2022-03-03 21:21:36.816245000 +0100 ++++ src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp 2022-03-03 21:22:41.559121000 +0100 +@@ -285,7 +285,6 @@ + + // cycling through the poly mesh + const Poly_Array1OfTriangle& Triangles = mesh->Triangles(); +- const TColgp_Array1OfPnt& Nodes = mesh->Nodes(); + for (int g=1; g <= nbTriInFace; g++) { + // Get the triangle + Standard_Integer N1,N2,N3; +@@ -299,7 +298,7 @@ + } + + // get the 3 points of this triangle +- gp_Pnt V1(Nodes(N1)), V2(Nodes(N2)), V3(Nodes(N3)); ++ gp_Pnt V1(mesh->Node(N1)), V2(mesh->Node(N2)), V3(mesh->Node(N3)); + + // transform the vertices to the place of the face + if (!identity) { diff --git a/cad/freecad/files/patch-src_Mod_Part_App_AppPartPy.cpp b/cad/freecad/files/patch-src_Mod_Part_App_AppPartPy.cpp new file mode 100644 index 000000000000..dc95388b984e --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_Part_App_AppPartPy.cpp @@ -0,0 +1,29 @@ +--- src/Mod/Part/App/AppPartPy.cpp.orig 2022-01-30 22:29:02.026790000 +0100 ++++ src/Mod/Part/App/AppPartPy.cpp 2022-01-30 22:50:54.044159000 +0100 +@@ -804,14 +804,26 @@ + const TopAbs_Orientation anOrientation = currentFace.Orientation(); + bool flip = (anOrientation == TopAbs_REVERSED); + if (!facets.IsNull()) { ++#if OCC_VERSION_HEX < 0x070600 + const TColgp_Array1OfPnt& nodes = facets->Nodes(); + const Poly_Array1OfTriangle& triangles = facets->Triangles(); + for (int i = 1; i <= triangles.Length(); i++) { ++#else ++ int nbtri = facets->NbTriangles(); ++ for (int i = 1; i <= nbtri; i++) { ++#endif + Standard_Integer n1,n2,n3; ++#if OCC_VERSION_HEX < 0x070600 + triangles(i).Get(n1, n2, n3); + gp_Pnt p1 = nodes(n1); + gp_Pnt p2 = nodes(n2); + gp_Pnt p3 = nodes(n3); ++#else ++ facets->Triangle(i).Get(n1, n2, n3); ++ gp_Pnt p1 = facets->Node(n1); ++ gp_Pnt p2 = facets->Node(n2); ++ gp_Pnt p3 = facets->Node(n3); ++#endif + p1.Transform(loc.Transformation()); + p2.Transform(loc.Transformation()); + p3.Transform(loc.Transformation()); diff --git a/cad/freecad/files/patch-src_Mod_Part_App_Tools.cpp b/cad/freecad/files/patch-src_Mod_Part_App_Tools.cpp new file mode 100644 index 000000000000..191d1c081f35 --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_Part_App_Tools.cpp @@ -0,0 +1,45 @@ +--- src/Mod/Part/App/Tools.cpp.orig 2022-02-03 20:59:16.862252000 +0100 ++++ src/Mod/Part/App/Tools.cpp 2022-02-03 21:43:13.008464000 +0100 +@@ -25,10 +25,9 @@ + # include <cassert> + # include <gp_Pln.hxx> + # include <gp_Lin.hxx> +-# include <Adaptor3d_HCurveOnSurface.hxx> + # include <Geom_BSplineSurface.hxx> + # include <Geom_Plane.hxx> +-# include <GeomAdaptor_HCurve.hxx> ++# include <GeomAdaptor_Curve.hxx> + # include <GeomAPI_IntSS.hxx> + # include <Geom_Line.hxx> + # include <Geom_Point.hxx> +@@ -98,8 +97,8 @@ + return found; + } + +-/*! The objects in \a theBoundaries must be of the type Adaptor3d_HCurveOnSurface or +-GeomAdaptor_HCurve or Geom_Point indicating type of a constraint. Otherwise an exception ++/*! The objects in \a theBoundaries must be of the type Adaptor3d_CurveOnSurface or ++GeomAdaptor_Curve or Geom_Point indicating type of a constraint. Otherwise an exception + Standard_TypeMismatch is thrown. + + If the \a theBoundaries list is empty then Standard_ConstructionError is thrown. +@@ -138,15 +137,15 @@ + assert (0); + Standard_ConstructionError::Raise ("Tools::makeSurface()"); + } +- else if (aCur->IsKind (STANDARD_TYPE (Adaptor3d_HCurveOnSurface))) { ++ else if (aCur->IsKind (STANDARD_TYPE (Adaptor3d_CurveOnSurface))) { + //G1 constraint +- Handle(Adaptor3d_HCurveOnSurface) aHCOS (Handle(Adaptor3d_HCurveOnSurface)::DownCast (aCur)); ++ Handle(Adaptor3d_CurveOnSurface) aHCOS (Handle(Adaptor3d_CurveOnSurface)::DownCast (aCur)); + Handle (GeomPlate_CurveConstraint) aConst = new GeomPlate_CurveConstraint (aHCOS, 1 /*GeomAbs_G1*/,aNbPnts, aTol3d, anAngTol, aCurvTol); + aPlateBuilder.Add (aConst); + } +- else if (aCur->IsKind (STANDARD_TYPE (GeomAdaptor_HCurve))) { ++ else if (aCur->IsKind (STANDARD_TYPE (GeomAdaptor_Curve))) { + //G0 constraint +- Handle(GeomAdaptor_HCurve) aHC (Handle(GeomAdaptor_HCurve)::DownCast (aCur)); ++ Handle(GeomAdaptor_Curve) aHC (Handle(GeomAdaptor_Curve)::DownCast (aCur)); + Handle (GeomPlate_CurveConstraint) aConst = new GeomPlate_CurveConstraint (aHC, 0 /*GeomAbs_G0*/, aNbPnts, aTol3d); + aPlateBuilder.Add (aConst); + } diff --git a/cad/freecad/files/patch-src_Mod_Part_App_TopoShape.cpp b/cad/freecad/files/patch-src_Mod_Part_App_TopoShape.cpp new file mode 100644 index 000000000000..51285e1c05f4 --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_Part_App_TopoShape.cpp @@ -0,0 +1,146 @@ +--- src/Mod/Part/App/TopoShape.cpp.orig 2022-02-03 21:51:04.000000000 +0100 ++++ src/Mod/Part/App/TopoShape.cpp 2022-02-03 22:55:05.882488000 +0100 +@@ -38,8 +38,6 @@ + # include <BRep_Tool.hxx> + # include <BRepAdaptor_Curve.hxx> + # include <BRepAdaptor_CompCurve.hxx> +-# include <BRepAdaptor_HCurve.hxx> +-# include <BRepAdaptor_HCompCurve.hxx> + # include <BRepAdaptor_Surface.hxx> + # include <BRepAlgoAPI_Common.hxx> + # include <BRepAlgoAPI_Cut.hxx> +@@ -1122,10 +1120,10 @@ + // check orientation + TopAbs_Orientation orient = aFace.Orientation(); + ++ nbTriInFace = aPoly->NbTriangles(); + // cycling through the poly mesh + const Poly_Array1OfTriangle& Triangles = aPoly->Triangles(); +- const TColgp_Array1OfPnt& Nodes = aPoly->Nodes(); +- for (int i=1;i<=nbTriInFace;i++) { ++ for (int i=1; i<=nbTriInFace; i++) { + // Get the triangle + Standard_Integer N1,N2,N3; + Triangles(i).Get(N1,N2,N3); +@@ -1137,9 +1135,9 @@ + N2 = tmp; + } + +- gp_Pnt V1 = Nodes(N1); +- gp_Pnt V2 = Nodes(N2); +- gp_Pnt V3 = Nodes(N3); ++ gp_Pnt V1 = aPoly->Node(N1); ++ gp_Pnt V2 = aPoly->Node(N2); ++ gp_Pnt V3 = aPoly->Node(N3); + + // transform the vertices to the place of the face + if (!identity) { +@@ -1193,6 +1191,7 @@ + + std::vector<Base::Vector3f> vertices; + Standard_Integer nbNodesInFace; ++ Standard_Integer nbNodesInTria; + + // triangulation succeeded? + if (!aPoly.IsNull()) { +@@ -1233,16 +1232,14 @@ + + // getting size and create the array + nbNodesInFace = aPoly->NbNodes(); ++ nbNodesInTria = aPolyTria->NbNodes(); + vertices.resize(nbNodesInFace); + +- const TColStd_Array1OfInteger& indices = aPoly->Nodes(); +- const TColgp_Array1OfPnt& Nodes = aPolyTria->Nodes(); +- + gp_Pnt V; + int pos = 0; + // go through the index array +- for (Standard_Integer i=indices.Lower();i <= indices.Upper();i++) { +- V = Nodes(indices(i)); ++ for (Standard_Integer i=1; i<=nbNodesInTria; i++) { ++ V = aPolyTria->Node(i); + V.Transform(myTransf); + vertices[pos++].Set((float)(V.X()),(float)(V.Y()),(float)(V.Z())); + } +@@ -2215,12 +2212,20 @@ + if (this->_Shape.IsNull()) + Standard_Failure::Raise("Cannot sweep along empty spine"); + ++#if OCC_VERSION_HEX >= 0x070600 ++ Handle(Adaptor3d_Curve) myPath; ++ if (this->_Shape.ShapeType() == TopAbs_EDGE) { ++ const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); ++ myPath = new BRepAdaptor_Curve(path_edge); ++ } ++#else + Handle(Adaptor3d_HCurve) myPath; + if (this->_Shape.ShapeType() == TopAbs_EDGE) { + const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); + BRepAdaptor_Curve path_adapt(path_edge); + myPath = new BRepAdaptor_HCurve(path_adapt); + } ++#endif + //else if (this->_Shape.ShapeType() == TopAbs_WIRE) { + // const TopoDS_Wire& path_wire = TopoDS::Wire(this->_Shape); + // BRepAdaptor_CompCurve path_adapt(path_wire); +@@ -3401,10 +3406,10 @@ + + Domain domain; + // copy the points +- const TColgp_Array1OfPnt& points = theTriangulation->Nodes(); +- domain.points.reserve(points.Length()); +- for (int i = 1; i <= points.Length(); i++) { +- gp_Pnt p = points(i); ++ int nbptintria = theTriangulation->NbNodes(); ++ domain.points.reserve(nbptintria); ++ for (int i = 1; i <= nbptintria; i++) { ++ gp_Pnt p = theTriangulation->Node(i); + p.Transform(loc.Transformation()); + Standard_Real X, Y, Z; + p.Coord (X, Y, Z); +@@ -3414,11 +3419,11 @@ + // copy the triangles + const TopAbs_Orientation anOrientation = face.Orientation(); + bool flip = (anOrientation == TopAbs_REVERSED); +- const Poly_Array1OfTriangle& faces = theTriangulation->Triangles(); +- domain.facets.reserve(faces.Length()); +- for (int i = 1; i <= faces.Length(); i++) { ++ int nbtri = theTriangulation->NbTriangles(); ++ domain.facets.reserve(nbtri); ++ for (int i = 1; i <= nbtri; i++) { + Standard_Integer N1, N2, N3; +- faces(i).Get(N1, N2, N3); ++ theTriangulation->Triangle(i).Get(N1, N2, N3); + + Facet tria; + tria.I1 = N1-1; tria.I2 = N2-1; tria.I3 = N3-1; +@@ -3774,8 +3779,8 @@ + const TColgp_Array1OfPnt& Nodes = aPoly->Nodes(); + + gp_Pnt V; +- for (Standard_Integer i=0;i < nbNodesInFace;i++) { +- V = Nodes(i+1); ++ for (Standard_Integer i=1; i <= nbNodesInFace; i++) { ++ V = Nodes(i); + V.Transform(myTransf); + vertices.emplace_back(V.X(),V.Y(),V.Z()); + } +@@ -3808,14 +3813,12 @@ + + // getting size and create the array + nbNodesInFace = aPoly->NbNodes(); ++ int nbNodesInTria = aPolyTria->NbNodes(); + +- const TColStd_Array1OfInteger& indices = aPoly->Nodes(); +- const TColgp_Array1OfPnt& Nodes = aPolyTria->Nodes(); +- + gp_Pnt V; + // go through the index array +- for (Standard_Integer i=indices.Lower();i <= indices.Upper();i++) { +- V = Nodes(indices(i)); ++ for (Standard_Integer i=1 ;i <= nbNodesInTria; i++) { ++ V = aPolyTria->Node(i); + V.Transform(myTransf); + vertices.emplace_back(V.X(),V.Y(),V.Z()); + } diff --git a/cad/freecad/files/patch-src_Mod_Part_Gui_ViewProviderExt.cpp b/cad/freecad/files/patch-src_Mod_Part_Gui_ViewProviderExt.cpp new file mode 100644 index 000000000000..197253155500 --- /dev/null +++ b/cad/freecad/files/patch-src_Mod_Part_Gui_ViewProviderExt.cpp @@ -0,0 +1,81 @@ +--- src/Mod/Part/Gui/ViewProviderExt.cpp.orig 2022-03-02 17:15:16.283319000 +0100 ++++ src/Mod/Part/Gui/ViewProviderExt.cpp 2022-03-02 23:49:04.036080000 +0100 +@@ -137,26 +137,17 @@ + const Handle(Poly_Triangulation)& aPolyTri, + TColgp_Array1OfDir& theNormals) + { +- const TColgp_Array1OfPnt& aNodes = aPolyTri->Nodes(); +- + if(aPolyTri->HasNormals()) + { + // normals pre-computed in triangulation structure +- const TShort_Array1OfShortReal& aNormals = aPolyTri->Normals(); +- const Standard_ShortReal* aNormArr = &(aNormals.Value(aNormals.Lower())); +- +- for(Standard_Integer aNodeIter = aNodes.Lower(); aNodeIter <= aNodes.Upper(); ++aNodeIter) ++ for(Standard_Integer aNodeIter = 1; aNodeIter <= aPolyTri->NbNodes(); ++aNodeIter) + { +- const Standard_Integer anId = 3 * (aNodeIter - aNodes.Lower()); +- const gp_Dir aNorm(aNormArr[anId + 0], +- aNormArr[anId + 1], +- aNormArr[anId + 2]); +- theNormals(aNodeIter) = aNorm; ++ theNormals(aNodeIter) = aPolyTri->Normal(aNodeIter); + } *** 86 LINES SKIPPED ***