From bd90728f886bbeb6d69aafd4f68f934109b96f91 Mon Sep 17 00:00:00 2001 From: Louis Gombert Date: Thu, 27 Nov 2025 19:45:04 +0100 Subject: [PATCH 1/6] Smesh: Remove the VTK_CELL_ARRAY_V2 compatibility define This define was introduced in 9.0 for compatiblity with vtk 8.X, and removed for VTK 9.6. As we now support VTK>=9.1, it is not necessary to keep it. --- .../salomesmesh/inc/SMDS_MeshElement.hxx | 4 --- .../salomesmesh/inc/SMDS_UnstructuredGrid.hxx | 8 ++--- .../salomesmesh/src/SMDS/SMDS_BallElement.cpp | 7 ---- .../salomesmesh/src/SMDS/SMDS_Mesh.cpp | 8 ++--- .../src/SMDS/SMDS_Mesh0DElement.cpp | 13 ------- .../src/SMDS/SMDS_UnstructuredGrid.cpp | 36 ++----------------- .../salomesmesh/src/SMDS/SMDS_VtkEdge.cpp | 15 -------- .../salomesmesh/src/SMDS/SMDS_VtkFace.cpp | 23 ------------ .../salomesmesh/src/SMDS/SMDS_VtkVolume.cpp | 15 -------- src/Mod/Fem/App/PropertyPostDataObject.cpp | 2 -- src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp | 4 --- 11 files changed, 7 insertions(+), 128 deletions(-) diff --git a/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx b/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx index d97a37bc51..184e10d9c1 100644 --- a/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx +++ b/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 a/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx b/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx index f02337cf52..4baa06f2a2 100644 --- a/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx +++ b/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx @@ -95,14 +95,10 @@ public: std::map >& nodeQuadDomains); vtkCellLinks* GetLinks() { -#ifdef VTK_CELL_ARRAY_V2 - #if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER_QUICK >= 90300000000 return static_cast(vtkUnstructuredGrid::GetLinks()); - #else - return static_cast(GetCellLinks()); - #endif #else - return Links; + return static_cast(GetCellLinks()); #endif } SMDS_Downward* getDownArray(unsigned char vtkType) diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp index c5fd8c91cd..e257960ac6 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp @@ -67,16 +67,9 @@ void SMDS_BallElement::SetDiameter(double diameter) bool SMDS_BallElement::ChangeNode (const SMDS_MeshNode * node) { vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); -#ifdef VTK_CELL_ARRAY_V2 vtkNew cellPoints; grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); cellPoints->SetId(0, node->getVtkId()); -#else - vtkIdType npts = 0; - vtkIdType* pts = 0; - grid->GetCellPoints(myVtkID, npts, pts); - pts[0] = node->getVtkId(); -#endif SMDS_Mesh::_meshList[myMeshId]->setMyModified(); return true; } diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp index baa6eadc93..012a4d908c 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp @@ -4712,14 +4712,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_QUICK >= 90300000000 vtkCellLinks *links = static_cast(myGrid->GetLinks()); - #else - vtkCellLinks *links = static_cast(myGrid->GetCellLinks()); - #endif #else - vtkCellLinks *links = myGrid->GetCellLinks(); + vtkCellLinks *links = static_cast(myGrid->GetCellLinks()); #endif for (int i=0; igetGrid(); -#ifdef VTK_CELL_ARRAY_V2 vtkNew cellPoints; grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); if (nbNodes != cellPoints->GetNumberOfIds()) @@ -156,18 +155,6 @@ bool SMDS_Mesh0DElement::ChangeNodes(const SMDS_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 a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp index 4e9d6dc057..bedf100002 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp @@ -341,11 +341,7 @@ 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); @@ -965,7 +961,6 @@ void SMDS_UnstructuredGrid::GetNodeIds(std::set& nodeSet, int downId, unsig */ void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map localClonedNodeIds) { -#ifdef VTK_CELL_ARRAY_V2 vtkNew cellPoints; this->GetCellPoints(vtkVolId, cellPoints.GetPointer()); for (vtkIdType i = 0; i < cellPoints->GetNumberOfIds(); i++) @@ -979,22 +974,6 @@ void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map 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 +1003,16 @@ 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,3,0) GetLinks()->BuildLinks(this); - #else +#else GetLinks()->SetDataSet(this); 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. diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp index 6d772a3cd4..d36e020492 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp @@ -67,7 +67,6 @@ 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 cellPoints; grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); if (nbNodes != cellPoints->GetNumberOfIds()) @@ -79,20 +78,6 @@ bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes) { 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; } diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp index cb981bfb18..4528cd7b5f 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp @@ -101,7 +101,6 @@ void SMDS_VtkFace::initQuadPoly(const std::vector& 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 cellPoints; grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); if (nbNodes != cellPoints->GetNumberOfIds()) @@ -113,20 +112,6 @@ bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes) { 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::interlacedNodesIterator() const void SMDS_VtkFace::ChangeApex(SMDS_MeshNode* node) { vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); -#ifdef VTK_CELL_ARRAY_V2 vtkNew cellPoints; grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); grid->RemoveReferenceToCell(cellPoints->GetId(0), myVtkID); cellPoints->SetId(0, node->getVtkId()); -#else - vtkIdType npts = 0; - vtkIdType* pts = 0; - grid->GetCellPoints(myVtkID, npts, pts); - grid->RemoveReferenceToCell(pts[0], myVtkID); - pts[0] = node->getVtkId(); -#endif node->AddInverseElement(this), SMDS_Mesh::_meshList[myMeshId]->setMyModified(); } diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp index 19ebd0746c..ffc2aa5d25 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp @@ -133,7 +133,6 @@ void SMDS_VtkVolume::initPoly(const std::vector& 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 cellPoints; grid->GetCellPoints(myVtkID, cellPoints.GetPointer()); if (nbNodes != cellPoints->GetNumberOfIds()) @@ -145,20 +144,6 @@ bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes { 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; } diff --git a/src/Mod/Fem/App/PropertyPostDataObject.cpp b/src/Mod/Fem/App/PropertyPostDataObject.cpp index 7614aec5bd..df098cddfc 100644 --- a/src/Mod/Fem/App/PropertyPostDataObject.cpp +++ b/src/Mod/Fem/App/PropertyPostDataObject.cpp @@ -400,14 +400,12 @@ void PropertyPostDataObject::SaveDocFile(Base::Writer& writer) const 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(); diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp index fb4fffb409..034513abce 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp +++ b/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 // ---------------------------------------------------------------------------- From c9acda2a659f9ac079fefd2c0b8d6ff9c8a8238e Mon Sep 17 00:00:00 2001 From: Louis Gombert Date: Thu, 27 Nov 2025 20:46:57 +0100 Subject: [PATCH 2/6] Standardize VTK version check pre-processing directives Check for the build date of the exact introduction of the feature instead of the next tagged version --- .../salomesmesh/inc/SMDS_UnstructuredGrid.hxx | 3 ++- src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp | 3 ++- src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp | 13 +++++++------ .../salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp | 2 +- .../salomesmesh/src/SMESH/SMESH_MeshEditor.cpp | 5 +++-- src/Mod/Fem/App/FemPostPipeline.h | 2 +- src/Mod/Fem/App/PreCompiled.h | 2 +- 7 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx b/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx index 4baa06f2a2..e8bfa90f4e 100644 --- a/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx +++ b/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -95,7 +96,7 @@ public: std::map >& nodeQuadDomains); vtkCellLinks* GetLinks() { -#if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) return static_cast(vtkUnstructuredGrid::GetLinks()); #else return static_cast(GetCellLinks()); diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp index 012a4d908c..c9a8c4a90c 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -4712,7 +4713,7 @@ void SMDS_Mesh::dumpGrid(string ficdump) ficcon << endl; } ficcon << "-------------------------------- connectivity " << nbPoints << endl; -#if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) vtkCellLinks *links = static_cast(myGrid->GetLinks()); #else vtkCellLinks *links = static_cast(myGrid->GetCellLinks()); diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp index f5fc373f5d..420c3a9baf 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp @@ -31,6 +31,7 @@ #include "SMDS_IteratorOfElements.hxx" #include "SMDS_Mesh.hxx" #include +#include #include "utilities.h" #include "Utils_SALOME_Exception.hxx" @@ -69,7 +70,7 @@ void SMDS_MeshNode::init(int id, int meshId, int 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(grid->GetLinks()); #else SMDS_CellLinks *cellLinks = dynamic_cast(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(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); #else vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); @@ -259,7 +260,7 @@ elementsIterator(SMDSAbs_ElementType type) const return SMDS_MeshElement::elementsIterator(SMDSAbs_Node); else { -#if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); #else vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); @@ -362,7 +363,7 @@ void SMDS_MeshNode::AddInverseElement(const SMDS_MeshElement* ME) const SMDS_MeshCell *cell = dynamic_cast (ME); assert(cell); SMDS_UnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); -#if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) vtkCellLinks *Links = static_cast(grid->GetLinks()); #else vtkCellLinks *Links = static_cast(grid->GetCellLinks()); @@ -382,7 +383,7 @@ void SMDS_MeshNode::ClearInverseElements() bool SMDS_MeshNode::emptyInverseElements() { -#if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); #else vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); @@ -398,7 +399,7 @@ bool SMDS_MeshNode::emptyInverseElements() int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const { -#if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetLinks())->GetLink(myVtkID); #else vtkCellLinks::Link l = static_cast(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID); diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp index bedf100002..24b4ce856b 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp @@ -1006,7 +1006,7 @@ void SMDS_UnstructuredGrid::BuildLinks() this->Links = SMDS_CellLinks::New(); GetLinks()->Allocate(this->GetNumberOfPoints()); GetLinks()->Register(this); -#if VTK_VERSION_NUMBER < VTK_VERSION_CHECK(9,3,0) +#if VTK_VERSION_NUMBER < VTK_VERSION_CHECK(9, 2, 20221112) GetLinks()->BuildLinks(this); #else GetLinks()->SetDataSet(this); diff --git a/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp b/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp index 49b5f99cd6..990e310d3d 100644 --- a/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp +++ b/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp @@ -57,6 +57,7 @@ #include "utilities.h" #include "chrono.hxx" +#include #include #include #include @@ -11348,7 +11349,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) vtkCellLinks::Link l = static_cast(grid->GetLinks())->GetLink(oldId); #else vtkCellLinks::Link l = static_cast(grid->GetCellLinks())->GetLink(oldId); @@ -11712,7 +11713,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vectorfirst; //MESSAGE(" node " << oldId); -#if VTK_VERSION_NUMBER_QUICK >= 90300000000 +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20221112) vtkCellLinks::Link l = static_cast(grid->GetLinks())->GetLink(oldId); #else vtkCellLinks::Link l = static_cast(grid->GetCellLinks())->GetLink(oldId); diff --git a/src/Mod/Fem/App/FemPostPipeline.h b/src/Mod/Fem/App/FemPostPipeline.h index b8218f5fed..424fc1d826 100644 --- a/src/Mod/Fem/App/FemPostPipeline.h +++ b/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 diff --git a/src/Mod/Fem/App/PreCompiled.h b/src/Mod/Fem/App/PreCompiled.h index fd94578e95..fe5d767cbf 100644 --- a/src/Mod/Fem/App/PreCompiled.h +++ b/src/Mod/Fem/App/PreCompiled.h @@ -151,7 +151,7 @@ #include #include #include -#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 3, 0) +#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 2, 20230125) # include #endif #include From 6d4ce9e9b84963688e283adaf775ed40d5d775a1 Mon Sep 17 00:00:00 2001 From: Louis Gombert Date: Thu, 27 Nov 2025 21:17:44 +0100 Subject: [PATCH 3/6] Remove usages of non thread-safe vtkUnstructuredGrid::GetFaceStream This overload was deprecated in VTK 9.4 and removed in VTK 9.6. Replace with with the thread-safe version, that was already present in VTK 9.1 --- .../src/SMDS/SMDS_VtkCellIterator.cpp | 7 ++- .../salomesmesh/src/SMDS/SMDS_VtkVolume.cpp | 56 +++++++++++-------- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp index 63b6eabb70..acbb8f57c3 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp @@ -182,9 +182,10 @@ SMDS_VtkCellIteratorPolyH::SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, int vtkCel case SMDSEntity_Polyhedra: { //MESSAGE("SMDS_VtkCellIterator Polyhedra"); - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(_cellId, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( vtkCellId, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); int id = 0; _nbNodesInFaces = 0; for (int i = 0; i < nFaces; i++) diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp index ffc2aa5d25..7c1c0936de 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp @@ -205,9 +205,10 @@ int SMDS_VtkVolume::NbFaces() const break; case VTK_POLYHEDRON: { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); nbFaces = nFaces; break; } @@ -234,9 +235,10 @@ int SMDS_VtkVolume::NbNodes() const } else { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); int id = 0; for (int i = 0; i < nFaces; i++) { @@ -274,9 +276,10 @@ int SMDS_VtkVolume::NbEdges() const break; case VTK_POLYHEDRON: { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); nbEdges = 0; int id = 0; for (int i = 0; i < nFaces; i++) @@ -310,9 +313,10 @@ int SMDS_VtkVolume::NbFaceNodes(const int face_ind) const int nbNodes = 0; if (aVtkType == VTK_POLYHEDRON) { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); int id = 0; for (int i = 0; i < nFaces; i++) { @@ -340,9 +344,10 @@ const SMDS_MeshNode* SMDS_VtkVolume::GetFaceNode(const int face_ind, const int n const SMDS_MeshNode* node = 0; if (aVtkType == VTK_POLYHEDRON) { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); int id = 0; for (int i = 0; i < nFaces; i++) { @@ -370,9 +375,10 @@ std::vector SMDS_VtkVolume::GetQuantities() const vtkIdType aVtkType = grid->GetCellType(this->myVtkID); if (aVtkType == VTK_POLYHEDRON) { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); int id = 0; for (int i = 0; i < nFaces; i++) { @@ -428,9 +434,10 @@ const SMDS_MeshNode* SMDS_VtkVolume::GetNode(const int ind) const vtkIdType aVtkType = grid->GetCellType(this->myVtkID); if ( aVtkType == VTK_POLYHEDRON) { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); int id = 0, nbPoints = 0; for (int i = 0; i < nFaces; i++) { @@ -459,9 +466,10 @@ int SMDS_VtkVolume::GetNodeIndex( const SMDS_MeshNode* node ) const const vtkIdType aVtkType = grid->GetCellType(this->myVtkID); if ( aVtkType == VTK_POLYHEDRON) { - vtkIdType nFaces = 0; - vtkIdTypePtr ptIds = 0; - grid->GetFaceStream(this->myVtkID, nFaces, ptIds); + vtkNew faceStream; + grid->GetFaceStream( this->myVtkID, faceStream); + vtkIdType nFaces = faceStream->GetId(0); + vtkIdType *ptIds = faceStream->GetPointer(1); int id = 0; for (int iF = 0; iF < nFaces; iF++) { From ff3e419d2ea4603ed8a28d3777f0d75b2a2af194 Mon Sep 17 00:00:00 2001 From: Louis Gombert Date: Thu, 27 Nov 2025 23:10:21 +0100 Subject: [PATCH 4/6] smesh: update for VTK 9.4 polyhedron rework Implement new compactGrid method based on the upstream smesh version. The compatibility layer was removed for VTK 9.6. --- .../src/SMDS/SMDS_UnstructuredGrid.cpp | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp index 24b4ce856b..d2e90d7e58 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp @@ -250,6 +250,71 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector& 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 facesLoc_o; facesLoc_o->Initialize(); facesLoc_o->InsertNextValue(0); + vtkNew facesLoc_c; facesLoc_c->Initialize(); + vtkNew faces_o; faces_o->Initialize(); faces_o->InsertNextValue(0); + vtkNew faces_c; faces_c->Initialize(); + int newFaceId( 0 ); + vtkIdType facesLoc_o_cur(0),faces_o_cur(0); + // for ( vtkIdType newCellID = 0; newCellID < newCellSize; newCellID++ ) + for (int oldCellId = 0; oldCellId < oldCellSize; oldCellId++) + { + int newCellId = idCellsOldToNew[oldCellId]; + if ( this->Types->GetValue(newCellId) == VTK_POLYHEDRON ) + { + vtkIdType oldStartFaceLocOff = iniFaceLocO->GetValue( oldCellId ); + vtkIdType nCellFaces = iniFaceLocO->GetValue( oldCellId + 1 ) - oldStartFaceLocOff; + facesLoc_o_cur += nCellFaces; + facesLoc_o->InsertNextValue( facesLoc_o_cur ); + for ( int n = 0; n < nCellFaces; n++ ) + { + facesLoc_c->InsertNextValue( newFaceId++ ); + int curFaceId = iniFaceLocC->GetValue( oldStartFaceLocOff + n ); + int oldStartPtOfFaceOff = iniFaceO->GetValue( curFaceId ); + int nbOfPts = iniFaceO->GetValue( curFaceId + 1 ) - oldStartPtOfFaceOff; + faces_o_cur += nbOfPts; + faces_o->InsertNextValue( faces_o_cur ); + for( int m = 0 ; m < nbOfPts ; m++ ) + { + vtkIdType oldpt = iniFaceC->GetValue( oldStartPtOfFaceOff + m ); + int curPt = idNodesOldToNew[ oldpt ]; + faces_c->InsertNextValue( curPt ); + } + } + } + else + { + facesLoc_o->InsertNextValue(facesLoc_o_cur); + } + } + { + faces_o->Squeeze(); faces_c->Squeeze(); + facesLoc_o->Squeeze(); facesLoc_c->Squeeze(); + // + vtkNew outFaces; + outFaces->SetData( faces_o, faces_c ); + vtkNew outFaceLocations; + outFaceLocations->SetData( facesLoc_o, facesLoc_c ); + // + this->SetPolyhedralCells(newTypes, newConnectivity, outFaceLocations, outFaces); + } + } + else + { + { + this->SetCells(newTypes,newConnectivity); + } + //this->CellLocations = newLocations; + } +#else vtkIdTypeArray* thisFaceLocations = GetFaceLocations(); vtkIdTypeArray* thisFaces = GetFaces(); if (thisFaceLocations) @@ -297,6 +362,7 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector& idNodesOldToNew, int n { this->SetCells(newTypes, newLocations, newConnectivity, thisFaceLocations, thisFaces); } +#endif newPoints->Delete(); newTypes->Delete(); From 3a68d91ae306d88703d203d2ac8d41b2e5ce12dd Mon Sep 17 00:00:00 2001 From: Louis Gombert Date: Thu, 27 Nov 2025 23:22:36 +0100 Subject: [PATCH 5/6] smesh: update for VTK 9.6 Types array UG::Types is now a vtkDataArray, that should be accessed through GetCellType --- .../salomesmesh/src/SMDS/SMDS_Mesh.cpp | 108 ++++++++++++++++++ .../src/SMDS/SMDS_UnstructuredGrid.cpp | 15 +-- 2 files changed, 116 insertions(+), 7 deletions(-) diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp index c9a8c4a90c..a076d2fb6f 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp @@ -284,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; } @@ -344,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; } @@ -628,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; } @@ -735,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; } @@ -848,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; } @@ -983,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; } @@ -1105,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; } @@ -1308,7 +1336,11 @@ SMDS_Mesh::AddPolygonalFaceWithID (const vector & 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; } @@ -1373,7 +1405,11 @@ SMDS_Mesh::AddQuadPolygonalFaceWithID (const vector & 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; } @@ -1453,7 +1489,11 @@ SMDS_Mesh::AddPolyhedralVolumeWithID (const vector& 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; } @@ -1509,7 +1549,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeFromVtkIdsWithID(const std::vectorinit(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; } @@ -1568,7 +1612,11 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceFromVtkIdsWithID(const std::vector& 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; } @@ -1716,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; } @@ -1770,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; } @@ -2101,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; } @@ -3312,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++; } @@ -3417,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 } } @@ -3599,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; } @@ -3682,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; } @@ -3769,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; } @@ -3860,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; } @@ -3954,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; } @@ -4057,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; } @@ -4172,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; } @@ -4299,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; } @@ -4446,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; } @@ -4626,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; } diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp index d2e90d7e58..ce9b01a4d2 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp @@ -214,11 +214,11 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector& 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& 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) @@ -268,7 +268,7 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector& idNodesOldToNew, int n for (int oldCellId = 0; oldCellId < oldCellSize; oldCellId++) { int newCellId = idCellsOldToNew[oldCellId]; - if ( this->Types->GetValue(newCellId) == VTK_POLYHEDRON ) + if ( this->GetCellType(newCellId) == VTK_POLYHEDRON ) { vtkIdType oldStartFaceLocOff = iniFaceLocO->GetValue( oldCellId ); vtkIdType nCellFaces = iniFaceLocO->GetValue( oldCellId + 1 ) - oldStartFaceLocOff; @@ -327,7 +327,7 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector& 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) @@ -399,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 @@ -412,7 +412,7 @@ void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharArray *newTypes, 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]; @@ -1076,6 +1076,7 @@ void SMDS_UnstructuredGrid::BuildLinks() GetLinks()->BuildLinks(this); #else GetLinks()->SetDataSet(this); + std::cout << this->GetNumberOfPoints() << std::endl; GetLinks()->BuildLinks(); #endif GetLinks()->Delete(); From 261ca3905b47b251b0751fd7af45ad5c3fd129e4 Mon Sep 17 00:00:00 2001 From: Louis Gombert Date: Sun, 30 Nov 2025 18:36:20 +0100 Subject: [PATCH 6/6] Smesh: patch other VTK UG deprecations --- .../salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp index ce9b01a4d2..f5b91ff800 100644 --- a/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp +++ b/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp @@ -193,8 +193,8 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector& 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(); @@ -420,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++;