PR: adjust points number

This commit is contained in:
prascle 2010-02-01 13:51:19 +00:00
parent ea70fb0809
commit faf44b9356
5 changed files with 27 additions and 6 deletions

View File

@ -63,7 +63,7 @@ using namespace std;
#endif #endif
#ifdef _DEBUG_ #ifdef _DEBUG_
static int MYDEBUG = 0; static int MYDEBUG = 1;
static int MYDEBUGWITHFILES = 0; static int MYDEBUGWITHFILES = 0;
#else #else
static int MYDEBUG = 0; static int MYDEBUG = 0;
@ -132,11 +132,13 @@ static inline vtkIdType getCellType( const SMDSAbs_ElementType theType,
//================================================================================= //=================================================================================
SMESH_VisualObjDef::SMESH_VisualObjDef() SMESH_VisualObjDef::SMESH_VisualObjDef()
{ {
MESSAGE("---------------------------------------------SMESH_VisualObjDef::SMESH_VisualObjDef");
myGrid = vtkUnstructuredGrid::New(); myGrid = vtkUnstructuredGrid::New();
} }
SMESH_VisualObjDef::~SMESH_VisualObjDef() SMESH_VisualObjDef::~SMESH_VisualObjDef()
{ {
if ( MYDEBUG ) MESSAGE("---------------------------------------------SMESH_VisualObjDef::~SMESH_VisualObjDef");
//if ( MYDEBUG )
MESSAGE( "~SMESH_MeshObj - myGrid->GetReferenceCount() = " << myGrid->GetReferenceCount() ); MESSAGE( "~SMESH_MeshObj - myGrid->GetReferenceCount() = " << myGrid->GetReferenceCount() );
myGrid->Delete(); myGrid->Delete();
} }
@ -236,9 +238,12 @@ void SMESH_VisualObjDef::buildPrs()
// myGrid->SetCells( 0, 0, 0 ); // myGrid->SetCells( 0, 0, 0 );
// throw; // throw;
// } // }
myGrid = GetMesh()->getGrid(); MESSAGE("----------------------------------------------------------SMESH_VisualObjDef::buildPrs");
vtkUnstructuredGrid *theGrid = GetMesh()->getGrid();
if( MYDEBUG ) MESSAGE( "Update - myGrid->GetNumberOfCells() = "<<myGrid->GetNumberOfCells() ); myGrid->ShallowCopy(theGrid);
MESSAGE(myGrid->GetReferenceCount());
MESSAGE( "Update - myGrid->GetNumberOfCells() = "<<myGrid->GetNumberOfCells() );
MESSAGE( "Update - myGrid->GetNumberOfPoints() = "<<myGrid->GetNumberOfPoints() );
if( MYDEBUGWITHFILES ) SMESH::WriteUnstructuredGrid( myGrid,"/tmp/buildPrs" ); if( MYDEBUGWITHFILES ) SMESH::WriteUnstructuredGrid( myGrid,"/tmp/buildPrs" );
} }

View File

@ -39,6 +39,7 @@
#include "SMDS_SpacePosition.hxx" #include "SMDS_SpacePosition.hxx"
#include <vtkUnstructuredGrid.h> #include <vtkUnstructuredGrid.h>
#include <vtkUnsignedCharArray.h>
#include <algorithm> #include <algorithm>
#include <map> #include <map>
@ -2783,7 +2784,7 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem,
void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem) void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem)
{ {
int elemId = elem->GetID(); int elemId = elem->GetID();
//MESSAGE("SMDS_Mesh::RemoveFreeElement " << elemId); MESSAGE("SMDS_Mesh::RemoveFreeElement " << elemId);
SMDSAbs_ElementType aType = elem->GetType(); SMDSAbs_ElementType aType = elem->GetType();
SMDS_MeshElement* todest = (SMDS_MeshElement*)(elem); SMDS_MeshElement* todest = (SMDS_MeshElement*)(elem);
if (aType == SMDSAbs_Node) { if (aType == SMDSAbs_Node) {
@ -2801,6 +2802,8 @@ void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem)
// this methods is only for meshes without descendants // this methods is only for meshes without descendants
return; return;
int vtkid = this->fromSmdsToVtk(elemId);
// Remove element from <InverseElements> of its nodes // Remove element from <InverseElements> of its nodes
SMDS_ElemIteratorPtr itn = elem->nodesIterator(); SMDS_ElemIteratorPtr itn = elem->nodesIterator();
while (itn->more()) { while (itn->more()) {
@ -2835,6 +2838,9 @@ void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem)
break; break;
} }
myElementIDFactory->ReleaseID(elemId); myElementIDFactory->ReleaseID(elemId);
this->myGrid->GetCellTypesArray()->SetValue(vtkid, VTK_EMPTY_CELL);
// --- to do: keep vtkid in a list of reusable cells
} }
} }
@ -3582,3 +3588,9 @@ void SMDS_Mesh::incrementCellsCapacity(int nbCells)
MESSAGE(" ------------------- resize myCells " << val << " --> " << val + nbCells); MESSAGE(" ------------------- resize myCells " << val << " --> " << val + nbCells);
myNodes.resize(val +nbCells, 0); myNodes.resize(val +nbCells, 0);
} }
void SMDS_Mesh::adjustStructure()
{
myGrid->GetPoints()->GetData()->SetNumberOfTuples(myNodeIDFactory->GetMaxID()+1);
}

View File

@ -568,6 +568,7 @@ public:
void incrementNodesCapacity(int nbNodes); void incrementNodesCapacity(int nbNodes);
void incrementCellsCapacity(int nbCells); void incrementCellsCapacity(int nbCells);
void adjustStructure();
int myCellLinksSize; int myCellLinksSize;

View File

@ -29,6 +29,8 @@ public:
void BuildLinks(); // initialise un SMDS_CellLinks; void BuildLinks(); // initialise un SMDS_CellLinks;
SMDS_CellLinks* GetCellLinks(); SMDS_CellLinks* GetCellLinks();
vtkIdType GetCellArraySize() { return (this->Connectivity ? this->Connectivity->GetSize() : 0); };
//virtual void Delete(); //virtual void Delete();
static SMDS_UnstructuredGrid* New(); static SMDS_UnstructuredGrid* New();
protected: protected:

View File

@ -295,6 +295,7 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh,
MEMOSTAT; MEMOSTAT;
SMESHDS_Mesh *myMesh = aMesh.GetMeshDS(); SMESHDS_Mesh *myMesh = aMesh.GetMeshDS();
myMesh->adjustStructure();
list<int> listind = myMesh->SubMeshIndices(); list<int> listind = myMesh->SubMeshIndices();
list<int>::iterator it = listind.begin(); list<int>::iterator it = listind.begin();
int total = 0; int total = 0;