Date: Sat, 21 Mar 2026 11:08:45 +0000 From: Christoph Moench-Tegeder <cmt@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: 56823f691a68 - main - cad/freecad: update to 1.1 (rc3) Message-ID: <69be7c3d.367f9.25f37995@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by cmt: URL: https://cgit.FreeBSD.org/ports/commit/?id=56823f691a68838ec9924aaafb6f96a7c8d7447b commit 56823f691a68838ec9924aaafb6f96a7c8d7447b Author: Christoph Moench-Tegeder <cmt@FreeBSD.org> AuthorDate: 2026-03-21 11:05:15 +0000 Commit: Christoph Moench-Tegeder <cmt@FreeBSD.org> CommitDate: 2026-03-21 11:05:15 +0000 cad/freecad: update to 1.1 (rc3) Announcement: https://github.com/FreeCAD/FreeCAD/releases/tag/1.1rc3 This allows for "easy" unbreaking of the port against VTK 9.6, and at this point I belive the risk of using this RC is less than the risk of adapting the vtk-9.6-compat patches. --- cad/freecad/Makefile | 33 +- cad/freecad/distinfo | 12 +- .../files/patch-src_CXX_Python3_Objects.hxx | 20 - ...atch-src_Gui_GuiApplicationNativeEventAware.cpp | 18 - cad/freecad/files/patch-src_Gui_Selection.h | 10 - cad/freecad/files/patch-src_Gui_SoFCSelection.h | 11 - .../files/patch-src_Gui_SoFCUnifiedSelection.h | 10 - cad/freecad/files/patch-vtk96-compat | 1088 ++++++++++++++++++++ cad/freecad/pkg-plist | 1083 +++++++++++++------ 9 files changed, 1890 insertions(+), 395 deletions(-) diff --git a/cad/freecad/Makefile b/cad/freecad/Makefile index 447f2ac4ca89..1a907d45ffc0 100644 --- a/cad/freecad/Makefile +++ b/cad/freecad/Makefile @@ -1,6 +1,5 @@ PORTNAME= FreeCAD -DISTVERSION= 1.0.2 -PORTREVISION= 8 +DISTVERSION= 1.1rc3 CATEGORIES= cad MAINTAINER= cmt@FreeBSD.org @@ -10,8 +9,6 @@ WWW= https://www.freecadweb.org/ LICENSE= LGPL20+ LICENSE_FILE= ${WRKSRC}/LICENSE -BROKEN= incompatible with VTK 9.6.0 - CONFLICTS_INSTALL= freecad-devel # bin/FreeCAD BUILD_DEPENDS= doxygen:devel/doxygen \ @@ -19,7 +16,6 @@ BUILD_DEPENDS= doxygen:devel/doxygen \ ${PYTHON_PKGNAMEPREFIX}pyside6-tools>0:devel/pyside6-tools@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pivy>0:graphics/py-pivy@${PY_FLAVOR} \ ${PYTHON_SITELIBDIR}/matplotlib/__init__.py:math/py-matplotlib@${PY_FLAVOR} \ - ${PYTHON_INCLUDEDIR}/CXX/Config.hxx:devel/py-cxx \ microsoft-gsl>0:devel/microsoft-gsl \ googletest>0:devel/googletest \ swig:devel/swig @@ -50,23 +46,29 @@ LIB_DEPENDS= libexpat.so:textproc/expat2 \ RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pivy>0:graphics/py-pivy@${PY_FLAVOR} \ ${PYTHON_SITELIBDIR}/matplotlib/__init__.py:math/py-matplotlib@${PY_FLAVOR} -USES= dos2unix compiler:c++17-lang cmake cpe gl eigen:3 fortran gmake jpeg \ +PORTSCOUT= limit:^[0-9\.]*$$ + +USES= dos2unix compiler:c++20-lang cmake cpe gl eigen:3 fortran gmake jpeg \ localbase:ldflags mpi:openmpi pkgconfig python localbase qt:6 xorg \ desktop-file-utils shared-mime-info shebangfix USE_GITHUB= yes -GH_ACCOUNT= Ondsel-Development:ondselsolver -GH_PROJECT= OndselSolver:ondselsolver -GH_TAGNAME= 91f70382beeb58b32432b5a82da3802e4c19199c:ondselsolver -GH_SUBDIR= src/3rdParty/OndselSolver:ondselsolver +GH_ACCOUNT= FreeCAD:ondselsolver \ + FreeCAD:addonmgr +GH_PROJECT= OndselSolver:ondselsolver \ + AddonManager:addonmgr +GH_TAGNAME= 30e9b64e8bf881d438d4b88834f9ba3674865418:ondselsolver \ + 937b6877239dc78ef59eeefe8099e5f14243eda1:addonmgr +GH_SUBDIR= src/3rdParty/OndselSolver:ondselsolver \ + src/Mod/AddonManager:addonmgr USE_XORG= ice sm x11 xext xt USE_GL= gl glu -USE_QT= base declarative location svg tools webchannel +USE_QT= base declarative svg tools USE_LDCONFIG= yes CPE_VENDOR= freecad_project DOS2UNIX_GLOB= *.txt *.h *.cpp *.py *.qss *.csv *.pov *.stp *.ui *.wrl *.WRL -SHEBANG_FILES= src/Tools/freecad-thumbnailer +SHEBANG_FILES= src/Tools/freecad-thumbnailer.in # our HDF5/CMake integration is messy, so workarounds are required below CMAKE_ARGS+= -DOCC_INCLUDE_DIR="${LOCALBASE}/include/OpenCASCADE" \ @@ -76,7 +78,6 @@ CMAKE_ARGS+= -DOCC_INCLUDE_DIR="${LOCALBASE}/include/OpenCASCADE" \ -DPYTHON_INCLUDE_DIR="${PYTHON_INCLUDEDIR}" \ -DPYTHON_PACKAGES_PATH="${PYTHON_SITELIBDIR}" \ -DPYTHON_EXECUTABLE="${PYTHON_CMD}" \ - -DPYCXX_INCLUDE_DIR="${PYTHON_INCLUDEDIR}" \ -DBUILD_ASSEMBLY="ON" \ -DBUILD_DESIGNER_PLUGIN="ON" \ -DBUILD_FLAT_MESH="ON" \ @@ -100,13 +101,11 @@ CMAKE_ARGS+= -DOCC_INCLUDE_DIR="${LOCALBASE}/include/OpenCASCADE" \ -DHDF5_INCLUDE_DIRS="${LOCALBASE}/include/hdf5" \ -DHDF5_LIBRARIES="-L${LOCALBASE}/lib -lhdf5" \ -DHDF5_LIBRARY_DIRS="${LOCALBASE}/lib" \ - -DBUILD_ENABLE_CXX_STD=C++17 \ + -DBUILD_ENABLE_CXX_STD=C++20 \ -DXDG_DATADIR="${PREFIX}/share" CMAKE_INSTALL_PREFIX= ${PREFIX}/${PORTNAME} -CXXFLAGS+= -DGetCellLinks=GetLinks # fix for vtk-9.5.0: equivalent of this patch: https://github.com/FreeCAD/FreeCAD/issues/21731#issuecomment-2934487147 - OPTIONS_DEFINE= COLLADA COLLADA_DESC= Install pycollada for Collada files import @@ -133,8 +132,6 @@ pre-configure: post-install: ${LN} -s ../${PORTNAME}/bin/FreeCAD ${STAGEDIR}${LOCALBASE}/bin/FreeCAD ${LN} -s ../${PORTNAME}/bin/FreeCADCmd ${STAGEDIR}${LOCALBASE}/bin/FreeCADCmd - ${INSTALL_SCRIPT} ${WRKSRC}/src/Tools/freecad-thumbnailer \ - ${STAGEDIR}${PREFIX}/bin/freecad-thumbnailer .include <../../math/vtk9/Makefile.version> .include <bsd.port.mk> diff --git a/cad/freecad/distinfo b/cad/freecad/distinfo index 2cb103f96243..3a6d0bf5700f 100644 --- a/cad/freecad/distinfo +++ b/cad/freecad/distinfo @@ -1,5 +1,7 @@ -TIMESTAMP = 1754430856 -SHA256 (FreeCAD-FreeCAD-1.0.2_GH0.tar.gz) = 228ee52f00627c7d8fa61998179deb01865ece69390829feb1300228d24f7e9e -SIZE (FreeCAD-FreeCAD-1.0.2_GH0.tar.gz) = 91635756 -SHA256 (Ondsel-Development-OndselSolver-91f70382beeb58b32432b5a82da3802e4c19199c_GH0.tar.gz) = 061f651f503f1ec5a9814e174cdb8a9ba84d511a3b8be3d94852e84976c6b158 -SIZE (Ondsel-Development-OndselSolver-91f70382beeb58b32432b5a82da3802e4c19199c_GH0.tar.gz) = 4667938 +TIMESTAMP = 1774088438 +SHA256 (FreeCAD-FreeCAD-1.1rc3_GH0.tar.gz) = acbb1abc5891b1b8551df894976f2716809f5896213880054086fa74edfced67 +SIZE (FreeCAD-FreeCAD-1.1rc3_GH0.tar.gz) = 90152538 +SHA256 (FreeCAD-OndselSolver-30e9b64e8bf881d438d4b88834f9ba3674865418_GH0.tar.gz) = 77646ca7d8cbc6dc4e8304439be2ff2b9aecf397e6349e63b3b06e65dfed79c3 +SIZE (FreeCAD-OndselSolver-30e9b64e8bf881d438d4b88834f9ba3674865418_GH0.tar.gz) = 4667790 +SHA256 (FreeCAD-AddonManager-937b6877239dc78ef59eeefe8099e5f14243eda1_GH0.tar.gz) = 70b2fa7f3c58c0ea5be830de90d33369670ee6658f13aeb7684f1ea478528178 +SIZE (FreeCAD-AddonManager-937b6877239dc78ef59eeefe8099e5f14243eda1_GH0.tar.gz) = 849951 diff --git a/cad/freecad/files/patch-src_CXX_Python3_Objects.hxx b/cad/freecad/files/patch-src_CXX_Python3_Objects.hxx deleted file mode 100644 index 1bca4004ca3c..000000000000 --- a/cad/freecad/files/patch-src_CXX_Python3_Objects.hxx +++ /dev/null @@ -1,20 +0,0 @@ ---- src/CXX/Python3/Objects.hxx.orig 2024-11-18 16:48:00 UTC -+++ src/CXX/Python3/Objects.hxx -@@ -1787,7 +1787,7 @@ namespace Py - typedef std::basic_string<Py_UNICODE> unicodestring; - extern Py_UNICODE unicode_null_string[1]; - #endif -- typedef std::basic_string<Py_UCS4> ucs4string; -+ typedef std::basic_string<char32_t> ucs4string; - extern Py_UCS4 ucs4_null_string[1]; - - class PYCXX_EXPORT Byte: public Object -@@ -2237,7 +2237,7 @@ namespace Py - { - ifPyErrorThrowCxxException(); - } -- ucs4string ucs4( buf, size() ); -+ ucs4string ucs4( reinterpret_cast<const char32_t*>(buf), size() ); - delete[] buf; - - return ucs4; diff --git a/cad/freecad/files/patch-src_Gui_GuiApplicationNativeEventAware.cpp b/cad/freecad/files/patch-src_Gui_GuiApplicationNativeEventAware.cpp deleted file mode 100644 index a46ce349429f..000000000000 --- a/cad/freecad/files/patch-src_Gui_GuiApplicationNativeEventAware.cpp +++ /dev/null @@ -1,18 +0,0 @@ -commit 8ae0abfd1d044c295c939c032790a7c4e3e960c0 -Author: Christoph Moench-Tegeder <cmt@FreeBSD.org> - - enable spnav on FreeBSD, too - -diff --git src/Gui/GuiApplicationNativeEventAware.cpp src/Gui/GuiApplicationNativeEventAware.cpp -index 622f38ea47..9e02558875 100644 ---- src/Gui/GuiApplicationNativeEventAware.cpp -+++ src/Gui/GuiApplicationNativeEventAware.cpp -@@ -33,7 +33,7 @@ - - - #if defined(_USE_3DCONNEXION_SDK) || defined(SPNAV_FOUND) --#if defined(Q_OS_LINUX) -+#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) - #if defined(SPNAV_USE_X11) - #include "3Dconnexion/GuiNativeEventLinuxX11.h" - #else diff --git a/cad/freecad/files/patch-src_Gui_Selection.h b/cad/freecad/files/patch-src_Gui_Selection.h deleted file mode 100644 index ad1415c0ba03..000000000000 --- a/cad/freecad/files/patch-src_Gui_Selection.h +++ /dev/null @@ -1,10 +0,0 @@ ---- src/Gui/Selection.h.orig 2024-03-20 18:17:17 UTC -+++ src/Gui/Selection.h -@@ -25,6 +25,7 @@ - #define GUI_SELECTION_H - - #include <deque> -+#include <array> - #include <list> - #include <string> - #include <vector> diff --git a/cad/freecad/files/patch-src_Gui_SoFCSelection.h b/cad/freecad/files/patch-src_Gui_SoFCSelection.h deleted file mode 100644 index 0d09d72c281f..000000000000 --- a/cad/freecad/files/patch-src_Gui_SoFCSelection.h +++ /dev/null @@ -1,11 +0,0 @@ ---- ./src/Gui/SoFCSelection.h.orig 2023-01-21 22:41:40.507560000 +0100 -+++ ./src/Gui/SoFCSelection.h 2023-01-21 22:42:27.657720000 +0100 -@@ -35,6 +35,8 @@ - # include <GL/gl.h> - # endif - -+#include <array> -+ - #include <Inventor/elements/SoLazyElement.h> - #include <Inventor/fields/SoSFBool.h> - #include <Inventor/fields/SoSFColor.h> diff --git a/cad/freecad/files/patch-src_Gui_SoFCUnifiedSelection.h b/cad/freecad/files/patch-src_Gui_SoFCUnifiedSelection.h deleted file mode 100644 index d4ac79b033a9..000000000000 --- a/cad/freecad/files/patch-src_Gui_SoFCUnifiedSelection.h +++ /dev/null @@ -1,10 +0,0 @@ ---- src/Gui/SoFCUnifiedSelection.h.orig 2023-01-21 23:07:09.710205000 +0100 -+++ src/Gui/SoFCUnifiedSelection.h 2023-01-21 23:07:38.508972000 +0100 -@@ -23,6 +23,7 @@ - #ifndef GUI_SOFCUNIFIEDSELECTION_H - #define GUI_SOFCUNIFIEDSELECTION_H - -+#include <array> - #include <list> - #include <unordered_map> - #include <unordered_set> diff --git a/cad/freecad/files/patch-vtk96-compat b/cad/freecad/files/patch-vtk96-compat new file mode 100644 index 000000000000..32693854ed9c --- /dev/null +++ b/cad/freecad/files/patch-vtk96-compat @@ -0,0 +1,1088 @@ +# git diff --no-prefix c25a8fe..a141f8a +Author: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com> +Date: Thu Jan 15 10:01:38 2026 +0100 + + Merge pull request #25825 from Lgt2x/vtk-compatibility + + SMESH: Patch for VTK 9.6 compatibility + +diff --git src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx +index d97a37bc51..184e10d9c1 100644 +--- src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx ++++ 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; +diff --git src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx +index f02337cf52..e8bfa90f4e 100644 +--- src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx ++++ 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 @@ public: + 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) +diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp +index c5fd8c91cd..e257960ac6 100644 +--- src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp ++++ 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; + } +diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp +index baa6eadc93..a076d2fb6f 100644 +--- src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp ++++ 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_MeshNode * n, double diame + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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 SMDS_MeshNode*> & nodes, + 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<const SMDS_MeshNode*> & node + 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<const SMDS_MeshNode*>& nodes, + 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(const std::vector<vtkIdTyp + 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(const std::vector<vtkIdType>& + 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_MeshNode * node1, + 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_MeshNode * node1, + 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_MeshNode * node1, + 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 * elem, + 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_MeshElement * elem) + } + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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_MeshNode * n1, + 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++) + { +diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp +index ea5cf53b0f..d66f794b4a 100644 +--- src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp ++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp +@@ -146,7 +146,6 @@ bool SMDS_Mesh0DElement::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbN + 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_MeshNode* nodes[], const int nbN + } + 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; +diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp +index f5fc373f5d..420c3a9baf 100644 +--- src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp ++++ 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 shapeId, double x, double y, do + 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 @@ public: + 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_MeshElement* ME) + 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); +diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp +index 4e9d6dc057..f5b91ff800 100644 +--- src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp ++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp +@@ -193,8 +193,8 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n + + 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<int>& idNodesOldToNew, int n + 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<int>& idNodesOldToNew, int n + { + 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<int>& idNodesOldToNew, int n + } + } + ++#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<int>& idNodesOldToNew, int n + 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<int>& idNodesOldToNew, int n + { + this->SetCells(newTypes, newLocations, newConnectivity, thisFaceLocations, thisFaces); + } ++#endif + + newPoints->Delete(); + newTypes->Delete(); +@@ -333,7 +399,7 @@ void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharArray *newTypes, + //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(vtkUnsignedCharArray *newTypes, + // (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(vtkUnsignedCharArray *newTypes, + //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>& nodeSet, int downId, unsig + */ + 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 vtkVolId, std::map<int, int> loc + //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(); *** 2142 LINES SKIPPED ***home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69be7c3d.367f9.25f37995>
