From 55ab0926545e102d2ed587bf87c9a1c409a7d4e3 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 3 Mar 2021 13:22:36 +0300 Subject: [PATCH] Numerate elements starting from MAX_INT --- src/SMDS/SMDS_ElementFactory.cxx | 29 ++++++++++++++++++----------- src/SMDS/SMDS_Mesh.cxx | 1 + 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/SMDS/SMDS_ElementFactory.cxx b/src/SMDS/SMDS_ElementFactory.cxx index 1501b1eb5..1b968993f 100644 --- a/src/SMDS/SMDS_ElementFactory.cxx +++ b/src/SMDS/SMDS_ElementFactory.cxx @@ -39,6 +39,8 @@ namespace const int theDefaultShapeDim = 3; + const smIdType idShift = 2147483647; + // classes allowing to modify parameters of SMDS_Position stored in SMDS_ElementFactory struct _EdgePosition : public SMDS_EdgePosition @@ -113,6 +115,7 @@ smIdType SMDS_ElementFactory::GetFreeID() if ( myChunksWithUnused.empty() ) { smIdType id0 = myChunks.size() * theChunkSize + 1; + id0 += idShift; myChunks.push_back( new SMDS_ElementChunk( this, id0 )); } SMDS_ElementChunk * chunk = (*myChunksWithUnused.begin()); @@ -169,8 +172,9 @@ smIdType SMDS_ElementFactory::GetMinID() */ //================================================================================ -SMDS_MeshElement* SMDS_ElementFactory::NewElement( const smIdType id ) +SMDS_MeshElement* SMDS_ElementFactory::NewElement( const smIdType ID ) { + smIdType id = ID - idShift; smIdType iChunk = ( id - 1 ) / theChunkSize; smIdType index = ( id - 1 ) % theChunkSize; while ((smIdType) myChunks.size() <= iChunk ) @@ -200,8 +204,9 @@ SMDS_MeshElement* SMDS_ElementFactory::NewElement( const smIdType id ) */ //================================================================================ -const SMDS_MeshElement* SMDS_ElementFactory::FindElement( const smIdType id ) const +const SMDS_MeshElement* SMDS_ElementFactory::FindElement( const smIdType ID ) const { + smIdType id = ID -idShift; if ( id > 0 ) { smIdType iChunk = ( id - 1 ) / theChunkSize; @@ -223,11 +228,12 @@ const SMDS_MeshElement* SMDS_ElementFactory::FindElement( const smIdType id ) co */ //================================================================================ -smIdType SMDS_ElementFactory::FromVtkToSmds( vtkIdType vtkID ) +smIdType SMDS_ElementFactory::FromVtkToSmds( vtkIdType VTKID ) { + vtkIdType vtkID = VTKID - idShift; if ( vtkID >= 0 && vtkID < (vtkIdType)mySmdsIDs.size() ) return mySmdsIDs[vtkID] + 1; - return vtkID + 1; + return vtkID + 1 + idShift; } //================================================================================ @@ -244,8 +250,8 @@ void SMDS_ElementFactory::Free( const SMDS_MeshElement* e ) if ( !myVtkIDs.empty() ) { - size_t id = e->GetID() - 1; - size_t vtkID = e->GetVtkID(); + size_t id = e->GetID() - 1 - idShift; + size_t vtkID = e->GetVtkID() - idShift; if ( id < myVtkIDs.size() ) myVtkIDs[ id ] = -1; if ( vtkID < mySmdsIDs.size() ) @@ -616,17 +622,18 @@ smIdType SMDS_ElementChunk::GetID( const SMDS_MeshElement* e ) const void SMDS_ElementChunk::SetVTKID( const SMDS_MeshElement* e, const vtkIdType vtkID ) { - if ( e->GetID() - 1 != vtkID ) + smIdType id = e->GetID() - idShift; + if ( id - 1 != vtkID ) { - if ((smIdType) myFactory->myVtkIDs.size() <= e->GetID() - 1 ) + if ((smIdType) myFactory->myVtkIDs.size() <= id - 1 ) { vtkIdType i = (vtkIdType) myFactory->myVtkIDs.size(); - myFactory->myVtkIDs.resize( e->GetID() + 100 ); + myFactory->myVtkIDs.resize( id + 100 ); vtkIdType newSize = (vtkIdType) myFactory->myVtkIDs.size(); for ( ; i < newSize; ++i ) myFactory->myVtkIDs[i] = i; } - myFactory->myVtkIDs[ e->GetID() - 1 ] = vtkID; + myFactory->myVtkIDs[ id - 1 ] = vtkID; if ((vtkIdType) myFactory->mySmdsIDs.size() <= vtkID ) { @@ -647,7 +654,7 @@ void SMDS_ElementChunk::SetVTKID( const SMDS_MeshElement* e, const vtkIdType vtk vtkIdType SMDS_ElementChunk::GetVtkID( const SMDS_MeshElement* e ) const { - vtkIdType dfltVtkID = FromIdType(e->GetID() - 1); + vtkIdType dfltVtkID = FromIdType(e->GetID() - 1) - idShift; return ( dfltVtkID < (vtkIdType)myFactory->myVtkIDs.size() ) ? myFactory->myVtkIDs[ dfltVtkID ] : dfltVtkID; } diff --git a/src/SMDS/SMDS_Mesh.cxx b/src/SMDS/SMDS_Mesh.cxx index 10f3e1f57..a529ee447 100644 --- a/src/SMDS/SMDS_Mesh.cxx +++ b/src/SMDS/SMDS_Mesh.cxx @@ -2964,6 +2964,7 @@ void SMDS_Mesh::dumpGrid(std::string ficdump) void SMDS_Mesh::CompactMesh() { + return; this->myCompactTime = this->myModifTime; bool idsChange = HasNumerationHoles(); -- 2.39.2