Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Jul 2021 21:15:38 GMT
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: 99c2d852228a - main - cad/freecad: move patch from PATCH_FILES to files/
Message-ID:  <202107132115.16DLFcuK079479@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by cmt:

URL: https://cgit.FreeBSD.org/ports/commit/?id=99c2d852228adf47ab84b0129b204ed5eea38ee4

commit 99c2d852228adf47ab84b0129b204ed5eea38ee4
Author:     Christoph Moench-Tegeder <cmt@FreeBSD.org>
AuthorDate: 2021-07-13 21:09:57 +0000
Commit:     Christoph Moench-Tegeder <cmt@FreeBSD.org>
CommitDate: 2021-07-13 21:09:57 +0000

    cad/freecad: move patch from PATCH_FILES to files/
    
    github's patch file is switching the commit hashes between 11 and
    12 digits: see also f4bd9d5c503b508a8d85d2c712acfcf05f1c2f9c, and today
    pkg-fallout complained that the patch file was back at it's "original"(?)
    format: "size mismatch: expected 34578, actual 34604", log:
    http://beefy18.nyi.freebsd.org/data/main-amd64-default/pb6f59eeeccee_s297e9f364b/logs/FreeCAD-0.19.2_3.log
    I regret having to put that patch into files/, but that seems better
    than to host other project's patches ourselfes.
    
    While here, garbage-collect files/ae641dc5278efaf.patch, which is not
    referenced anymore and was applied upstream for FreeCAD 0.19.2.
---
 cad/freecad/Makefile                               |   3 -
 cad/freecad/distinfo                               |   2 -
 cad/freecad/files/ae641dc5278efaf.patch            | 186 -----
 .../patch-0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25 | 820 +++++++++++++++++++++
 4 files changed, 820 insertions(+), 191 deletions(-)

diff --git a/cad/freecad/Makefile b/cad/freecad/Makefile
index 722c12aaab37..19339df96edd 100644
--- a/cad/freecad/Makefile
+++ b/cad/freecad/Makefile
@@ -6,9 +6,6 @@ PORTREVISION=	3
 # DISTVERSIONSUFFIX=	-g690774c0e
 CATEGORIES=	cad
 
-PATCH_SITES=	https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/
-PATCHFILES=	0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25.patch:-p1
-
 MAINTAINER=	cmt@FreeBSD.org
 COMMENT=	General purpose 3D CAD modeller
 
diff --git a/cad/freecad/distinfo b/cad/freecad/distinfo
index 11304023d75a..bce3431badc4 100644
--- a/cad/freecad/distinfo
+++ b/cad/freecad/distinfo
@@ -1,5 +1,3 @@
 TIMESTAMP = 1626012113
 SHA256 (FreeCAD-FreeCAD-0.19.2_GH0.tar.gz) = 47e39e3d6fcafe6e0c68923fb1b86acda16986268e5e6011694057b940139fba
 SIZE (FreeCAD-FreeCAD-0.19.2_GH0.tar.gz) = 296987961
