X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_Object.cxx;h=ca0e7418ef165dd24c7bd0258e2cdca02fa0c847;hp=6621177cc32ed4f904eacaeaba8602d65d28dce2;hb=57b43b4d010e2d0a1529d3c131bbb9d416e63258;hpb=e4737e85f0da6d3f90fd08f6be1c2825195fe16f diff --git a/src/OBJECT/SMESH_Object.cxx b/src/OBJECT/SMESH_Object.cxx index 6621177cc..ca0e7418e 100644 --- a/src/OBJECT/SMESH_Object.cxx +++ b/src/OBJECT/SMESH_Object.cxx @@ -25,22 +25,25 @@ // Author : Nicolas REJNERI // Module : SMESH -#include "SMESH_Object.h" +#include "SMESH_ObjectDef.h" +#include "SMESH_ActorUtils.h" + #include "SMDS_Mesh.hxx" -#include "SALOME_ExtractUnstructuredGrid.h" #include "SMESH_Actor.h" +#include "SMESH_ControlsDef.hxx" +#include "SalomeApp_Application.h" +#include "VTKViewer_ExtractUnstructuredGrid.h" +#include "VTKViewer_CellLocationsArray.h" +#include CORBA_SERVER_HEADER(SMESH_Gen) #include CORBA_SERVER_HEADER(SALOME_Exception) #include #include -#include #include #include #include -#include -#include #include #include @@ -68,205 +71,8 @@ static int MYDEBUGWITHFILES = 0; #endif -void WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid, const char* theFileName){ - vtkUnstructuredGridWriter* aWriter = vtkUnstructuredGridWriter::New(); - aWriter->SetFileName(theFileName); - aWriter->SetInput(theGrid); - if(theGrid->GetNumberOfCells()){ - aWriter->Write(); - } - aWriter->Delete(); -} - - -namespace{ - - inline const SMDS_MeshNode* FindNode(const SMDS_Mesh* theMesh, int theId){ - if(const SMDS_MeshNode* anElem = theMesh->FindNode(theId)) return anElem; - EXCEPTION(runtime_error,"SMDS_Mesh::FindNode - cannot find a SMDS_MeshNode for ID = "<FindElement(theId)) return anElem; - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot find a SMDS_MeshElement for ID = "<AddNodeWithID(aCoords[aCoordId], - aCoords[aCoordId+1], - aCoords[aCoordId+2], - anIndexes[anElemId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddNodeWithID for ID = "<AddEdgeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddEdgeWithID for ID = "<AddFaceWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<AddFaceWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId+5], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId+5], - anIndexes[anIndexId+6], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId+5], - anIndexes[anIndexId+6], - anIndexes[anIndexId+7], - anIndexes[anIndexId+8], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<2 ) return VTK_POLYGON; + else if ( theNbNodes == 3 ) return VTK_TRIANGLE; + else if ( theNbNodes == 4 ) return VTK_QUAD; + else if ( theNbNodes == 6 ) return VTK_QUADRATIC_TRIANGLE; + else if ( theNbNodes == 8 ) return VTK_QUADRATIC_QUAD; + else return VTK_EMPTY_CELL; + + case SMDSAbs_Volume: + if (thePoly && theNbNodes>3 ) return VTK_CONVEX_POINT_SET; + else if ( theNbNodes == 4 ) return VTK_TETRA; + else if ( theNbNodes == 5 ) return VTK_PYRAMID; + else if ( theNbNodes == 6 ) return VTK_WEDGE; + else if ( theNbNodes == 8 ) return VTK_HEXAHEDRON; + else if ( theNbNodes == 10 ) { + return VTK_QUADRATIC_TETRA; + } + else if ( theNbNodes == 20 ) { + return VTK_QUADRATIC_HEXAHEDRON; + } + else if ( theNbNodes==13 || theNbNodes==15 ) { + return VTK_CONVEX_POINT_SET; + } + else return VTK_EMPTY_CELL; default: return VTK_EMPTY_CELL; } } //================================================================================= -// functions : SMESH_VisualObj +// functions : SMESH_VisualObjDef // purpose : Constructor //================================================================================= -SMESH_VisualObj::SMESH_VisualObj() +SMESH_VisualObjDef::SMESH_VisualObjDef() { myGrid = vtkUnstructuredGrid::New(); } -SMESH_VisualObj::~SMESH_VisualObj() +SMESH_VisualObjDef::~SMESH_VisualObjDef() { if ( MYDEBUG ) MESSAGE( "~SMESH_MeshObj - myGrid->GetReferenceCount() = " << myGrid->GetReferenceCount() ); @@ -314,37 +139,37 @@ SMESH_VisualObj::~SMESH_VisualObj() // functions : GetNodeObjId, GetNodeVTKId, GetElemObjId, GetElemVTKId // purpose : Methods for retrieving VTK IDs by SMDS IDs and vice versa //================================================================================= -vtkIdType SMESH_VisualObj::GetNodeObjId( int theVTKID ) +vtkIdType SMESH_VisualObjDef::GetNodeObjId( int theVTKID ) { return myVTK2SMDSNodes.find(theVTKID) == myVTK2SMDSNodes.end() ? -1 : myVTK2SMDSNodes[theVTKID]; } -vtkIdType SMESH_VisualObj::GetNodeVTKId( int theObjID ) +vtkIdType SMESH_VisualObjDef::GetNodeVTKId( int theObjID ) { return mySMDS2VTKNodes.find(theObjID) == mySMDS2VTKNodes.end() ? -1 : mySMDS2VTKNodes[theObjID]; } -vtkIdType SMESH_VisualObj::GetElemObjId( int theVTKID ) +vtkIdType SMESH_VisualObjDef::GetElemObjId( int theVTKID ) { return myVTK2SMDSElems.find(theVTKID) == myVTK2SMDSElems.end() ? -1 : myVTK2SMDSElems[theVTKID]; } -vtkIdType SMESH_VisualObj::GetElemVTKId( int theObjID ) +vtkIdType SMESH_VisualObjDef::GetElemVTKId( int theObjID ) { return mySMDS2VTKElems.find(theObjID) == mySMDS2VTKElems.end() ? -1 : mySMDS2VTKElems[theObjID]; } //================================================================================= -// function : SMESH_VisualObj::createPoints +// function : SMESH_VisualObjDef::createPoints // purpose : Create points from nodes //================================================================================= -void SMESH_VisualObj::createPoints( vtkPoints* thePoints ) +void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints ) { if ( thePoints == 0 ) return; TEntityList aNodes; - vtkIdType nbNodes = GetEntities( SMESH::NODE, aNodes ); + vtkIdType nbNodes = GetEntities( SMDSAbs_Node, aNodes ); thePoints->SetNumberOfPoints( nbNodes ); int nbPoints = 0; @@ -371,7 +196,7 @@ void SMESH_VisualObj::createPoints( vtkPoints* thePoints ) // function : buildPrs // purpose : create VTK cells( fill unstructured grid ) //================================================================================= -void SMESH_VisualObj::buildPrs() +void SMESH_VisualObjDef::buildPrs() { try { @@ -395,64 +220,54 @@ void SMESH_VisualObj::buildPrs() } if( MYDEBUG ) MESSAGE( "Update - myGrid->GetNumberOfCells() = "<GetNumberOfCells() ); - if( MYDEBUGWITHFILES ) WriteUnstructuredGrid( myGrid,"/tmp/buildPrs" ); + if( MYDEBUGWITHFILES ) SMESH::WriteUnstructuredGrid( myGrid,"/tmp/buildPrs" ); } //================================================================================= // function : buildNodePrs // purpose : create VTK cells for nodes //================================================================================= -void SMESH_VisualObj::buildNodePrs() +void SMESH_VisualObjDef::buildNodePrs() { vtkPoints* aPoints = vtkPoints::New(); createPoints( aPoints ); - int nbPoints = aPoints->GetNumberOfPoints(); myGrid->SetPoints( aPoints ); aPoints->Delete(); myGrid->SetCells( 0, 0, 0 ); +} - // Create cells - /* - vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds( 1 ); - - vtkCellArray *aCells = vtkCellArray::New(); - aCells->Allocate( 2 * nbPoints, 0 ); +//================================================================================= +// function : buildElemPrs +// purpose : Create VTK cells for elements +//================================================================================= - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents( 1 ); - aCellTypesArray->Allocate( nbPoints ); +namespace{ + typedef std::vector TConnect; - for( vtkIdType aCellId = 0; aCellId < nbPoints; aCellId++ ) + int GetConnect(const SMDS_ElemIteratorPtr& theNodesIter, + TConnect& theConnect) { - anIdList->SetId( 0, aCellId ); - aCells->InsertNextCell( anIdList ); - aCellTypesArray->InsertNextValue( VTK_VERTEX ); + theConnect.clear(); + for(; theNodesIter->more();) + theConnect.push_back(theNodesIter->next()); + return theConnect.size(); + } + + inline + void SetId(vtkIdList *theIdList, + const SMESH_VisualObjDef::TMapOfIds& theSMDS2VTKNodes, + const TConnect& theConnect, + int thePosition, + int theId) + { + theIdList->SetId(thePosition,theSMDS2VTKNodes.find(theConnect[theId]->GetID())->second); } - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents( 1 ); - aCellLocationsArray->SetNumberOfTuples( nbPoints ); - - aCells->InitTraversal(); - for( vtkIdType i = 0, *pts, npts; aCells->GetNextCell( npts, pts ); i++ ) - aCellLocationsArray->SetValue( i, aCells->GetTraversalLocation( npts ) ); - - myGrid->SetCells( aCellTypesArray, aCellLocationsArray, aCells ); - - aCellLocationsArray->Delete(); - aCellTypesArray->Delete(); - aCells->Delete(); - anIdList->Delete(); - */ } -//================================================================================= -// function : buildElemPrs -// purpose : Create VTK cells for elements -//================================================================================= -void SMESH_VisualObj::buildElemPrs() + +void SMESH_VisualObjDef::buildElemPrs() { // Create points @@ -466,16 +281,16 @@ void SMESH_VisualObj::buildElemPrs() // Calculate cells size - static SMESH::ElementType aTypes[ 3 ] = { SMESH::EDGE, SMESH::FACE, SMESH::VOLUME }; + static SMDSAbs_ElementType aTypes[ 3 ] = { SMDSAbs_Edge, SMDSAbs_Face, SMDSAbs_Volume }; // get entity data - map< int, int > nbEnts; - map< int, TEntityList > anEnts; + map nbEnts; + map anEnts; for ( int i = 0; i <= 2; i++ ) nbEnts[ aTypes[ i ] ] = GetEntities( aTypes[ i ], anEnts[ aTypes[ i ] ] ); - vtkIdType aCellsSize = 3 * nbEnts[ SMESH::EDGE ]; + vtkIdType aCellsSize = 3 * nbEnts[ SMDSAbs_Edge ]; for ( int i = 1; i <= 2; i++ ) // iterate through faces and volumes { @@ -488,7 +303,7 @@ void SMESH_VisualObj::buildElemPrs() } } - vtkIdType aNbCells = nbEnts[ SMESH::EDGE ] + nbEnts[ SMESH::FACE ] + nbEnts[ SMESH::VOLUME ]; + vtkIdType aNbCells = nbEnts[ SMDSAbs_Edge ] + nbEnts[ SMDSAbs_Face ] + nbEnts[ SMDSAbs_Volume ]; if ( MYDEBUG ) MESSAGE( "Update - aNbCells = "<X()<<","<Y()<<","<Z()<<")"< 0) { + for (vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++) + SetId(anIdList,mySMDS2VTKNodes,aConnect,aNodeId,aConnectivities[aNodeId]); + } + break; + } + default: + for( vtkIdType aNodeId = 0; aNodesIter->more(); aNodeId++ ){ + const SMDS_MeshElement* aNode = aNodesIter->next(); + anIdList->SetId( aNodeId, mySMDS2VTKNodes[aNode->GetID()] ); + } + } aConnectivity->InsertNextCell( anIdList ); - aCellTypesArray->InsertNextValue( getCellType( aTypes[ i ], aNbNodes ) ); + aCellTypesArray->InsertNextValue( getCellType( aType, anElem->IsPoly(), aNbNodes ) ); iElem++; } @@ -540,7 +418,7 @@ void SMESH_VisualObj::buildElemPrs() // Insert cells in grid - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); + VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New(); aCellLocationsArray->SetNumberOfComponents( 1 ); aCellLocationsArray->SetNumberOfTuples( aNbCells ); @@ -560,10 +438,10 @@ void SMESH_VisualObj::buildElemPrs() // function : GetEdgeNodes // purpose : Retrieve ids of nodes from edge of elements ( edge is numbered from 1 ) //================================================================================= -bool SMESH_VisualObj::GetEdgeNodes( const int theElemId, - const int theEdgeNum, - int& theNodeId1, - int& theNodeId2 ) const +bool SMESH_VisualObjDef::GetEdgeNodes( const int theElemId, + const int theEdgeNum, + int& theNodeId1, + int& theNodeId2 ) const { const SMDS_Mesh* aMesh = GetMesh(); if ( aMesh == 0 ) @@ -575,7 +453,7 @@ bool SMESH_VisualObj::GetEdgeNodes( const int theElemId, int nbNodes = anElem->NbNodes(); - if ( theEdgeNum < 1 || theEdgeNum > 4 || nbNodes != 3 && nbNodes != 4 || theEdgeNum > nbNodes ) + if ( theEdgeNum < 0 || theEdgeNum > 3 || nbNodes != 3 && nbNodes != 4 || theEdgeNum > nbNodes ) return false; int anIds[ nbNodes ]; @@ -584,10 +462,10 @@ bool SMESH_VisualObj::GetEdgeNodes( const int theElemId, while( anIter->more() ) anIds[ i++ ] = anIter->next()->GetID(); - if ( nbNodes != theEdgeNum ) + if ( theEdgeNum < nbNodes - 1 ) { - theNodeId1 = anIds[ theEdgeNum - 1 ]; - theNodeId2 = anIds[ theEdgeNum ]; + theNodeId1 = anIds[ theEdgeNum ]; + theNodeId2 = anIds[ theEdgeNum + 1 ]; } else { @@ -607,14 +485,11 @@ bool SMESH_VisualObj::GetEdgeNodes( const int theElemId, // function : SMESH_MeshObj // purpose : Constructor //================================================================================= -SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh) +SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh): + myClient(SalomeApp_Application::orb(),theMesh) { if ( MYDEBUG ) - MESSAGE("SMESH_MeshObj - theMesh->_is_nil() = "<_is_nil()); - - myMeshServer = SMESH::SMESH_Mesh::_duplicate( theMesh ); - myMeshServer->Register(); - myMesh = new SMDS_Mesh(); + MESSAGE("SMESH_MeshObj - this = "<_is_nil() = "<_is_nil()); } //================================================================================= @@ -623,8 +498,8 @@ SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh) //================================================================================= SMESH_MeshObj::~SMESH_MeshObj() { - myMeshServer->Destroy(); - delete myMesh; + if ( MYDEBUG ) + MESSAGE("SMESH_MeshObj - this = "<GetLog( theIsClear ); - CORBA::Long aLength = aSeq->length(); - - if( MYDEBUG ) MESSAGE( "Update: length of the script is "<RemoveNode( FindNode( myMesh, anIndexes[anElemId] ) ); - break; - - case SMESH::REMOVE_ELEMENT: - for( ; anElemId < aNbElems; anElemId++ ) - myMesh->RemoveElement( FindElement( myMesh, anIndexes[anElemId] ) ); - break; - - case SMESH::MOVE_NODE: - for(CORBA::Long aCoordId=0; anElemId < aNbElems; anElemId++, aCoordId+=3) - { - SMDS_MeshNode* node = - const_cast( FindNode( myMesh, anIndexes[anElemId] )); - node->setXYZ( aCoords[aCoordId], aCoords[aCoordId+1], aCoords[aCoordId+2] ); - } - break; - - case SMESH::CHANGE_ELEMENT_NODES: - for ( CORBA::Long i = 0; anElemId < aNbElems; anElemId++ ) - { - // find element - const SMDS_MeshElement* elem = FindElement( myMesh, anIndexes[i++] ); - // nb nodes - int nbNodes = anIndexes[i++]; - // nodes - ASSERT( nbNodes < 9 ); - const SMDS_MeshNode* aNodes[ 8 ]; - for ( int iNode = 0; iNode < nbNodes; iNode++ ) - aNodes[ iNode ] = FindNode( myMesh, anIndexes[i++] ); - // change - myMesh->ChangeElementNodes( elem, aNodes, nbNodes ); - } - break; - - case SMESH::RENUMBER: - for(CORBA::Long i=0; anElemId < aNbElems; anElemId++, i+=3) - { - myMesh->Renumber( anIndexes[i], anIndexes[i+1], anIndexes[i+2] ); - } - break; - - default:; - } - } - } - catch ( SALOME::SALOME_Exception& exc ) - { - INFOS("Following exception was cought:\n\t"<NbNodes() = "<NbNodes()); - MESSAGE("Update - myMesh->NbEdges() = "<NbEdges()); - MESSAGE("Update - myMesh->NbFaces() = "<NbFaces()); - MESSAGE("Update - myMesh->NbVolumes() = "<NbVolumes()); - } - - // Fill unstructured grid - buildPrs(); + if ( myClient.Update(theIsClear) ) + buildPrs(); // Fill unstructured grid } //================================================================================= @@ -742,7 +519,7 @@ void SMESH_MeshObj::Update( int theIsClear ) //================================================================================= int SMESH_MeshObj::GetElemDimension( const int theObjId ) { - const SMDS_MeshElement* anElem = myMesh->FindElement( theObjId ); + const SMDS_MeshElement* anElem = myClient->FindElement( theObjId ); if ( anElem == 0 ) return 0; @@ -760,28 +537,28 @@ int SMESH_MeshObj::GetElemDimension( const int theObjId ) // function : GetEntities // purpose : Get entities of specified type. Return number of entities //================================================================================= -int SMESH_MeshObj::GetNbEntities( const SMESH::ElementType theType) const +int SMESH_MeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const { switch ( theType ) { - case SMESH::NODE: + case SMDSAbs_Node: { - return myMesh->NbNodes(); + return myClient->NbNodes(); } break; - case SMESH::EDGE: + case SMDSAbs_Edge: { - return myMesh->NbEdges(); + return myClient->NbEdges(); } break; - case SMESH::FACE: + case SMDSAbs_Face: { - return myMesh->NbFaces(); + return myClient->NbFaces(); } break; - case SMESH::VOLUME: + case SMDSAbs_Volume: { - return myMesh->NbVolumes(); + return myClient->NbVolumes(); } break; default: @@ -790,33 +567,33 @@ int SMESH_MeshObj::GetNbEntities( const SMESH::ElementType theType) const } } -int SMESH_MeshObj::GetEntities( const SMESH::ElementType theType, TEntityList& theObjs ) const +int SMESH_MeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theObjs ) const { theObjs.clear(); switch ( theType ) { - case SMESH::NODE: + case SMDSAbs_Node: { - SMDS_NodeIteratorPtr anIter = myMesh->nodesIterator(); + SMDS_NodeIteratorPtr anIter = myClient->nodesIterator(); while ( anIter->more() ) theObjs.push_back( anIter->next() ); } break; - case SMESH::EDGE: + case SMDSAbs_Edge: { - SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator(); + SMDS_EdgeIteratorPtr anIter = myClient->edgesIterator(); while ( anIter->more() ) theObjs.push_back( anIter->next() ); } break; - case SMESH::FACE: + case SMDSAbs_Face: { - SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); + SMDS_FaceIteratorPtr anIter = myClient->facesIterator(); while ( anIter->more() ) theObjs.push_back( anIter->next() ); } break; - case SMESH::VOLUME: + case SMDSAbs_Volume: { - SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator(); + SMDS_VolumeIteratorPtr anIter = myClient->volumesIterator(); while ( anIter->more() ) theObjs.push_back( anIter->next() ); } break; @@ -842,7 +619,7 @@ void SMESH_MeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor //================================================================================= bool SMESH_MeshObj::IsNodePrs() const { - return myMesh->NbEdges() == 0 &&myMesh->NbFaces() == 0 &&myMesh->NbVolumes() == 0 ; + return myClient->NbEdges() == 0 &&myClient->NbFaces() == 0 && myClient->NbVolumes() == 0 ; } @@ -964,14 +741,14 @@ static int getNodesFromElems( SMESH::long_array_var& theElemIds, // function : getPointers // purpose : Get std::list from list of IDs //================================================================================= -static int getPointers( const SMESH::ElementType theRequestType, +static int getPointers( const SMDSAbs_ElementType theRequestType, SMESH::long_array_var& theElemIds, const SMDS_Mesh* theMesh, std::list& theResList ) { for ( CORBA::Long i = 0, n = theElemIds->length(); i < n; i++ ) { - const SMDS_MeshElement* anElem = theRequestType == SMESH::NODE + const SMDS_MeshElement* anElem = theRequestType == SMDSAbs_Node ? theMesh->FindNode( theElemIds[ i ] ) : theMesh->FindElement( theElemIds[ i ] ); if ( anElem != 0 ) @@ -986,15 +763,15 @@ static int getPointers( const SMESH::ElementType theRequestType, // function : GetEntities // purpose : Get entities of specified type. Return number of entities //================================================================================= -int SMESH_GroupObj::GetNbEntities( const SMESH::ElementType theType) const +int SMESH_GroupObj::GetNbEntities( const SMDSAbs_ElementType theType) const { - if(myGroupServer->GetType() == theType){ + if(SMDSAbs_ElementType(myGroupServer->GetType()) == theType){ return myGroupServer->Size(); } return 0; } -int SMESH_GroupObj::GetEntities( const SMESH::ElementType theType, TEntityList& theResList ) const +int SMESH_GroupObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const { theResList.clear(); SMDS_Mesh* aMesh = myMeshObj->GetMesh(); @@ -1002,12 +779,12 @@ int SMESH_GroupObj::GetEntities( const SMESH::ElementType theType, TEntityList& if ( myGroupServer->Size() == 0 || aMesh == 0 ) return 0; - SMESH::ElementType aGrpType = myGroupServer->GetType(); + SMDSAbs_ElementType aGrpType = SMDSAbs_ElementType(myGroupServer->GetType()); SMESH::long_array_var anIds = myGroupServer->GetListOfID(); if ( aGrpType == theType ) return getPointers( theType, anIds, aMesh, theResList ); - else if ( theType == SMESH::NODE ) + else if ( theType == SMDSAbs_Node ) return getNodesFromElems( anIds, aMesh, theResList ); else return 0; @@ -1044,20 +821,21 @@ SMESH_subMeshObj::~SMESH_subMeshObj() // function : GetEntities // purpose : Get entities of specified type. Return number of entities //================================================================================= -int SMESH_subMeshObj::GetNbEntities( const SMESH::ElementType theType) const +int SMESH_subMeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const { switch ( theType ) { - case SMESH::NODE: + case SMDSAbs_Node: { return mySubMeshServer->GetNumberOfNodes( false ); } break; - case SMESH::EDGE: - case SMESH::FACE: - case SMESH::VOLUME: + case SMDSAbs_Edge: + case SMDSAbs_Face: + case SMDSAbs_Volume: { - SMESH::long_array_var anIds = mySubMeshServer->GetElementsByType( theType ); + SMESH::long_array_var anIds = + mySubMeshServer->GetElementsByType( SMESH::ElementType(theType) ); return anIds->length(); } default: @@ -1066,7 +844,7 @@ int SMESH_subMeshObj::GetNbEntities( const SMESH::ElementType theType) const } } -int SMESH_subMeshObj::GetEntities( const SMESH::ElementType theType, TEntityList& theResList ) const +int SMESH_subMeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const { theResList.clear(); @@ -1078,22 +856,23 @@ int SMESH_subMeshObj::GetEntities( const SMESH::ElementType theType, TEntityList if ( isNodal ) { - if ( theType == SMESH::NODE ) + if ( theType == SMDSAbs_Node ) { SMESH::long_array_var anIds = mySubMeshServer->GetNodesId(); - return getPointers( SMESH::NODE, anIds, aMesh, theResList ); + return getPointers( SMDSAbs_Node, anIds, aMesh, theResList ); } } else { - if ( theType == SMESH::NODE ) + if ( theType == SMDSAbs_Node ) { SMESH::long_array_var anIds = mySubMeshServer->GetElementsId(); return getNodesFromElems( anIds, aMesh, theResList ); } else { - SMESH::long_array_var anIds = mySubMeshServer->GetElementsByType( theType ); + SMESH::long_array_var anIds = + mySubMeshServer->GetElementsByType( SMESH::ElementType(theType) ); return getPointers( theType, anIds, aMesh, theResList ); } } @@ -1109,15 +888,3 @@ bool SMESH_subMeshObj::IsNodePrs() const { return mySubMeshServer->GetNumberOfElements() == 0; } - - - - - - - - - - - -