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?
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 <vtkUnstructuredGrid.h> - #include <vtkCellLinks.h> -+#include <vtkVersion.h> - - #include <vector> - #include <set> -@@ -95,14 +96,10 @@ class SMDS_EXPORT SMDS_UnstructuredGrid: public vtkUns - std::map<int, std::map<long,int> >& 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<vtkCellLinks*>(vtkUnstructuredGrid::GetLinks()); -- #else -- return static_cast<vtkCellLinks*>(GetCellLinks()); -- #endif - #else -- return Links; -+ return static_cast<vtkCellLinks*>(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<vtkIdList> 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<vtkIdList> 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 <vtkUnstructuredGrid.h> -+#include <vtkVersion.h> - - #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<SMDS_CellLinks*>(grid->GetLinks()); - #else - SMDS_CellLinks *cellLinks = dynamic_cast<SMDS_CellLinks*>(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<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); - #else - vtkCellLinks::Link l = static_cast<vtkCellLinks*>(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<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); - #else - vtkCellLinks::Link l = static_cast<vtkCellLinks*>(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<const SMDS_MeshCell*> (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<vtkCellLinks*>(grid->GetLinks()); - #else - vtkCellLinks *Links = static_cast<vtkCellLinks*>(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<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); - #else - vtkCellLinks::Link l = static_cast<vtkCellLinks*>(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<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); - #else - vtkCellLinks::Link l = static_cast<vtkCellLinks*>(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 <vtkCell.h> - #include <vtkCellLinks.h> - #include <vtkIdList.h> -+#include <vtkVersion.h> - - #include <algorithm> - #include <map> -@@ -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<const - 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<co - 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<con - 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<vtkCellLinks*>(myGrid->GetLinks()); -- #else -- vtkCellLinks *links = static_cast<vtkCellLinks*>(myGrid->GetCellLinks()); -- #endif - #else -- vtkCellLinks *links = myGrid->GetCellLinks(); -+ vtkCellLinks *links = static_cast<vtkCellLinks*>(myGrid->GetCellLinks()); - #endif - for (int i=0; i<nbPoints; 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<in - - 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<in - 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<in - { - 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<in - } - } - -+#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<vtkIdTypeArray> facesLoc_o; facesLoc_o->Initialize(); facesLoc_o->InsertNextValue(0); -+ vtkNew<vtkIdTypeArray> facesLoc_c; facesLoc_c->Initialize(); -+ vtkNew<vtkIdTypeArray> faces_o; faces_o->Initialize(); faces_o->InsertNextValue(0); -+ vtkNew<vtkIdTypeArray> 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<vtkCellArray> outFaces; -+ outFaces->SetData( faces_o, faces_c ); -+ vtkNew<vtkCellArray> 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<in - 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<in - { - 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<int>& - */ - void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map<int, int> localClonedNodeIds) - { --#ifdef VTK_CELL_ARRAY_V2 - vtkNew<vtkIdList> 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<vtkIdList> 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<vtkIdList> 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<vtkI - bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes) - { - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); --#ifdef VTK_CELL_ARRAY_V2 - vtkNew<vtkIdList> 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<vtkIdList> 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<vtkIdT - bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes) - { - vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); --#ifdef VTK_CELL_ARRAY_V2 - vtkNew<vtkIdList> 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<vtkIdList> 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<vtkIdList> 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<vtkIdList> 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<vtkIdList> 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<vtkIdList> 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<int> 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<vtkIdList> 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<vtkIdList> 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<vtkIdList> 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 <vtkVersion.h> - #include <BRepAdaptor_Surface.hxx> - #include <BRepBuilderAPI_MakeEdge.hxx> - #include <BRepClass3d_SolidClassifier.hxx> -@@ -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<vtkCellLinks*>(grid->GetLinks())->GetLink(oldId); - #else - vtkCellLinks::Link l = static_cast<vtkCellLinks*>(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<vtkCellLinks*>(grid->GetLinks())->GetLink(oldId); - #else - vtkCellLinks::Link l = static_cast<vtkCellLinks*>(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<SoNode> camPtr(Cam, true); -+ CoinPtr<SoNode> 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<SoPath> path = pp->getPath(); -+ CoinPtr<SoPath> 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<typename T> -+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 T> --class CoinPtr: public boost::intrusive_ptr<T> -+class CoinPtr: public SoRefPtr<T> - { - public: -- // Too bad, VC2013 does not support constructor inheritance -- // using boost::intrusive_ptr<T>::intrusive_ptr; -- using inherited = boost::intrusive_ptr<T>; -- CoinPtr() = default; -- CoinPtr(T* p, bool add_ref = true) -- : inherited(p, add_ref) -- {} -- template<class Y> -- CoinPtr(CoinPtr<Y> const& r) -- : inherited(r) -- {} -+ using SoRefPtr<T>::SoRefPtr; -+ -+ CoinPtr& operator=(T* ptr) -+ { -+ SoRefPtr<T>::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 <vtkCleanUnstructuredGrid.h> 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 <vtkAppendFilter.h> - #include <vtkArrayCalculator.h> - #include <vtkCellArray.h> --#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 3, 0) -+#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20230125) - # include <vtkCleanUnstructuredGrid.h> - #endif - #include <vtkCompositeDataSet.h> 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}