-SHA256 (0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25.patch) = ceaff97b8718b88856c97c3a6cf08ef9baa0900bdba7fe055754cb87227e08ce
-SIZE (0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25.patch) = 34578
diff --git a/cad/freecad/files/ae641dc5278efaf.patch b/cad/freecad/files/ae641dc5278efaf.patch
deleted file mode 100644
index 86858f478fca..000000000000
--- a/cad/freecad/files/ae641dc5278efaf.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-dos2unix fixed variant of https://github.com/FreeCAD/FreeCAD/commit/ae641dc5278efaf.patch
-From ae641dc5278efafa22b168fc196875558b92e436 Mon Sep 17 00:00:00 2001
-From: wmayer <wmayer@users.sourceforge.net>
-Date: Sun, 7 Jun 2020 12:53:47 +0200
-Subject: [PATCH] Python: [skip ci] tp_print slot has been replaced with
- tp_vectorcall_offset in Py3.8
-
----
- src/Base/swigpyrun_1.3.25.h        |  8 ++++++++
- src/Base/swigpyrun_1.3.33.h        |  8 ++++++++
- src/Base/swigpyrun_1.3.36.h        |  9 +++++++++
- src/Base/swigpyrun_1.3.38.h        |  8 ++++++++
- src/Base/swigpyrun_1.3.40.h        | 12 ++++++++++--
- src/CXX/Python3/cxx_extensions.cxx |  6 ++++++
- 6 files changed, 49 insertions(+), 2 deletions(-)
-
-diff --git a/src/Base/swigpyrun_1.3.25.h b/src/Base/swigpyrun_1.3.25.h
-index 91717210b48..9ebadbc83a2 100644
---- a/src/Base/swigpyrun_1.3.25.h
-+++ b/src/Base/swigpyrun_1.3.25.h
-@@ -699,7 +699,11 @@ PySwigObject_type(void) {
-     0,					/*tp_itemsize*/
-     /* methods */
-     (destructor)PySwigObject_dealloc,	/*tp_dealloc*/
-+#if PY_VERSION_HEX < 0x03080000
-     (printfunc)PySwigObject_print,	/*tp_print*/
-+#else
-+    0,          /*tp_vectorcall_offset*/
-+#endif
-     (getattrfunc)0,			/*tp_getattr*/
-     (setattrfunc)0,			/*tp_setattr*/
-     (cmpfunc)PySwigObject_compare,	/*tp_compare*/
-@@ -859,7 +863,11 @@ PySwigPacked_type(void) {
-     0,					/*tp_itemsize*/
-     /* methods */
-     (destructor)PySwigPacked_dealloc,	/*tp_dealloc*/
-+#if PY_VERSION_HEX < 0x03080000
-     (printfunc)PySwigPacked_print,	/*tp_print*/
-+#else
-+    0,          /*tp_vectorcall_offset*/
-+#endif
-     (getattrfunc)0,			/*tp_getattr*/
-     (setattrfunc)0,			/*tp_setattr*/
-     (cmpfunc)PySwigPacked_compare,	/*tp_compare*/
-diff --git a/src/Base/swigpyrun_1.3.33.h b/src/Base/swigpyrun_1.3.33.h
-index f83ac1e89c3..afd5a8c504f 100644
---- a/src/Base/swigpyrun_1.3.33.h
-+++ b/src/Base/swigpyrun_1.3.33.h
-@@ -1620,7 +1620,11 @@ _PySwigObject_type(void) {
- 	sizeof(PySwigObject),		    /* tp_basicsize */
- 	0,			            /* tp_itemsize */
- 	(destructor)PySwigObject_dealloc,   /* tp_dealloc */
-+#if PY_VERSION_HEX < 0x03080000
- 	(printfunc)PySwigObject_print,	    /* tp_print */
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
- #if PY_VERSION_HEX < 0x02020000
- 	(getattrfunc)PySwigObject_getattr,  /* tp_getattr */ 
- #else
-@@ -1790,7 +1794,11 @@ _PySwigPacked_type(void) {
- 	sizeof(PySwigPacked),		    /* tp_basicsize */	
- 	0,				    /* tp_itemsize */	
- 	(destructor)PySwigPacked_dealloc,   /* tp_dealloc */	
-+#if PY_VERSION_HEX < 0x03080000
- 	(printfunc)PySwigPacked_print,	    /* tp_print */   	
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
- 	(getattrfunc)0,			    /* tp_getattr */ 	
- 	(setattrfunc)0,			    /* tp_setattr */ 	
- 	(cmpfunc)PySwigPacked_compare,	    /* tp_compare */ 	
-diff --git a/src/Base/swigpyrun_1.3.36.h b/src/Base/swigpyrun_1.3.36.h
-index 02c58ad8ab9..12ad41e12a8 100644
---- a/src/Base/swigpyrun_1.3.36.h
-+++ b/src/Base/swigpyrun_1.3.36.h
-@@ -1628,7 +1628,12 @@ _PySwigObject_type(void) {
- 	sizeof(PySwigObject),		    /* tp_basicsize */
- 	0,			            /* tp_itemsize */
- 	(destructor)PySwigObject_dealloc,   /* tp_dealloc */
-+#if PY_VERSION_HEX < 0x03080000
- 	(printfunc)PySwigObject_print,	    /* tp_print */
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
-+
- #if PY_VERSION_HEX < 0x02020000
- 	(getattrfunc)PySwigObject_getattr,  /* tp_getattr */ 
- #else
-@@ -1798,7 +1803,11 @@ _PySwigPacked_type(void) {
- 	sizeof(PySwigPacked),		    /* tp_basicsize */	
- 	0,				    /* tp_itemsize */	
- 	(destructor)PySwigPacked_dealloc,   /* tp_dealloc */	
-+#if PY_VERSION_HEX < 0x03080000
- 	(printfunc)PySwigPacked_print,	    /* tp_print */   	
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
- 	(getattrfunc)0,			    /* tp_getattr */ 	
- 	(setattrfunc)0,			    /* tp_setattr */ 	
- 	(cmpfunc)PySwigPacked_compare,	    /* tp_compare */ 	
-diff --git a/src/Base/swigpyrun_1.3.38.h b/src/Base/swigpyrun_1.3.38.h
-index dae058c202f..7cacc157970 100644
---- a/src/Base/swigpyrun_1.3.38.h
-+++ b/src/Base/swigpyrun_1.3.38.h
-@@ -1741,7 +1741,11 @@ _PySwigObject_type(void) {
- 	sizeof(SwigPyObject),		    /* tp_basicsize */
- 	0,			            /* tp_itemsize */
- 	(destructor)SwigPyObject_dealloc,   /* tp_dealloc */
-+#if PY_VERSION_HEX < 0x03080000
- 	(printfunc)SwigPyObject_print,	    /* tp_print */
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
- #if PY_VERSION_HEX < 0x02020000
- 	(getattrfunc)SwigPyObject_getattr,  /* tp_getattr */ 
- #else
-@@ -1919,7 +1923,11 @@ _PySwigPacked_type(void) {
- 	sizeof(SwigPyPacked),		    /* tp_basicsize */	
- 	0,				    /* tp_itemsize */	
- 	(destructor)SwigPyPacked_dealloc,   /* tp_dealloc */	
-+#if PY_VERSION_HEX < 0x03080000
- 	(printfunc)SwigPyPacked_print,	    /* tp_print */   	
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
- 	(getattrfunc)0,			    /* tp_getattr */ 	
- 	(setattrfunc)0,			    /* tp_setattr */ 	
- 	(cmpfunc)SwigPyPacked_compare,	    /* tp_compare */ 	
-diff --git a/src/Base/swigpyrun_1.3.40.h b/src/Base/swigpyrun_1.3.40.h
-index 136ba809fb7..400db8b4784 100644
---- a/src/Base/swigpyrun_1.3.40.h
-+++ b/src/Base/swigpyrun_1.3.40.h
-@@ -1766,7 +1766,11 @@ _PySwigObject_type(void) {
- 	sizeof(SwigPyObject),		    /* tp_basicsize */
- 	0,			            /* tp_itemsize */
- 	(destructor)SwigPyObject_dealloc,   /* tp_dealloc */
-+#if PY_VERSION_HEX < 0x03080000
- 	(printfunc)SwigPyObject_print,	    /* tp_print */
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
- #if PY_VERSION_HEX < 0x02020000
- 	(getattrfunc)SwigPyObject_getattr,  /* tp_getattr */ 
- #else
-@@ -1947,8 +1951,12 @@ _PySwigPacked_type(void) {
- 	(char *)"SwigPyPacked",		    /* tp_name */	
- 	sizeof(SwigPyPacked),		    /* tp_basicsize */	
- 	0,				    /* tp_itemsize */	
--	(destructor)SwigPyPacked_dealloc,   /* tp_dealloc */	
--	(printfunc)SwigPyPacked_print,	    /* tp_print */   	
-+	(destructor)SwigPyPacked_dealloc,   /* tp_dealloc */
-+#if PY_VERSION_HEX < 0x03080000
-+	(printfunc)SwigPyPacked_print,	    /* tp_print */
-+#else
-+	0, /*tp_vectorcall_offset*/
-+#endif
- 	(getattrfunc)0,			    /* tp_getattr */ 	
- 	(setattrfunc)0,			    /* tp_setattr */ 	
- #if PY_VERSION_HEX>=0x03000000
-diff --git a/src/CXX/Python3/cxx_extensions.cxx b/src/CXX/Python3/cxx_extensions.cxx
-index fb3da455f5b..9ff94612f07 100644
---- a/src/CXX/Python3/cxx_extensions.cxx
-+++ b/src/CXX/Python3/cxx_extensions.cxx
-@@ -381,7 +381,11 @@ PythonType::PythonType( size_t basic_size, int itemsize, const char *default_nam
- 
-     // Methods to implement standard operations
-     table->tp_dealloc = (destructor)standard_dealloc;
-+#if PY_VERSION_HEX < 0x03080000
-     table->tp_print = 0;
-+#else
-+    table->tp_vectorcall_offset = 0;
-+#endif
-     table->tp_getattr = 0;
-     table->tp_setattr = 0;
-     table->tp_repr = 0;
-@@ -524,7 +528,9 @@ PythonType &PythonType::supportClass()
- #ifdef PYCXX_PYTHON_2TO3
- PythonType &PythonType::supportPrint()
- {
-+#if PY_VERSION_HEX < 0x03080000
-     table->tp_print = print_handler;
-+#endif
-     return *this;
- }
- #endif
diff --git a/cad/freecad/files/patch-0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25 b/cad/freecad/files/patch-0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25
new file mode 100644
index 000000000000..1a36b3eddc31
--- /dev/null
+++ b/cad/freecad/files/patch-0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25
@@ -0,0 +1,820 @@
+This is "Make smesh compile with vtk9" from
+https://github.com/FreeCAD/FreeCAD/commit/0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25.patch
+slightly adopted for "make patch".
+We keep a local copy here as github's patch file is not stable (checksum
+keeps changing due to different commit hash representations).
+
+From 0cfea3fee3e7848bbf043d2b1a19f6405d7ebe25 Mon Sep 17 00:00:00 2001
+From: wmayer <wmayer@users.sourceforge.net>
+Date: Mon, 12 Oct 2020 17:56:03 +0200
+Subject: [PATCH] Make smesh compile with vtk9
+
+---
+ .../salomesmesh/inc/SMDS_MeshElement.hxx      |  9 +++-
+ .../salomesmesh/inc/SMDS_UnstructuredGrid.hxx |  4 ++
+ .../salomesmesh/src/SMDS/SMDS_BallElement.cpp |  9 +++-
+ .../salomesmesh/src/SMDS/SMDS_Downward.cpp    | 44 +++++++++----------
+ .../salomesmesh/src/SMDS/SMDS_Mesh.cpp        |  6 ++-
+ .../src/SMDS/SMDS_Mesh0DElement.cpp           | 12 +++++
+ .../salomesmesh/src/SMDS/SMDS_MeshNode.cpp    | 10 ++---
+ .../src/SMDS/SMDS_UnstructuredGrid.cpp        | 35 +++++++++++++--
+ .../src/SMDS/SMDS_VtkCellIterator.cpp         |  7 +--
+ .../salomesmesh/src/SMDS/SMDS_VtkEdge.cpp     | 19 +++++++-
+ .../salomesmesh/src/SMDS/SMDS_VtkFace.cpp     | 29 ++++++++++--
+ .../salomesmesh/src/SMDS/SMDS_VtkVolume.cpp   | 38 +++++++++++-----
+ .../src/SMESH/SMESH_MeshEditor.cpp            |  8 ++--
+ 13 files changed, 173 insertions(+), 57 deletions(-)
+
+diff --git src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx b/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
+index 14a6d9a763f..0e9b9e6c905 100644
+--- src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
++++ src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
+@@ -40,11 +40,16 @@
+ 
+ #include <vtkType.h>
+ #include <vtkCellType.h>
++#include <vtkCellArray.h>
+ 
+ //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;
+@@ -192,7 +197,7 @@ protected:
+   //! Element index in vector SMDS_Mesh::myNodes or SMDS_Mesh::myCells
+   int myID;
+   //! index in vtkUnstructuredGrid
+-  int myVtkID;
++  vtkIdType myVtkID;
+   //! SMDS_Mesh identification in SMESH
+   ShortType myMeshId;
+   //! SubShape and SubMesh identification in SMESHDS
+diff --git src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx b/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
+index 9e4a23eddfb..77465814541 100644
+--- src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
++++ src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
+@@ -95,7 +95,11 @@ public:
+                                        std::map<int, std::map<long,int> >& nodeQuadDomains);
+   vtkCellLinks* GetLinks()
+   {
++#ifdef VTK_CELL_ARRAY_V2
++    return static_cast<vtkCellLinks*>(GetCellLinks());
++#else
+     return Links;
++#endif
+   }
+   SMDS_Downward* getDownArray(unsigned char vtkType)
+   {
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
+index 299093c94f6..2680c217305 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
+@@ -67,10 +67,16 @@ 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;
+ }
+@@ -83,7 +89,8 @@ void SMDS_BallElement::Print (std::ostream & OS) const
+ const SMDS_MeshNode* SMDS_BallElement::GetNode (const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ 0 ]);
+ }
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
+index d6049c0bd19..a41f5c18e78 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
+@@ -303,7 +303,7 @@ int SMDS_Down1D::getNodeSet(int cellId, int* nodeSet)
+ void SMDS_Down1D::setNodes(int cellId, int vtkId)
+ {
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(vtkId, npts, pts);
+   // MESSAGE(vtkId << " " << npts << "  " << _nbDownCells);
+   //ASSERT(npts == _nbDownCells);
+@@ -357,7 +357,7 @@ int SMDS_Down1D::computeVtkCells(int *pts, std::vector<int>& vtkIds)
+     {
+       vtkIdType point = pts[i];
+       int numCells = _grid->GetLinks()->GetNcells(point);
+-      vtkIdType *cells = _grid->GetLinks()->GetCells(point);
++      vtkIdTypePtr cells = _grid->GetLinks()->GetCells(point);
+       for (int j = 0; j < numCells; j++)
+         {
+           int vtkCellId = cells[j];
+@@ -532,7 +532,7 @@ int SMDS_Down2D::computeVolumeIds(int cellId, int* ids)
+   // --- find point id's of the face
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(cellId, npts, pts);
+   vector<int> nodes;
+   for (int i = 0; i < npts; i++)
+@@ -577,7 +577,7 @@ int SMDS_Down2D::computeVolumeIdsFromNodesFace(int* pts, int npts, int* ids)
+       vtkIdType point = pts[i];
+       int numCells = _grid->GetLinks()->GetNcells(point);
+       //MESSAGE("cells pour " << i << " " << numCells);
+-      vtkIdType *cells = _grid->GetLinks()->GetCells(point);
++      vtkIdTypePtr cells = _grid->GetLinks()->GetCells(point);
+       for (int j = 0; j < numCells; j++)
+         {
+           int vtkCellId = cells[j];
+@@ -627,7 +627,7 @@ int SMDS_Down2D::computeVolumeIdsFromNodesFace(int* pts, int npts, int* ids)
+ void SMDS_Down2D::setTempNodes(int cellId, int vtkId)
+ {
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(vtkId, npts, pts);
+   // MESSAGE(vtkId << " " << npts << "  " << _nbNodes);
+   //ASSERT(npts == _nbNodes);
+@@ -795,7 +795,7 @@ void SMDS_Down3D::getNodeIds(int cellId, std::set<int>& nodeSet)
+ {
+   int vtkId = this->_vtkCellIds[cellId];
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(vtkId, npts, nodes);
+   for (int i = 0; i < npts; i++)
+     nodeSet.insert(nodes[i]);
+@@ -1126,7 +1126,7 @@ void SMDS_DownTetra::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>& o
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1178,7 +1178,7 @@ void SMDS_DownTetra::computeFacesWithNodes(int cellId, ListElemByNodesType& face
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1234,7 +1234,7 @@ void SMDS_DownQuadTetra::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1288,7 +1288,7 @@ void SMDS_DownQuadTetra::computeFacesWithNodes(int cellId, ListElemByNodesType&
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1357,7 +1357,7 @@ void SMDS_DownPyramid::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>&
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1435,7 +1435,7 @@ void SMDS_DownPyramid::computeFacesWithNodes(int cellId, ListElemByNodesType& fa
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1500,7 +1500,7 @@ void SMDS_DownQuadPyramid::getOrderedNodesOfFace(int cellId, std::vector<vtkIdTy
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1580,7 +1580,7 @@ void SMDS_DownQuadPyramid::computeFacesWithNodes(int cellId, ListElemByNodesType
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1660,7 +1660,7 @@ void SMDS_DownPenta::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>& o
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1744,7 +1744,7 @@ void SMDS_DownPenta::computeFacesWithNodes(int cellId, ListElemByNodesType& face
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1810,7 +1810,7 @@ void SMDS_DownQuadPenta::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1896,7 +1896,7 @@ void SMDS_DownQuadPenta::computeFacesWithNodes(int cellId, ListElemByNodesType&
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1981,7 +1981,7 @@ void SMDS_DownHexa::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>& or
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -2036,7 +2036,7 @@ void SMDS_DownHexa::computeFacesWithNodes(int cellId, ListElemByNodesType& faces
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -2112,7 +2112,7 @@ void SMDS_DownQuadHexa::getOrderedNodesOfFace(int cellId, std::vector<vtkIdType>
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -2167,7 +2167,7 @@ void SMDS_DownQuadHexa::computeFacesWithNodes(int cellId, ListElemByNodesType& f
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
+index 61c8e751d94..1eac2907d3d 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
+@@ -4768,7 +4768,11 @@ void SMDS_Mesh::dumpGrid(string ficdump)
+         ficcon << endl;
+   }
+   ficcon << "-------------------------------- connectivity " <<  nbPoints << endl;
+-        vtkCellLinks *links = myGrid->GetCellLinks();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkCellLinks *links = static_cast<vtkCellLinks*>(myGrid->GetCellLinks());
++#else
++  vtkCellLinks *links = myGrid->GetCellLinks();
++#endif
+   for (int i=0; i<nbPoints; i++)
+   {
+         int ncells = links->GetNcells(i);
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
+index 95438eab064..0df32e3b97c 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
+@@ -146,6 +146,17 @@ 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())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++    myNode = nodes[0];
++    cellPoints->SetId(0, myNode->getVtkId());
++#else
+     vtkIdType npts = 0;
+     vtkIdType* pts = 0;
+     grid->GetCellPoints(myVtkID, npts, pts);
+@@ -156,6 +167,7 @@ bool SMDS_Mesh0DElement::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbN
+     }
+     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 b/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
+index f647a5f1b8f..5b903c8fb55 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
+@@ -191,7 +191,7 @@ class SMDS_MeshNode_MyInvIterator: public SMDS_ElemIterator
+ SMDS_ElemIteratorPtr SMDS_MeshNode::
+ GetInverseElementIterator(SMDSAbs_ElementType type) const
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+   //MESSAGE("myID " << myID << " ncells " << l.ncells);
+   return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
+ }
+@@ -251,7 +251,7 @@ elementsIterator(SMDSAbs_ElementType type) const
+     return SMDS_MeshElement::elementsIterator(SMDSAbs_Node);
+   else
+   {
+-    vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++    vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+     return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
+   }
+ }
+@@ -350,7 +350,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();
+-  vtkCellLinks *Links = grid->GetCellLinks();
++  vtkCellLinks *Links = static_cast<vtkCellLinks*>(grid->GetCellLinks());
+   Links->ResizeCellList(myVtkID, 1);
+   Links->AddCellReference(cell->getVtkId(), myVtkID);
+ }
+@@ -366,7 +366,7 @@ void SMDS_MeshNode::ClearInverseElements()
+ 
+ bool SMDS_MeshNode::emptyInverseElements()
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+   return (l.ncells == 0);
+ }
+ 
+@@ -378,7 +378,7 @@ bool SMDS_MeshNode::emptyInverseElements()
+ 
+ int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+ 
+   if ( type == SMDSAbs_All )
+     return l.ncells;
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
+index fbd903b1e74..ff2b81e9694 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
+@@ -139,8 +139,8 @@ int SMDS_UnstructuredGrid::InsertNextLinkedCell(int type, int npts, vtkIdType *p
+   for (; it != setOfNodes.end(); ++it)
+     {
+       //MESSAGE("reverse link for node " << *it << " cell " << cellid);
+-      this->Links->ResizeCellList(*it, 1);
+-      this->Links->AddCellReference(cellid, *it);
++      this->GetLinks()->ResizeCellList(*it, 1);
++      this->GetLinks()->AddCellReference(cellid, *it);
+     }
+ 
+   return cellid;
+@@ -332,9 +332,13 @@ void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharArray *newTypes,
+     {
+       newTypes->SetValue(alreadyCopied, this->Types->GetValue(j));
+       idCellsOldToNew[j] = alreadyCopied; // old vtkId --> new vtkId
++#ifdef VTK_CELL_ARRAY_V2
++      vtkIdType oldLoc = this->GetCellLocationsArray()->GetValue(j);
++#else
+       vtkIdType oldLoc = this->Locations->GetValue(j);
++#endif
+       vtkIdType nbpts;
+-      vtkIdType *oldPtsCell = 0;
++      vtkIdTypePtr oldPtsCell = 0;
+       this->Connectivity->GetCell(oldLoc, nbpts, oldPtsCell);
+       assert(nbpts < NBMAXNODESINCELL);
+       //MESSAGE(j << " " << alreadyCopied << " " << (int)this->Types->GetValue(j) << " " << oldLoc << " " << nbpts );
+@@ -952,6 +956,21 @@ 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++)
++    {
++      if (localClonedNodeIds.count(cellPoints->GetId(i)))
++        {
++          vtkIdType oldpt = cellPoints->GetId(i);
++          cellPoints->SetId(i, localClonedNodeIds[oldpt]);
++          //MESSAGE(oldpt << " --> " << pts[i]);
++          //this->RemoveReferenceToCell(oldpt, vtkVolId);
++          //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);
+@@ -966,6 +985,7 @@ void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map<int, int> loc
+           //this->AddReferenceToCell(pts[i], vtkVolId);
+         }
+     }
++#endif
+ }
+ 
+ /*! reorder the nodes of a face
+@@ -995,11 +1015,20 @@ 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
++  GetLinks()->BuildLinks(this);
++  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
+ }
+ 
+ /*! Create a volume (prism or hexahedron) by duplication of a face.
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
+index deb05985f00..63b6eabb704 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
+@@ -33,7 +33,8 @@ SMDS_VtkCellIterator::SMDS_VtkCellIterator(SMDS_Mesh* mesh, int vtkCellId, SMDSA
+   }
+   else
+   {
+-    vtkIdType npts, *pts;
++    vtkIdType npts;
++    vtkIdTypePtr pts;
+     grid->GetCellPoints( _cellId, npts, pts );
+     _vtkIdList->SetNumberOfIds( _nbNodes = npts );
+     for (int i = 0; i < _nbNodes; i++)
+@@ -67,7 +68,7 @@ SMDS_VtkCellIteratorToUNV::SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCel
+   //MESSAGE("SMDS_VtkCellInterlacedIterator (UNV)" << _type);
+ 
+   _vtkIdList = vtkIdList::New();
+-  vtkIdType* pts;
++  vtkIdTypePtr pts;
+   vtkIdType npts;
+   vtkUnstructuredGrid* grid = _mesh->getGrid();
+   grid->GetCellPoints((vtkIdType)_cellId, npts, pts);
+@@ -182,7 +183,7 @@ SMDS_VtkCellIteratorPolyH::SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, int vtkCel
+   {
+     //MESSAGE("SMDS_VtkCellIterator Polyhedra");
+     vtkIdType nFaces = 0;
+-    vtkIdType* ptIds = 0;
++    vtkIdTypePtr ptIds = 0;
+     grid->GetFaceStream(_cellId, nFaces, ptIds);
+     int id = 0;
+     _nbNodesInFaces = 0;
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
+index 9786abf9aae..6d772a3cd4a 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
+@@ -67,6 +67,19 @@ bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode * node1, const SMDS_MeshNode
+ 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())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -79,6 +92,7 @@ bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -87,7 +101,7 @@ bool SMDS_VtkEdge::IsMediumNode(const SMDS_MeshNode* node) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   //MESSAGE("IsMediumNode " << npts  << " " << (node->getVtkId() == pts[npts-1]));
+   return ((npts == 3) && (node->getVtkId() == pts[2]));
+@@ -137,7 +151,8 @@ const SMDS_MeshNode*
+ SMDS_VtkEdge::GetNode(const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
+ }
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
+index 1389e0d3585..cb981bfb18e 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
+@@ -101,6 +101,19 @@ void SMDS_VtkFace::initQuadPoly(const std::vector<vtkIdType>& nodeIds, SMDS_Mesh
+ 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())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -113,6 +126,7 @@ bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -173,7 +187,8 @@ const SMDS_MeshNode*
+ SMDS_VtkFace::GetNode(const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
+ }
+@@ -186,7 +201,8 @@ SMDS_VtkFace::GetNode(const int ind) const
+ int SMDS_VtkFace::GetNodeIndex( const SMDS_MeshNode* node ) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   for ( vtkIdType i = 0; i < npts; ++i )
+     if ( pts[i] == node->getVtkId() )
+@@ -251,7 +267,7 @@ bool SMDS_VtkFace::IsMediumNode(const SMDS_MeshNode* node) const
+     return false;
+   }
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   vtkIdType nodeId = node->getVtkId();
+   for (int rank = 0; rank < npts; rank++)
+@@ -356,11 +372,18 @@ SMDS_NodeIteratorPtr SMDS_VtkFace::interlacedNodesIterator() const
+ 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();
+ }
+diff --git src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
+index 015edf75fd2..19ebd0746c8 100644
+--- src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
++++ src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
+@@ -133,6 +133,19 @@ void SMDS_VtkVolume::initPoly(const std::vector<vtkIdType>& nodeIds,
+ 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())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -145,6 +158,7 @@ bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -207,7 +221,7 @@ int SMDS_VtkVolume::NbFaces() const
+     case VTK_POLYHEDRON:
+       {
+         vtkIdType nFaces = 0;
+-        vtkIdType* ptIds = 0;
++        vtkIdTypePtr ptIds = 0;
+         grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+         nbFaces = nFaces;
+         break;
+@@ -236,7 +250,7 @@ int SMDS_VtkVolume::NbNodes() const
+   else
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -276,7 +290,7 @@ int SMDS_VtkVolume::NbEdges() const
+     case VTK_POLYHEDRON:
+       {
+         vtkIdType nFaces = 0;
+-        vtkIdType* ptIds = 0;
++        vtkIdTypePtr ptIds = 0;
+         grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+         nbEdges = 0;
+         int id = 0;
+@@ -312,7 +326,7 @@ int SMDS_VtkVolume::NbFaceNodes(const int face_ind) const
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -342,7 +356,7 @@ const SMDS_MeshNode* SMDS_VtkVolume::GetFaceNode(const int face_ind, const int n
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -372,7 +386,7 @@ std::vector<int> SMDS_VtkVolume::GetQuantities() const
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -430,7 +444,7 @@ const SMDS_MeshNode* SMDS_VtkVolume::GetNode(const int ind) const
+   if ( aVtkType == VTK_POLYHEDRON)
+   {
*** 84 LINES SKIPPED ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202107132115.16DLFcuK079479>