From: Stuart Henderson Subject: Re: [update] cad/freecad 1.1.0 -> 1.1.4 (was 1.1.3) To: Johannes Thyssen Tishman , ports@openbsd.org, "Heppler, J. Scott" Date: Mon, 12 Oct 2026 16:19:46 +0100 On 2026/10/11 18:22, Johannes Thyssen Tishman wrote: > Please find below a update for cad/freecad to version 1.1.3. > > This update includes two security fixes addressing file-handling > vulnerabilities that can be triggered by opening a maliciously crafted > FCStd file. Should/Can this be backported to -stable? lgtm. backporting to OPENBSD_8_0 makes sense. > > Changelog(s): > https://github.com/FreeCAD/FreeCAD/releases/tag/1.1.4 > https://github.com/FreeCAD/FreeCAD/releases/tag/1.1.3 > https://github.com/FreeCAD/FreeCAD/releases/tag/1.1.2 > https://github.com/FreeCAD/FreeCAD/releases/tag/1.1.1 > > Notes about this update: > 1. Shared libraries not bumped due to 'No dynamic export changes' > 2. Only patch removals, no additions :) > 3. A systems' PyCXX can now be used. Keep using bundled version as no > port exists yet. > 4. I found a bug when trying to import DWG files (using a WIP libredwg > port from Chris Billington) or starting tests in the Test Framework > workbench that causes FreeCAD to SEGFAULT (reproduced on versions > 1.1.0, 1.1.3 and 1.1.4). I'm still working on a port that builds from > HEAD to check if it's been fixed upstream. > > Feedback, tests, Ok? > > Index: cad/freecad//Makefile > =================================================================== > RCS file: /cvs/ports/cad/freecad/Makefile,v > diff -u -p -r1.17 Makefile > --- cad/freecad//Makefile 17 Sep 2026 15:33:11 -0000 1.17 > +++ cad/freecad//Makefile 11 Oct 2026 18:08:11 -0000 > @@ -4,10 +4,9 @@ DPB_PROPERTIES = parallel parallel2 > > COMMENT = general purpose parametric 3D CAD modeler > > -V = 1.1.0 > +V = 1.1.4 > DISTNAME = freecad_source_${V} > PKGNAME = freecad-${V} > -REVISION = 1 > > SHARED_LIBS += OndselSolver 2.0 # 0.0 > SHARED_LIBS += E57Format 0.0 # 0.0 > @@ -19,13 +18,13 @@ MAINTAINER = Johannes Thyssen Tishman < > # LGPLv2+ > PERMIT_PACKAGE = Yes > > -WANTLIB += ${COMPILER_LIBCXX} Coin GL GLU Qt6Concurrent Qt6Core > -WANTLIB += Qt6Gui Qt6Network Qt6OpenGL Qt6OpenGLWidgets Qt6PrintSupport > -WANTLIB += Qt6Svg Qt6SvgWidgets Qt6UiTools Qt6Widgets Qt6Xml TKBO > -WANTLIB += TKBRep TKBin TKBinL TKBool TKCAF TKCDF TKDE TKDEGLTF > -WANTLIB += TKDEIGES TKDESTEP TKDESTL TKExpress TKFeat TKFillet > -WANTLIB += TKG2d TKG3d TKGeomAlgo TKGeomBase TKHLR TKLCAF TKMath > -WANTLIB += TKMesh TKMeshVS TKOffset TKPrim TKRWMesh TKService > +WANTLIB += ${COMPILER_LIBCXX} ${MODPY_WANTLIB} Coin GL GLU Qt6Concurrent > +WANTLIB += Qt6Core Qt6Gui Qt6Network Qt6OpenGL Qt6OpenGLWidgets > +WANTLIB += Qt6PrintSupport Qt6Svg Qt6SvgWidgets Qt6UiTools Qt6Widgets > +WANTLIB += Qt6Xml TKBO TKBRep TKBin TKBinL TKBool TKCAF TKCDF > +WANTLIB += TKDE TKDEGLTF TKDEIGES TKDESTEP TKDESTL TKExpress TKFeat > +WANTLIB += TKFillet TKG2d TKG3d TKGeomAlgo TKGeomBase TKHLR TKLCAF > +WANTLIB += TKMath TKMesh TKMeshVS TKOffset TKPrim TKRWMesh TKService > WANTLIB += TKShHealing TKTopAlgo TKV3d TKVCAF TKXCAF TKXSBase > WANTLIB += TKernel boost_atomic-mt boost_chrono-mt boost_container-mt > WANTLIB += boost_date_time-mt boost_filesystem-mt boost_iostreams-mt > @@ -34,22 +33,20 @@ WANTLIB += boost_serialization-mt boost_ > WANTLIB += freetype hdf5 hdf5_hl icui18n icuuc m med medC pcl_common > WANTLIB += pcl_features pcl_filters pcl_kdtree pcl_ml pcl_octree > WANTLIB += pcl_sample_consensus pcl_search pcl_segmentation pcl_surface > -WANTLIB += pyside6.abi3 ${MODPY_WANTLIB} scn shiboken6.abi3 vtkCommonCore > -WANTLIB += vtkCommonDataModel vtkCommonExecutionModel vtkCommonMath > -WANTLIB += vtkCommonMisc vtkCommonTransforms vtkFiltersCellGrid > -WANTLIB += vtkFiltersCore vtkFiltersExtraction vtkFiltersGeneral > -WANTLIB += vtkFiltersGeometry vtkFiltersSources vtkFiltersVerdict > -WANTLIB += vtkIOCellGrid vtkIOCore vtkIOImage vtkIOLegacy vtkIOXML > -WANTLIB += vtkIOXMLParser vtkImagingCore vtkInteractionStyle vtkRenderingCore > -WANTLIB += vtkRenderingFreeType vtkRenderingHyperTreeGrid vtkRenderingOpenGL2 > +WANTLIB += pyside6.abi3 scn shiboken6.abi3 vtkCommonCore vtkCommonDataModel > +WANTLIB += vtkCommonExecutionModel vtkCommonMath vtkCommonMisc > +WANTLIB += vtkCommonTransforms vtkFiltersCellGrid vtkFiltersCore > +WANTLIB += vtkFiltersExtraction vtkFiltersGeneral vtkFiltersGeometry > +WANTLIB += vtkFiltersSources vtkFiltersVerdict vtkIOCellGrid vtkIOCore > +WANTLIB += vtkIOImage vtkIOLegacy vtkIOXML vtkIOXMLParser vtkImagingCore > +WANTLIB += vtkInteractionStyle vtkRenderingCore vtkRenderingFreeType > +WANTLIB += vtkRenderingHyperTreeGrid vtkRenderingLabel vtkRenderingOpenGL2 > WANTLIB += vtkRenderingUI vtkglad vtkkissfft vtksys vtktoken vtkx11 > WANTLIB += xerces-c yaml-cpp z > > SITES = https://github.com/FreeCAD/FreeCAD/releases/download/${V}/ > > -FIX_CRLF_FILES = src/Gui/View3DInventor.cpp \ > - src/Gui/ViewProvider.h \ > - src/Mod/Sketcher/App/GeoEnum.h > +FIX_CRLF_FILES = src/Mod/Sketcher/App/GeoEnum.h > > COMPILER = base-clang ports-gcc > MODULES = devel/cmake \ > @@ -109,12 +106,11 @@ LIB_DEPENDS = ${MODPY_LIB_DEPENDS} \ > # SMESH: part of salome suite and difficult to package > # https://forum.freecad.org/viewtopic.php?p=715795#p715795 > # Onsdel: Constraints solver specifically made for FreeCAD > -# PyCXX: modified by FreeCAD (no switch needed) > -# https://github.com/FreeCAD/FreeCAD/commit/a16eec8 > # orocos-kdl: modified by FreeCAD > # https://github.com/FreeCAD/FreeCAD/blob/main/src/Mod/Robot/App/CMakeLists.txt#L77 > CONFIGURE_ARGS += -DFREECAD_USE_EXTERNAL_FMT=ON \ > -DFREECAD_USE_EXTERNAL_PIVY=ON \ > + -DFREECAD_USE_EXTERNAL_PYCXX=OFF \ > -DFREECAD_USE_EXTERNAL_GTEST=ON \ > -DFREECAD_USE_EXTERNAL_KDL=OFF \ > -DFREECAD_USE_EXTERNAL_ZIPIOS=OFF \ > Index: cad/freecad//distinfo > =================================================================== > RCS file: /cvs/ports/cad/freecad/distinfo,v > diff -u -p -r1.3 distinfo > --- cad/freecad//distinfo 16 May 2026 15:13:20 -0000 1.3 > +++ cad/freecad//distinfo 11 Oct 2026 18:08:11 -0000 > @@ -1,2 +1,2 @@ > -SHA256 (freecad_source_1.1.0.tar.gz) = PQQVYaoSl1XupR38DhzfQ/JiOrBlOOCGCpHb7xrkM9c= > -SIZE (freecad_source_1.1.0.tar.gz) = 98114570 > +SHA256 (freecad_source_1.1.4.tar.gz) = Z08sQtwGC3HIsFLHCwSpqZXd5suGj+VoYV0/8/Jxd0g= > +SIZE (freecad_source_1.1.4.tar.gz) = 98203668 > Index: cad/freecad//files/Version.h > =================================================================== > RCS file: /cvs/ports/cad/freecad/files/Version.h,v > diff -u -p -r1.3 Version.h > --- cad/freecad//files/Version.h 16 May 2026 15:13:20 -0000 1.3 > +++ cad/freecad//files/Version.h 11 Oct 2026 18:08:11 -0000 > @@ -3,16 +3,16 @@ > #define FCVersionMajor "1" > #define FCVersionMinor "1" > #define FCVersionName "" > -#define FCVersionPoint "0" > +#define FCVersionPoint "4" > #define FCVersionSuffix "" > // Displayed Copyright Year (i.e. build year) > #define FCCopyrightYear 2026 > // test: $Format:Hash (%H), Date: %ci$ > -#define FCRevision "44795 (Git)" //Highest committed revision number > -#define FCRevisionDate "2026/03/25 02:17:53" //Date of highest committed revision > +#define FCRevision "45040 (Git)" //Highest committed revision number > +#define FCRevisionDate "2026/09/28 13:46:34" //Date of highest committed revision > #define FCRepositoryURL "Unknown" //Repository URL of the working copy > > // Git relevant stuff > -#define FCRepositoryHash "34a9716668b1ddeb55b914f1c5be644826bdbbbf" > -#define FCRepositoryBranch "tag: 1.1.0" > +#define FCRepositoryHash "4fd3bf320d9566a27e60069fc8387448aaa3a094" > +#define FCRepositoryBranch "tag: 1.1.4" > > Index: cad/freecad//patches/patch-cMake_FreeCAD_Helpers_SetupCoin3D_cmake > =================================================================== > RCS file: cad/freecad//patches/patch-cMake_FreeCAD_Helpers_SetupCoin3D_cmake > diff -N cad/freecad//patches/patch-cMake_FreeCAD_Helpers_SetupCoin3D_cmake > --- cad/freecad//patches/patch-cMake_FreeCAD_Helpers_SetupCoin3D_cmake 8 Jul 2026 10:46:06 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,15 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: e3e56059865849c6b1c85161f69183ad872414e3 > - > -Index: cMake/FreeCAD_Helpers/SetupCoin3D.cmake > ---- cMake/FreeCAD_Helpers/SetupCoin3D.cmake.orig > -+++ cMake/FreeCAD_Helpers/SetupCoin3D.cmake > -@@ -29,7 +29,7 @@ macro(SetupCoin3D) > - set(COIN3D_MAJOR_VERSION "${CMAKE_MATCH_1}") > - string(REGEX MATCH "define[ \t]+COIN_MINOR_VERSION[ \t]+([0-9?])" _coin3d_minor_version_match "${_coin3d_basic_h}") > - set(COIN3D_MINOR_VERSION "${CMAKE_MATCH_1}") > -- string(REGEX MATCH "define[ \t]+COIN_MICRO_VERSION[ \t]+([0-9?])" _coin3d_micro_version_match "${_coin3d_basic_h}") > -+ string(REGEX MATCH "define[ \t]+COIN_MICRO_VERSION[ \t]+([0-9?]+)" _coin3d_micro_version_match "${_coin3d_basic_h}") > - set(COIN3D_MICRO_VERSION "${CMAKE_MATCH_1}") > - set(COIN3D_VERSION "${COIN3D_MAJOR_VERSION}.${COIN3D_MINOR_VERSION}.${COIN3D_MICRO_VERSION}") > - ENDIF () > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_MeshElement_hxx > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_MeshElement_hxx > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_MeshElement_hxx > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_MeshElement_hxx 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,18 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > - > -Index: src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx > ---- src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx.orig > -+++ src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx > -@@ -45,11 +45,7 @@ > - //typedef unsigned short UShortType; > - typedef short ShortType; > - typedef int LongType; > --#ifdef VTK_CELL_ARRAY_V2 > - typedef const vtkIdType* vtkIdTypePtr; > --#else > --typedef vtkIdType* vtkIdTypePtr; > --#endif > - class SMDS_MeshNode; > - class SMDS_MeshEdge; > - class SMDS_MeshFace; > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_UnstructuredGrid_hxx > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_UnstructuredGrid_hxx > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_UnstructuredGrid_hxx > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_inc_SMDS_UnstructuredGrid_hxx 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,32 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > -Commit: c9acda2a659f9ac079fefd2c0b8d6ff9c8a8238e > - > -Index: src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx > ---- src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx.orig > -+++ src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx > -@@ -28,6 +28,7 @@ > - > - #include > - #include > -+#include > - > - #include > - #include > -@@ -95,14 +96,10 @@ class SMDS_EXPORT SMDS_UnstructuredGrid: public vtkUns > - std::map >& nodeQuadDomains); > - vtkCellLinks* GetLinks() > - { > --#ifdef VTK_CELL_ARRAY_V2 > -- #if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - return static_cast(vtkUnstructuredGrid::GetLinks()); > -- #else > -- return static_cast(GetCellLinks()); > -- #endif > - #else > -- return Links; > -+ return static_cast(GetCellLinks()); > - #endif > - } > - SMDS_Downward* getDownArray(unsigned char vtkType) > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_BallElement_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_BallElement_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_BallElement_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_BallElement_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,23 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp > -@@ -67,16 +67,9 @@ void SMDS_BallElement::SetDiameter(double diameter) > - bool SMDS_BallElement::ChangeNode (const SMDS_MeshNode * node) > - { > - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); > --#ifdef VTK_CELL_ARRAY_V2 > - vtkNew cellPoints; > - grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); > - cellPoints->SetId(0, node->getVtkId()); > --#else > -- vtkIdType npts = 0; > -- vtkIdType* pts = 0; > -- grid->GetCellPoints(myVtkID, npts, pts); > -- pts[0] = node->getVtkId(); > --#endif > - SMDS_Mesh::_meshList[myMeshId]->setMyModified(); > - return true; > - } > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh0DElement_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh0DElement_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh0DElement_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh0DElement_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,33 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp > -@@ -146,7 +146,6 @@ bool SMDS_Mesh0DElement::ChangeNodes(const SMDS_MeshNo > - if ( nbNodes == 1 ) > - { > - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); > --#ifdef VTK_CELL_ARRAY_V2 > - vtkNew cellPoints; > - grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); > - if (nbNodes != cellPoints->GetNumberOfIds()) > -@@ -156,18 +155,6 @@ bool SMDS_Mesh0DElement::ChangeNodes(const SMDS_MeshNo > - } > - myNode = nodes[0]; > - cellPoints->SetId(0, myNode->getVtkId()); > --#else > -- vtkIdType npts = 0; > -- vtkIdType* pts = 0; > -- grid->GetCellPoints(myVtkID, npts, pts); > -- if (nbNodes != npts) > -- { > -- MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes); > -- return false; > -- } > -- myNode = nodes[0]; > -- pts[0] = myNode->getVtkId(); > --#endif > - > - SMDS_Mesh::_meshList[myMeshId]->setMyModified(); > - return true; > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_MeshNode_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_MeshNode_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_MeshNode_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_MeshNode_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,68 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: c9acda2a659f9ac079fefd2c0b8d6ff9c8a8238e > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp > -@@ -31,6 +31,7 @@ > - #include "SMDS_IteratorOfElements.hxx" > - #include "SMDS_Mesh.hxx" > - #include > -+#include > - > - #include "utilities.h" > - #include "Utils_SALOME_Exception.hxx" > -@@ -69,7 +70,7 @@ void SMDS_MeshNode::init(int id, int meshId, int shape > - SMDS_UnstructuredGrid * grid = mesh->getGrid(); > - vtkPoints *points = grid->GetPoints(); > - points->InsertPoint(myVtkID, x, y, z); > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - SMDS_CellLinks *cellLinks = dynamic_cast(grid->GetLinks()); > - #else > - SMDS_CellLinks *cellLinks = dynamic_cast(grid->GetCellLinks()); > -@@ -195,7 +196,7 @@ class SMDS_MeshNode_MyInvIterator: public SMDS_ElemIte > - SMDS_ElemIteratorPtr SMDS_MeshNode:: > - GetInverseElementIterator(SMDSAbs_ElementType type) const > - { > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); > - #else > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); > -@@ -259,7 +260,7 @@ elementsIterator(SMDSAbs_ElementType type) const > - return SMDS_MeshElement::elementsIterator(SMDSAbs_Node); > - else > - { > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); > - #else > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); > -@@ -362,7 +363,7 @@ void SMDS_MeshNode::AddInverseElement(const SMDS_MeshE > - const SMDS_MeshCell *cell = dynamic_cast (ME); > - assert(cell); > - SMDS_UnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks *Links = static_cast(grid->GetLinks()); > - #else > - vtkCellLinks *Links = static_cast(grid->GetCellLinks()); > -@@ -382,7 +383,7 @@ void SMDS_MeshNode::ClearInverseElements() > - > - bool SMDS_MeshNode::emptyInverseElements() > - { > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); > - #else > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); > -@@ -398,7 +399,7 @@ bool SMDS_MeshNode::emptyInverseElements() > - > - int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const > - { > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); > - #else > - vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_Mesh_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,357 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > -Commit: c9acda2a659f9ac079fefd2c0b8d6ff9c8a8238e > -Commit: 3a68d91ae306d88703d203d2ac8d41b2e5ce12dd > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp > -@@ -53,6 +53,7 @@ > - #include > - #include > - #include > -+#include > - > - #include > - #include > -@@ -283,7 +284,11 @@ SMDS_BallElement* SMDS_Mesh::AddBallWithID(const SMDS_ > - ball->init(n->getVtkId(), diameter, this); > - if (!this->registerElement(ID,ball)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(ball->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(ball->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myBallPool->destroy(ball); > - return 0; > - } > -@@ -343,7 +348,11 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_Mes > - edgevtk->init(nodeIds, this); > - if (!this->registerElement(ID,edgevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(edgevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(edgevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myEdgePool->destroy(edgevtk); > - return 0; > - } > -@@ -627,7 +636,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -734,7 +747,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -847,7 +864,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -982,7 +1003,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -1104,7 +1129,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -1307,7 +1336,11 @@ SMDS_Mesh::AddPolygonalFaceWithID (const vector - facevtk->initPoly(myNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -1372,7 +1405,11 @@ SMDS_Mesh::AddQuadPolygonalFaceWithID (const vector - facevtk->initQuadPoly(myNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -1452,7 +1489,11 @@ SMDS_Mesh::AddPolyhedralVolumeWithID (const vector - volvtk->initPoly(myNodeIds, quantities, this); > - if (!this->registerElement(ID, volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -1508,7 +1549,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeFromVtkIdsWithID( > - volvtk->init(vtkNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -1567,7 +1612,11 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceFromVtkIdsWithID(cons > - facevtk->init(vtkNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -1715,7 +1764,11 @@ SMDS_MeshFace * SMDS_Mesh::createTriangle(const SMDS_M > - facevtk->init(myNodeIds, this); // put in vtkUnstructuredGrid > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -1769,7 +1822,11 @@ SMDS_MeshFace * SMDS_Mesh::createQuadrangle(const SMDS > - facevtk->init(myNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -2100,7 +2157,11 @@ SMDS_MeshEdge* SMDS_Mesh::FindEdgeOrCreate(const SMDS_ > - edgevtk->init(myNodeIds, this); > - if (!this->registerElement(ID,edgevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(edgevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(edgevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myEdgePool->destroy(edgevtk); > - return 0; > - } > -@@ -3311,7 +3372,11 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * > - if (vtkid >= 0) > - { > - //MESSAGE("VTK_EMPTY_CELL in " << vtkid); > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(vtkid, VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(vtkid, VTK_EMPTY_CELL); > -+#endif > - } > - it++; > - } > -@@ -3416,7 +3481,11 @@ void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshEleme > - } > - myElementIDFactory->ReleaseID(elemId, vtkId); > - > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(vtkId, VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(vtkId, VTK_EMPTY_CELL); > -+#endif > - // --- to do: keep vtkid in a list of reusable cells > - } > - } > -@@ -3598,7 +3667,11 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_Mes > - edgevtk->init(myNodeIds, this); > - if (!this->registerElement(ID,edgevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(edgevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(edgevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myEdgePool->destroy(edgevtk); > - return 0; > - } > -@@ -3681,7 +3754,11 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_Mes > - facevtk->init(myNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -3768,7 +3845,11 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_Mes > - facevtk->init(myNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -3859,7 +3940,11 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_Mes > - facevtk->init(myNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -3953,7 +4038,11 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_Mes > - facevtk->init(myNodeIds, this); > - if (!this->registerElement(ID,facevtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(facevtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myFacePool->destroy(facevtk); > - return 0; > - } > -@@ -4056,7 +4145,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -4171,7 +4264,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -4298,7 +4395,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -4445,7 +4546,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -4625,7 +4730,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS > - volvtk->init(myNodeIds, this); > - if (!this->registerElement(ID,volvtk)) > - { > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 5, 20251004) > -+ this->myGrid->GetCellTypes()->SetTuple1(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#else > - this->myGrid->GetCellTypesArray()->SetValue(volvtk->getVtkId(), VTK_EMPTY_CELL); > -+#endif > - myVolumePool->destroy(volvtk); > - return 0; > - } > -@@ -4712,14 +4821,10 @@ void SMDS_Mesh::dumpGrid(string ficdump) > - ficcon << endl; > - } > - ficcon << "-------------------------------- connectivity " << nbPoints << endl; > --#ifdef VTK_CELL_ARRAY_V2 > -- #if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks *links = static_cast(myGrid->GetLinks()); > -- #else > -- vtkCellLinks *links = static_cast(myGrid->GetCellLinks()); > -- #endif > - #else > -- vtkCellLinks *links = myGrid->GetCellLinks(); > -+ vtkCellLinks *links = static_cast(myGrid->GetCellLinks()); > - #endif > - for (int i=0; i - { > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_UnstructuredGrid_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_UnstructuredGrid_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_UnstructuredGrid_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_UnstructuredGrid_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,230 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > -Commit: ff3e419d2ea4603ed8a28d3777f0d75b2a2af194 > -Commit: 3a68d91ae306d88703d203d2ac8d41b2e5ce12dd > -Commit: 261ca3905b47b251b0751fd7af45ad5c3fd129e4 > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp > -@@ -193,8 +193,8 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector - > - vtkCellArray *newConnectivity = vtkCellArray::New(); > - newConnectivity->Initialize(); > -- int oldCellDataSize = this->Connectivity->GetData()->GetSize(); > -- newConnectivity->Allocate(oldCellDataSize); > -+ int oldCellDataSize = this->GetCells()->GetConnectivityArray()->GetSize(); > -+ newConnectivity->AllocateExact(oldCellDataSize, oldCellDataSize); > - MESSAGE("oldCellSize="<< oldCellSize << " oldCellDataSize=" << oldCellDataSize); > - > - vtkUnsignedCharArray *newTypes = vtkUnsignedCharArray::New(); > -@@ -214,11 +214,11 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector - while ( i < oldCellSize ) > - { > - // skip a hole if any > -- while ( i < oldCellSize && this->Types->GetValue(i) == VTK_EMPTY_CELL ) > -+ while ( i < oldCellSize && this->GetCellType(i) == VTK_EMPTY_CELL ) > - ++i; > - int startBloc = i; > - // look for a block end > -- while ( i < oldCellSize && this->Types->GetValue(i) != VTK_EMPTY_CELL ) > -+ while ( i < oldCellSize && this->GetCellType(i) != VTK_EMPTY_CELL ) > - ++i; > - int endBloc = i; > - if ( endBloc > startBloc ) > -@@ -242,7 +242,7 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector - { > - for (int oldCellID = 0; oldCellID < oldCellSize; oldCellID++) > - { > -- if (this->Types->GetValue(oldCellID) == VTK_EMPTY_CELL) > -+ if (this->GetCellType(oldCellID) == VTK_EMPTY_CELL) > - continue; > - int newCellId = idCellsOldToNew[ oldCellID ]; > - if (newTypes->GetValue(newCellId) == VTK_POLY_VERTEX) > -@@ -250,6 +250,71 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector - } > - } > - > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 3, 20240112) > -+ if ( this->FaceLocations ) > -+ { > -+ vtkIdTypeArray *iniFaceLocO = (vtkIdTypeArray *)this->FaceLocations->GetOffsetsArray(); > -+ vtkIdTypeArray *iniFaceLocC = (vtkIdTypeArray *)this->FaceLocations->GetConnectivityArray(); > -+ vtkIdTypeArray *iniFaceO = (vtkIdTypeArray *)this->Faces->GetOffsetsArray(); > -+ vtkIdTypeArray *iniFaceC = (vtkIdTypeArray *)this->Faces->GetConnectivityArray(); > -+ // > -+ vtkNew facesLoc_o; facesLoc_o->Initialize(); facesLoc_o->InsertNextValue(0); > -+ vtkNew facesLoc_c; facesLoc_c->Initialize(); > -+ vtkNew faces_o; faces_o->Initialize(); faces_o->InsertNextValue(0); > -+ vtkNew faces_c; faces_c->Initialize(); > -+ int newFaceId( 0 ); > -+ vtkIdType facesLoc_o_cur(0),faces_o_cur(0); > -+ // for ( vtkIdType newCellID = 0; newCellID < newCellSize; newCellID++ ) > -+ for (int oldCellId = 0; oldCellId < oldCellSize; oldCellId++) > -+ { > -+ int newCellId = idCellsOldToNew[oldCellId]; > -+ if ( this->GetCellType(newCellId) == VTK_POLYHEDRON ) > -+ { > -+ vtkIdType oldStartFaceLocOff = iniFaceLocO->GetValue( oldCellId ); > -+ vtkIdType nCellFaces = iniFaceLocO->GetValue( oldCellId + 1 ) - oldStartFaceLocOff; > -+ facesLoc_o_cur += nCellFaces; > -+ facesLoc_o->InsertNextValue( facesLoc_o_cur ); > -+ for ( int n = 0; n < nCellFaces; n++ ) > -+ { > -+ facesLoc_c->InsertNextValue( newFaceId++ ); > -+ int curFaceId = iniFaceLocC->GetValue( oldStartFaceLocOff + n ); > -+ int oldStartPtOfFaceOff = iniFaceO->GetValue( curFaceId ); > -+ int nbOfPts = iniFaceO->GetValue( curFaceId + 1 ) - oldStartPtOfFaceOff; > -+ faces_o_cur += nbOfPts; > -+ faces_o->InsertNextValue( faces_o_cur ); > -+ for( int m = 0 ; m < nbOfPts ; m++ ) > -+ { > -+ vtkIdType oldpt = iniFaceC->GetValue( oldStartPtOfFaceOff + m ); > -+ int curPt = idNodesOldToNew[ oldpt ]; > -+ faces_c->InsertNextValue( curPt ); > -+ } > -+ } > -+ } > -+ else > -+ { > -+ facesLoc_o->InsertNextValue(facesLoc_o_cur); > -+ } > -+ } > -+ { > -+ faces_o->Squeeze(); faces_c->Squeeze(); > -+ facesLoc_o->Squeeze(); facesLoc_c->Squeeze(); > -+ // > -+ vtkNew outFaces; > -+ outFaces->SetData( faces_o, faces_c ); > -+ vtkNew outFaceLocations; > -+ outFaceLocations->SetData( facesLoc_o, facesLoc_c ); > -+ // > -+ this->SetPolyhedralCells(newTypes, newConnectivity, outFaceLocations, outFaces); > -+ } > -+ } > -+ else > -+ { > -+ { > -+ this->SetCells(newTypes,newConnectivity); > -+ } > -+ //this->CellLocations = newLocations; > -+ } > -+#else > - vtkIdTypeArray* thisFaceLocations = GetFaceLocations(); > - vtkIdTypeArray* thisFaces = GetFaces(); > - if (thisFaceLocations) > -@@ -262,7 +327,7 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector - newFaces->Allocate(thisFaces->GetSize()); > - for (int i = 0; i < oldCellSize; i++) > - { > -- if (this->Types->GetValue(i) == VTK_EMPTY_CELL) > -+ if (this->GetCellType(i) == VTK_EMPTY_CELL) > - continue; > - int newCellId = idCellsOldToNew[i]; > - if (newTypes->GetValue(newCellId) == VTK_POLYHEDRON) > -@@ -297,6 +362,7 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector - { > - this->SetCells(newTypes, newLocations, newConnectivity, thisFaceLocations, thisFaces); > - } > -+#endif > - > - newPoints->Delete(); > - newTypes->Delete(); > -@@ -333,7 +399,7 @@ void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharAr > - //MESSAGE("copyBloc " << alreadyCopied << " " << start << " " << end << " size: " << end - start << " total: " << alreadyCopied + end - start); > - for (int j = start; j < end; j++) > - { > -- newTypes->SetValue(alreadyCopied, this->Types->GetValue(j)); > -+ newTypes->SetValue(alreadyCopied, this->GetCellType(j)); > - idCellsOldToNew[j] = alreadyCopied; // old vtkId --> new vtkId > - // The difference is mainly the internal representation of vtkCellArray between vtk 7.x and vtk 9.x > - // In the old version a single array of the form (n1,id1,id2,...,idn1, n2,id1,id2,...,idn2, ...) is used > -@@ -341,16 +407,12 @@ void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharAr > - // (n1,n2,n3) and (id1,id2,...,idn1,id1,id2,...,idn2, ...) > - // The Locations array in vtk 7.x kept the positions of the n's of the above array: (0, idn1 + 1, idn2 + 2). > - // In vtk 9.x this array doesn't exist any more but its values can be determined with idni + i > --#ifdef VTK_CELL_ARRAY_V2 > - vtkIdType oldLoc = ((vtkIdTypeArray *)(this->Connectivity->GetOffsetsArray()))->GetValue( j ) + j; > --#else > -- vtkIdType oldLoc = this->Locations->GetValue(j); > --#endif > - vtkIdType nbpts; > - vtkIdTypePtr oldPtsCell = 0; > - this->Connectivity->GetCell(oldLoc, nbpts, oldPtsCell); > - assert(nbpts < NBMAXNODESINCELL); > -- //MESSAGE(j << " " << alreadyCopied << " " << (int)this->Types->GetValue(j) << " " << oldLoc << " " << nbpts ); > -+ //MESSAGE(j << " " << alreadyCopied << " " << (int)this->GetCellType(j) << " " << oldLoc << " " << nbpts ); > - for (int l = 0; l < nbpts; l++) > - { > - int oldval = oldPtsCell[l]; > -@@ -358,7 +420,8 @@ void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharAr > - //MESSAGE(" " << oldval << " " << pointsCell[l]); > - } > - /*int newcnt = */newConnectivity->InsertNextCell(nbpts, pointsCell); > -- int newLoc = newConnectivity->GetInsertLocation(nbpts); > -+ int newLoc = this->GetCells()->GetOffsetsArray()->GetNumberOfValues() - 1 > -+ + this->GetCells()->GetConnectivityArray()->GetNumberOfValues() - nbpts - 1; > - //MESSAGE(newcnt << " " << newLoc); > - newLocations->SetValue(alreadyCopied, newLoc); > - alreadyCopied++; > -@@ -965,7 +1028,6 @@ void SMDS_UnstructuredGrid::GetNodeIds(std::set& > - */ > - void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map localClonedNodeIds) > - { > --#ifdef VTK_CELL_ARRAY_V2 > - vtkNew cellPoints; > - this->GetCellPoints(vtkVolId, cellPoints.GetPointer()); > - for (vtkIdType i = 0; i < cellPoints->GetNumberOfIds(); i++) > -@@ -979,22 +1041,6 @@ void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVol > - //this->AddReferenceToCell(pts[i], vtkVolId); > - } > - } > --#else > -- vtkIdType npts = 0; > -- vtkIdType *pts; // will refer to the point id's of the face > -- this->GetCellPoints(vtkVolId, npts, pts); > -- for (int i = 0; i < npts; i++) > -- { > -- if (localClonedNodeIds.count(pts[i])) > -- { > -- vtkIdType oldpt = pts[i]; > -- pts[i] = localClonedNodeIds[oldpt]; > -- //MESSAGE(oldpt << " --> " << pts[i]); > -- //this->RemoveReferenceToCell(oldpt, vtkVolId); > -- //this->AddReferenceToCell(pts[i], vtkVolId); > -- } > -- } > --#endif > - } > - > - /*! reorder the nodes of a face > -@@ -1024,25 +1070,17 @@ void SMDS_UnstructuredGrid::BuildLinks() > - this->Links->UnRegister(this); > - } > - > --#ifdef VTK_CELL_ARRAY_V2 > - this->Links = SMDS_CellLinks::New(); > - GetLinks()->Allocate(this->GetNumberOfPoints()); > - GetLinks()->Register(this); > --//FIXME: vtk9 > -- #if VTK_VERSION_NUMBER < VTK_VERSION_CHECK(9,3,0) > -+#if VTK_VERSION_NUMBER < VTK_VERSION_CHECK(9, 2, 20221112) > - GetLinks()->BuildLinks(this); > -- #else > -+#else > - GetLinks()->SetDataSet(this); > -+ std::cout << this->GetNumberOfPoints() << std::endl; > - GetLinks()->BuildLinks(); > -- #endif > -- GetLinks()->Delete(); > --#else > -- this->Links = SMDS_CellLinks::New(); > -- this->Links->Allocate(this->GetNumberOfPoints()); > -- this->Links->Register(this); > -- this->Links->BuildLinks(this, this->Connectivity); > -- this->Links->Delete(); > - #endif > -+ GetLinks()->Delete(); > - } > - > - /*! Create a volume (prism or hexahedron) by duplication of a face. > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkCellIterator_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkCellIterator_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkCellIterator_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkCellIterator_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,20 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: 6d4ce9e9b84963688e283adaf775ed40d5d775a1 > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp > -@@ -182,9 +182,10 @@ SMDS_VtkCellIteratorPolyH::SMDS_VtkCellIteratorPolyH(S > - case SMDSEntity_Polyhedra: > - { > - //MESSAGE("SMDS_VtkCellIterator Polyhedra"); > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(_cellId, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( vtkCellId, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - int id = 0; > - _nbNodesInFaces = 0; > - for (int i = 0; i < nFaces; i++) > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkEdge_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkEdge_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkEdge_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkEdge_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,35 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp > -@@ -67,7 +67,6 @@ bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode * n > - bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes) > - { > - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); > --#ifdef VTK_CELL_ARRAY_V2 > - vtkNew cellPoints; > - grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); > - if (nbNodes != cellPoints->GetNumberOfIds()) > -@@ -79,20 +78,6 @@ bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode* no > - { > - cellPoints->SetId(i, nodes[i]->getVtkId()); > - } > --#else > -- vtkIdType npts = 0; > -- vtkIdType* pts = 0; > -- grid->GetCellPoints(myVtkID, npts, pts); > -- if (nbNodes != npts) > -- { > -- MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes); > -- return false; > -- } > -- for (int i = 0; i < nbNodes; i++) > -- { > -- pts[i] = nodes[i]->getVtkId(); > -- } > --#endif > - SMDS_Mesh::_meshList[myMeshId]->setMyModified(); > - return true; > - } > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkFace_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkFace_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkFace_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkFace_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,54 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp > -@@ -101,7 +101,6 @@ void SMDS_VtkFace::initQuadPoly(const std::vector - bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes) > - { > - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); > --#ifdef VTK_CELL_ARRAY_V2 > - vtkNew cellPoints; > - grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); > - if (nbNodes != cellPoints->GetNumberOfIds()) > -@@ -113,20 +112,6 @@ bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* no > - { > - cellPoints->SetId(i, nodes[i]->getVtkId()); > - } > --#else > -- vtkIdType npts = 0; > -- vtkIdType* pts = 0; > -- grid->GetCellPoints(myVtkID, npts, pts); > -- if (nbNodes != npts) > -- { > -- MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes); > -- return false; > -- } > -- for (int i = 0; i < nbNodes; i++) > -- { > -- pts[i] = nodes[i]->getVtkId(); > -- } > --#endif > - SMDS_Mesh::_meshList[myMeshId]->setMyModified(); > - return true; > - } > -@@ -372,18 +357,10 @@ SMDS_NodeIteratorPtr SMDS_VtkFace::interlacedNodesIter > - void SMDS_VtkFace::ChangeApex(SMDS_MeshNode* node) > - { > - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); > --#ifdef VTK_CELL_ARRAY_V2 > - vtkNew cellPoints; > - grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); > - grid->RemoveReferenceToCell(cellPoints->GetId(0), myVtkID); > - cellPoints->SetId(0, node->getVtkId()); > --#else > -- vtkIdType npts = 0; > -- vtkIdType* pts = 0; > -- grid->GetCellPoints(myVtkID, npts, pts); > -- grid->RemoveReferenceToCell(pts[0], myVtkID); > -- pts[0] = node->getVtkId(); > --#endif > - node->AddInverseElement(this), > - SMDS_Mesh::_meshList[myMeshId]->setMyModified(); > - } > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkVolume_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkVolume_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkVolume_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMDS_SMDS_VtkVolume_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,148 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > -Commit: 6d4ce9e9b84963688e283adaf775ed40d5d775a1 > - > -Index: src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp > ---- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp > -@@ -133,7 +133,6 @@ void SMDS_VtkVolume::initPoly(const std::vector - bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes) > - { > - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); > --#ifdef VTK_CELL_ARRAY_V2 > - vtkNew cellPoints; > - grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); > - if (nbNodes != cellPoints->GetNumberOfIds()) > -@@ -145,20 +144,6 @@ bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* > - { > - cellPoints->SetId(i, nodes[i]->getVtkId()); > - } > --#else > -- vtkIdType npts = 0; > -- vtkIdType* pts = 0; > -- grid->GetCellPoints(myVtkID, npts, pts); > -- if (nbNodes != npts) > -- { > -- MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << nbNodes); > -- return false; > -- } > -- for (int i = 0; i < nbNodes; i++) > -- { > -- pts[i] = nodes[i]->getVtkId(); > -- } > --#endif > - SMDS_Mesh::_meshList[myMeshId]->setMyModified(); > - return true; > - } > -@@ -220,9 +205,10 @@ int SMDS_VtkVolume::NbFaces() const > - break; > - case VTK_POLYHEDRON: > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - nbFaces = nFaces; > - break; > - } > -@@ -249,9 +235,10 @@ int SMDS_VtkVolume::NbNodes() const > - } > - else > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - int id = 0; > - for (int i = 0; i < nFaces; i++) > - { > -@@ -289,9 +276,10 @@ int SMDS_VtkVolume::NbEdges() const > - break; > - case VTK_POLYHEDRON: > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - nbEdges = 0; > - int id = 0; > - for (int i = 0; i < nFaces; i++) > -@@ -325,9 +313,10 @@ int SMDS_VtkVolume::NbFaceNodes(const int face_ind) co > - int nbNodes = 0; > - if (aVtkType == VTK_POLYHEDRON) > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - int id = 0; > - for (int i = 0; i < nFaces; i++) > - { > -@@ -355,9 +344,10 @@ const SMDS_MeshNode* SMDS_VtkVolume::GetFaceNode(const > - const SMDS_MeshNode* node = 0; > - if (aVtkType == VTK_POLYHEDRON) > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - int id = 0; > - for (int i = 0; i < nFaces; i++) > - { > -@@ -385,9 +375,10 @@ std::vector SMDS_VtkVolume::GetQuantities() const > - vtkIdType aVtkType = grid->GetCellType(this->myVtkID); > - if (aVtkType == VTK_POLYHEDRON) > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - int id = 0; > - for (int i = 0; i < nFaces; i++) > - { > -@@ -443,9 +434,10 @@ const SMDS_MeshNode* SMDS_VtkVolume::GetNode(const int > - vtkIdType aVtkType = grid->GetCellType(this->myVtkID); > - if ( aVtkType == VTK_POLYHEDRON) > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - int id = 0, nbPoints = 0; > - for (int i = 0; i < nFaces; i++) > - { > -@@ -474,9 +466,10 @@ int SMDS_VtkVolume::GetNodeIndex( const SMDS_MeshNode* > - const vtkIdType aVtkType = grid->GetCellType(this->myVtkID); > - if ( aVtkType == VTK_POLYHEDRON) > - { > -- vtkIdType nFaces = 0; > -- vtkIdTypePtr ptIds = 0; > -- grid->GetFaceStream(this->myVtkID, nFaces, ptIds); > -+ vtkNew faceStream; > -+ grid->GetFaceStream( this->myVtkID, faceStream); > -+ vtkIdType nFaces = faceStream->GetId(0); > -+ vtkIdType *ptIds = faceStream->GetPointer(1); > - int id = 0; > - for (int iF = 0; iF < nFaces; iF++) > - { > Index: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMESH_SMESH_MeshEditor_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMESH_SMESH_MeshEditor_cpp > diff -N cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMESH_SMESH_MeshEditor_cpp > --- cad/freecad//patches/patch-src_3rdParty_salomesmesh_src_SMESH_SMESH_MeshEditor_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,32 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: c9acda2a659f9ac079fefd2c0b8d6ff9c8a8238e > - > -Index: src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp > ---- src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp.orig > -+++ src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp > -@@ -57,6 +57,7 @@ > - #include "utilities.h" > - #include "chrono.hxx" > - > -+#include > - #include > - #include > - #include > -@@ -11348,7 +11349,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( c > - { > - int oldId = *itn; > - //MESSAGE(" node " << oldId); > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks::Link l = static_cast(grid->GetLinks())->GetLink(oldId); > - #else > - vtkCellLinks::Link l = static_cast(grid->GetCellLinks())->GetLink(oldId); > -@@ -11712,7 +11713,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( c > - { > - int oldId = itnod->first; > - //MESSAGE(" node " << oldId); > --#if VTK_VERSION_NUMBER_QUICK >= 90300000000 > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) > - vtkCellLinks::Link l = static_cast(grid->GetLinks())->GetLink(oldId); > - #else > - vtkCellLinks::Link l = static_cast(grid->GetCellLinks())->GetLink(oldId); > Index: cad/freecad//patches/patch-src_Gui_View3DInventor_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_Gui_View3DInventor_cpp > diff -N cad/freecad//patches/patch-src_Gui_View3DInventor_cpp > --- cad/freecad//patches/patch-src_Gui_View3DInventor_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,15 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: ee09d4e696aa530e100b840428ab9c358032c744 > - > -Index: src/Gui/View3DInventor.cpp > ---- src/Gui/View3DInventor.cpp.orig > -+++ src/Gui/View3DInventor.cpp > -@@ -604,7 +604,7 @@ bool View3DInventor::setCamera(const char* pCamera) > - } > - > - // this is to make sure to reliably delete the node > -- CoinPtr camPtr(Cam, true); > -+ CoinPtr camPtr {Cam}; > - > - // toggle between perspective and orthographic camera > - if (Cam->getTypeId() != CamViewer->getTypeId()) { > Index: cad/freecad//patches/patch-src_Gui_ViewProviderLink_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_Gui_ViewProviderLink_cpp > diff -N cad/freecad//patches/patch-src_Gui_ViewProviderLink_cpp > --- cad/freecad//patches/patch-src_Gui_ViewProviderLink_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,15 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: ee09d4e696aa530e100b840428ab9c358032c744 > - > -Index: src/Gui/ViewProviderLink.cpp > ---- src/Gui/ViewProviderLink.cpp.orig > -+++ src/Gui/ViewProviderLink.cpp > -@@ -1624,7 +1624,7 @@ void LinkView::updateLink() > - bool LinkView::linkGetElementPicked(const SoPickedPoint* pp, std::string& subname) const > - { > - std::ostringstream ss; > -- CoinPtr path = pp->getPath(); > -+ CoinPtr path {pp->getPath()}; > - if (!nodeArray.empty()) { > - auto idx = path->findNode(pcLinkRoot); > - if (idx < 0 || idx + 2 >= path->getLength()) { > Index: cad/freecad//patches/patch-src_Gui_ViewProvider_h > =================================================================== > RCS file: cad/freecad//patches/patch-src_Gui_ViewProvider_h > diff -N cad/freecad//patches/patch-src_Gui_ViewProvider_h > --- cad/freecad//patches/patch-src_Gui_ViewProvider_h 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,123 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: ee09d4e696aa530e100b840428ab9c358032c744 > - > -Index: src/Gui/ViewProvider.h > ---- src/Gui/ViewProvider.h.orig > -+++ src/Gui/ViewProvider.h > -@@ -87,26 +87,102 @@ enum ViewStatus > - }; > - > - > -+/** Convenience smart pointer to manage the lifetime of coin nodes. > -+ * > -+ * This class is copied from Inventor/misc/SoRefPtr.h and can be removed when the > -+ * minimum supported coin version provides this header. > -+ */ > -+template > -+class SoRefPtr > -+{ > -+public: > -+ SoRefPtr(void) noexcept > -+ : ptr(NULL) > -+ {} > -+ > -+ explicit SoRefPtr(T* p) > -+ : ptr(p) > -+ { > -+ if (this->ptr) { > -+ this->ptr->ref(); > -+ } > -+ } > -+ > -+ SoRefPtr(const SoRefPtr& other) > -+ : ptr(other.ptr) > -+ { > -+ if (this->ptr) { > -+ this->ptr->ref(); > -+ } > -+ } > -+ > -+ SoRefPtr(SoRefPtr&& other) noexcept > -+ : ptr(other.ptr) > -+ { > -+ other.ptr = NULL; > -+ } > -+ > -+ ~SoRefPtr(void) > -+ { > -+ if (this->ptr) { > -+ this->ptr->unref(); > -+ } > -+ } > -+ > -+ SoRefPtr& operator=(SoRefPtr other) noexcept > -+ { > -+ this->swap(other); > -+ return *this; > -+ } > -+ > -+ void reset(T* p = NULL) > -+ { > -+ SoRefPtr tmp(p); > -+ this->swap(tmp); > -+ } > -+ > -+ T* get(void) const noexcept > -+ { > -+ return this->ptr; > -+ } > -+ T& operator*(void) const > -+ { > -+ return *this->ptr; > -+ } > -+ T* operator->(void) const noexcept > -+ { > -+ return this->ptr; > -+ } > -+ explicit operator bool(void) const noexcept > -+ { > -+ return this->ptr != NULL; > -+ } > -+ > -+ void swap(SoRefPtr& other) noexcept > -+ { > -+ using std::swap; > -+ swap(this->ptr, other.ptr); > -+ } > -+ > -+private: > -+ T* ptr; > -+}; > -+ > - /** Convenience smart pointer to wrap coin node. > - * > -- * It is basically boost::intrusive plus implicit pointer conversion to save the > -- * trouble of typing get() all the time. > -+ * This class isn't merged with SoRefPtr because it can be removed in the future > - */ > - template > --class CoinPtr: public boost::intrusive_ptr > -+class CoinPtr: public SoRefPtr > - { > - public: > -- // Too bad, VC2013 does not support constructor inheritance > -- // using boost::intrusive_ptr::intrusive_ptr; > -- using inherited = boost::intrusive_ptr; > -- CoinPtr() = default; > -- CoinPtr(T* p, bool add_ref = true) > -- : inherited(p, add_ref) > -- {} > -- template > -- CoinPtr(CoinPtr const& r) > -- : inherited(r) > -- {} > -+ using SoRefPtr::SoRefPtr; > -+ > -+ CoinPtr& operator=(T* ptr) > -+ { > -+ SoRefPtr::reset(ptr); > -+ return *this; > -+ } > - > - operator T*() const > - { > Index: cad/freecad//patches/patch-src_Mod_Fem_App_FemPostPipeline_h > =================================================================== > RCS file: cad/freecad//patches/patch-src_Mod_Fem_App_FemPostPipeline_h > diff -N cad/freecad//patches/patch-src_Mod_Fem_App_FemPostPipeline_h > --- cad/freecad//patches/patch-src_Mod_Fem_App_FemPostPipeline_h 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,15 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: c9acda2a659f9ac079fefd2c0b8d6ff9c8a8238e > - > -Index: src/Mod/Fem/App/FemPostPipeline.h > ---- src/Mod/Fem/App/FemPostPipeline.h.orig > -+++ src/Mod/Fem/App/FemPostPipeline.h > -@@ -32,7 +32,7 @@ > - #include "FemResultObject.h" > - #include "VTKExtensions/vtkFemFrameSourceAlgorithm.h" > - > --#if VTK_VERSION_NUMBER < VTK_VERSION_CHECK(9, 3, 0) > -+#if VTK_VERSION_NUMBER < VTK_VERSION_CHECK(9, 2, 20230125) > - # include "VTKExtensions/vtkCleanUnstructuredGrid.h" > - #else > - # include > Index: cad/freecad//patches/patch-src_Mod_Fem_App_PreCompiled_h > =================================================================== > RCS file: cad/freecad//patches/patch-src_Mod_Fem_App_PreCompiled_h > diff -N cad/freecad//patches/patch-src_Mod_Fem_App_PreCompiled_h > --- cad/freecad//patches/patch-src_Mod_Fem_App_PreCompiled_h 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,15 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: c9acda2a659f9ac079fefd2c0b8d6ff9c8a8238e > - > -Index: src/Mod/Fem/App/PreCompiled.h > ---- src/Mod/Fem/App/PreCompiled.h.orig > -+++ src/Mod/Fem/App/PreCompiled.h > -@@ -151,7 +151,7 @@ > - #include > - #include > - #include > --#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 3, 0) > -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20230125) > - # include > - #endif > - #include > Index: cad/freecad//patches/patch-src_Mod_Fem_App_PropertyPostDataObject_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_Mod_Fem_App_PropertyPostDataObject_cpp > diff -N cad/freecad//patches/patch-src_Mod_Fem_App_PropertyPostDataObject_cpp > --- cad/freecad//patches/patch-src_Mod_Fem_App_PropertyPostDataObject_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,21 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > - > -Index: src/Mod/Fem/App/PropertyPostDataObject.cpp > ---- src/Mod/Fem/App/PropertyPostDataObject.cpp.orig > -+++ src/Mod/Fem/App/PropertyPostDataObject.cpp > -@@ -400,14 +400,12 @@ void PropertyPostDataObject::SaveDocFile(Base::Writer& > - xmlWriter->SetInputDataObject(m_dataObject); > - xmlWriter->SetFileName(fi.filePath().c_str()); > - > --#ifdef VTK_CELL_ARRAY_V2 > - // Looks like an invalid data object that causes a crash with vtk9 > - vtkUnstructuredGrid* dataGrid = vtkUnstructuredGrid::SafeDownCast(m_dataObject); > - if (dataGrid && (dataGrid->GetPiece() < 0 || dataGrid->GetNumberOfPoints() <= 0)) { > - std::cerr << "PropertyPostDataObject::SaveDocFile: ignore empty vtkUnstructuredGrid\n"; > - return; > - } > --#endif > - } > - xmlWriter->SetDataModeToBinary(); > - > Index: cad/freecad//patches/patch-src_Mod_Fem_Gui_ViewProviderFemPostObject_cpp > =================================================================== > RCS file: cad/freecad//patches/patch-src_Mod_Fem_Gui_ViewProviderFemPostObject_cpp > diff -N cad/freecad//patches/patch-src_Mod_Fem_Gui_ViewProviderFemPostObject_cpp > --- cad/freecad//patches/patch-src_Mod_Fem_Gui_ViewProviderFemPostObject_cpp 16 May 2026 15:13:20 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,18 +0,0 @@ > -This patch has been merged upstream. Drop next update. > -Commit: bd90728f886bbeb6d69aafd4f68f934109b96f91 > - > -Index: src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp > ---- src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp.orig > -+++ src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp > -@@ -75,11 +75,7 @@ > - using namespace FemGui; > - namespace sp = std::placeholders; > - > --#ifdef VTK_CELL_ARRAY_V2 > - using vtkIdTypePtr = const vtkIdType*; > --#else > --using vtkIdTypePtr = vtkIdType*; > --#endif > - > - // ---------------------------------------------------------------------------- > - > Index: cad/freecad//patches/patch-src_Mod_TechDraw_Gui_CommandCreateDims_cpp > =================================================================== > RCS file: /cvs/ports/cad/freecad/patches/patch-src_Mod_TechDraw_Gui_CommandCreateDims_cpp,v > diff -u -p -r1.1 patch-src_Mod_TechDraw_Gui_CommandCreateDims_cpp > --- cad/freecad//patches/patch-src_Mod_TechDraw_Gui_CommandCreateDims_cpp 24 Aug 2026 21:23:42 -0000 1.1 > +++ cad/freecad//patches/patch-src_Mod_TechDraw_Gui_CommandCreateDims_cpp 11 Oct 2026 18:08:11 -0000 > @@ -5,7 +5,7 @@ See https://github.com/FreeCAD/FreeCAD/p > Index: src/Mod/TechDraw/Gui/CommandCreateDims.cpp > --- src/Mod/TechDraw/Gui/CommandCreateDims.cpp.orig > +++ src/Mod/TechDraw/Gui/CommandCreateDims.cpp > -@@ -1097,7 +1097,7 @@ class TDHandlerDimension : public TechDrawHandler, (pr > +@@ -1103,7 +1103,7 @@ class TDHandlerDimension : public TechDrawHandler, (pr > TechDraw::pointPair pp = dim->getLinearPoints(); > float dx = pp.first().x - pp.second().x; > float dy = pp.first().y - pp.second().y; > Index: cad/freecad//patches/patch-tests_CMakeLists_txt > =================================================================== > RCS file: /cvs/ports/cad/freecad/patches/patch-tests_CMakeLists_txt,v > diff -u -p -r1.2 patch-tests_CMakeLists_txt > --- cad/freecad//patches/patch-tests_CMakeLists_txt 16 May 2026 15:13:20 -0000 1.2 > +++ cad/freecad//patches/patch-tests_CMakeLists_txt 11 Oct 2026 18:08:11 -0000 > @@ -1,7 +1,7 @@ > Index: tests/CMakeLists.txt > --- tests/CMakeLists.txt.orig > +++ tests/CMakeLists.txt > -@@ -157,6 +157,7 @@ foreach (exe ${TestExecutables}) > +@@ -160,6 +160,7 @@ foreach (exe ${TestExecutables}) > endif() > else() > set_target_properties(${exe} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tests) > Index: cad/freecad//pkg/PLIST > =================================================================== > RCS file: /cvs/ports/cad/freecad/pkg/PLIST,v > diff -u -p -r1.5 PLIST > --- cad/freecad//pkg/PLIST 16 May 2026 15:13:20 -0000 1.5 > +++ cad/freecad//pkg/PLIST 11 Oct 2026 18:08:13 -0000 > @@ -803,6 +803,7 @@ lib/freecad/Mod/BIM/bimtests/TestArchStr > lib/freecad/Mod/BIM/bimtests/TestArchTruss.py > lib/freecad/Mod/BIM/bimtests/TestArchWall.py > lib/freecad/Mod/BIM/bimtests/TestArchWindow.py > +lib/freecad/Mod/BIM/bimtests/TestArchWindowGui.py > lib/freecad/Mod/BIM/bimtests/TestWebGLExport.py > lib/freecad/Mod/BIM/bimtests/TestWebGLExportGui.py > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}/ > @@ -864,12 +865,15 @@ lib/freecad/Mod/BIM/bimtests/${MODPY_PYC > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestArchWall.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestArchWindow.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestArchWindow.${MODPY_PYC_MAGIC_TAG}pyc > +lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestArchWindowGui.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > +lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestArchWindowGui.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestWebGLExport.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestWebGLExport.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestWebGLExportGui.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/BIM/bimtests/${MODPY_PYCACHE}TestWebGLExportGui.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/BIM/bimtests/fixtures/ > lib/freecad/Mod/BIM/bimtests/fixtures/FC_site_simple-102.FCStd > +lib/freecad/Mod/BIM/bimtests/test_roof_subtraction.brep > lib/freecad/Mod/BIM/importers/ > lib/freecad/Mod/BIM/importers/Sample.sh3d > lib/freecad/Mod/BIM/importers/__init__.py > @@ -3962,6 +3966,8 @@ lib/freecad/Mod/Fem/femtest/app/${MODPY_ > lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_open.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_result.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_result.${MODPY_PYC_MAGIC_TAG}pyc > +lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_security.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > +lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_security.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_solver_elmer.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_solver_elmer.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Fem/femtest/app/${MODPY_PYCACHE}test_solver_mystran.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > @@ -3977,6 +3983,7 @@ lib/freecad/Mod/Fem/femtest/app/test_mes > lib/freecad/Mod/Fem/femtest/app/test_object.py > lib/freecad/Mod/Fem/femtest/app/test_open.py > lib/freecad/Mod/Fem/femtest/app/test_result.py > +lib/freecad/Mod/Fem/femtest/app/test_security.py > lib/freecad/Mod/Fem/femtest/app/test_solver_elmer.py > lib/freecad/Mod/Fem/femtest/app/test_solver_mystran.py > lib/freecad/Mod/Fem/femtest/app/test_solver_z88.py > @@ -4989,6 +4996,8 @@ lib/freecad/Mod/Sketcher/Profiles.py > lib/freecad/Mod/Sketcher/SketcherExample.py > lib/freecad/Mod/Sketcher/SketcherTests/ > lib/freecad/Mod/Sketcher/SketcherTests/TestPlacementUpdate.py > +lib/freecad/Mod/Sketcher/SketcherTests/TestSketchCarbonCopyReverseMapping.FCStd > +lib/freecad/Mod/Sketcher/SketcherTests/TestSketchCarbonCopyReverseMapping.py > lib/freecad/Mod/Sketcher/SketcherTests/TestSketchExpression.py > lib/freecad/Mod/Sketcher/SketcherTests/TestSketchFillet.py > lib/freecad/Mod/Sketcher/SketcherTests/TestSketchValidateCoincidents.py > @@ -4997,6 +5006,8 @@ lib/freecad/Mod/Sketcher/SketcherTests/_ > lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}/ > lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}TestPlacementUpdate.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}TestPlacementUpdate.${MODPY_PYC_MAGIC_TAG}pyc > +lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}TestSketchCarbonCopyReverseMapping.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > +lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}TestSketchCarbonCopyReverseMapping.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}TestSketchExpression.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}TestSketchExpression.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Sketcher/SketcherTests/${MODPY_PYCACHE}TestSketchFillet.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > @@ -5198,6 +5209,7 @@ lib/freecad/Mod/Test/TestData/content_it > lib/freecad/Mod/Test/TestGui.py > lib/freecad/Mod/Test/TestPerf.py > lib/freecad/Mod/Test/TestPythonSyntax.py > +lib/freecad/Mod/Test/TestTreeSelection.py > lib/freecad/Mod/Test/UnicodeTests.py > lib/freecad/Mod/Test/UnitTests.py > lib/freecad/Mod/Test/Workbench.py > @@ -5227,6 +5239,8 @@ lib/freecad/Mod/Test/${MODPY_PYCACHE}Tes > lib/freecad/Mod/Test/${MODPY_PYCACHE}TestPerf.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Test/${MODPY_PYCACHE}TestPythonSyntax.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/Test/${MODPY_PYCACHE}TestPythonSyntax.${MODPY_PYC_MAGIC_TAG}pyc > +lib/freecad/Mod/Test/${MODPY_PYCACHE}TestTreeSelection.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > +lib/freecad/Mod/Test/${MODPY_PYCACHE}TestTreeSelection.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Test/${MODPY_PYCACHE}UnicodeTests.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/freecad/Mod/Test/${MODPY_PYCACHE}UnicodeTests.${MODPY_PYC_MAGIC_TAG}pyc > lib/freecad/Mod/Test/${MODPY_PYCACHE}UnitTests.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} >