smesh: update for VTK 9.6 Types array

UG::Types is now a vtkDataArray, that should be accessed through GetCellType
This commit is contained in:
Louis Gombert
2025-11-27 23:22:36 +01:00
committed by Max Wilfinger
parent ff3e419d2e
commit 3a68d91ae3
2 changed files with 116 additions and 7 deletions

View File

@@ -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<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;
}
@@ -1373,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;
}
@@ -1453,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;
}
@@ -1509,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;
}
@@ -1568,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;
}
@@ -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;
}

View File

@@ -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)
@@ -268,7 +268,7 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& 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<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)
@@ -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();