// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
//
//
myReader.SetMeshId(-1);
myReader.Perform();
if(MYDEBUG){
- MESSAGE("MEDToMesh - _myMeshDS->NbNodes() = "<<_myMeshDS->NbNodes());
- MESSAGE("MEDToMesh - _myMeshDS->NbEdges() = "<<_myMeshDS->NbEdges());
- MESSAGE("MEDToMesh - _myMeshDS->NbFaces() = "<<_myMeshDS->NbFaces());
- MESSAGE("MEDToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes());
+ MESSAGE("UNVToMesh - _myMeshDS->NbNodes() = "<<_myMeshDS->NbNodes());
+ MESSAGE("UNVToMesh - _myMeshDS->NbEdges() = "<<_myMeshDS->NbEdges());
+ MESSAGE("UNVToMesh - _myMeshDS->NbFaces() = "<<_myMeshDS->NbFaces());
+ MESSAGE("UNVToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes());
+ }
+ SMDS_MeshGroup* aGroup = (SMDS_MeshGroup*) myReader.GetGroup();
+ if (aGroup != 0) {
+ TGroupNamesMap aGroupNames = myReader.GetGroupNamesMap();
+ //const TGroupIdMap& aGroupId = myReader.GetGroupIdMap();
+ aGroup->InitSubGroupsIterator();
+ while (aGroup->MoreSubGroups()) {
+ SMDS_MeshGroup* aSubGroup = (SMDS_MeshGroup*) aGroup->NextSubGroup();
+ std::string aName = aGroupNames[aSubGroup];
+ int aId;
+
+ SMESH_Group* aSMESHGroup = AddGroup( aSubGroup->GetType(), aName.c_str(), aId );
+ if ( aSMESHGroup ) {
+ if(MYDEBUG) MESSAGE("UNVToMesh - group added: "<<aName);
+ SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( aSMESHGroup->GetGroupDS() );
+ if ( aGroupDS ) {
+ aGroupDS->SetStoreName(aName.c_str());
+ aSubGroup->InitIterator();
+ const SMDS_MeshElement* aElement = 0;
+ while (aSubGroup->More()) {
+ aElement = aSubGroup->Next();
+ if (aElement) {
+ aGroupDS->SMDSGroup().Add(aElement);
+ }
+ }
+ if (aElement)
+ aGroupDS->SetType(aElement->GetType());
+ }
+ }
+ }
}
return 1;
}
int SMESH_Mesh::STLToMesh(const char* theFileName)
{
- if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<<theFileName);
+ if(MYDEBUG) MESSAGE("STLToMesh - theFileName = "<<theFileName);
if(_isShapeToMesh)
throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
_isShapeToMesh = true;
myReader.SetMeshId(-1);
myReader.Perform();
if(MYDEBUG){
- MESSAGE("MEDToMesh - _myMeshDS->NbNodes() = "<<_myMeshDS->NbNodes());
- MESSAGE("MEDToMesh - _myMeshDS->NbEdges() = "<<_myMeshDS->NbEdges());
- MESSAGE("MEDToMesh - _myMeshDS->NbFaces() = "<<_myMeshDS->NbFaces());
- MESSAGE("MEDToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes());
+ MESSAGE("STLToMesh - _myMeshDS->NbNodes() = "<<_myMeshDS->NbNodes());
+ MESSAGE("STLToMesh - _myMeshDS->NbEdges() = "<<_myMeshDS->NbEdges());
+ MESSAGE("STLToMesh - _myMeshDS->NbFaces() = "<<_myMeshDS->NbFaces());
+ MESSAGE("STLToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes());
}
return 1;
}
myWriter.SetFile(string(file));
myWriter.SetMesh(_myMeshDS);
myWriter.SetMeshId(_idDoc);
+ // myWriter.SetGroups(_mapGroup);
+
+ for ( map<int, SMESH_Group*>::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) {
+ SMESH_Group* aGroup = it->second;
+ SMESHDS_GroupBase* aGroupDS = aGroup->GetGroupDS();
+ if ( aGroupDS ) {
+ string aGroupName = aGroup->GetName();
+ aGroupDS->SetStoreName( aGroupName.c_str() );
+ myWriter.AddGroup( aGroupDS );
+ }
+ }
myWriter.Perform();
}
*
*/
//=============================================================================
-int SMESH_Mesh::NbEdges() throw(SALOME_Exception)
+int SMESH_Mesh::NbEdges(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
- return _myMeshDS->NbEdges();
+ if (order == ORDER_ANY)
+ return _myMeshDS->NbEdges();
+
+ int Nb = 0;
+ SMDS_EdgeIteratorPtr it = _myMeshDS->edgesIterator();
+ while (it->more()) {
+ const SMDS_MeshEdge* cur = it->next();
+ if ( order == ORDER_LINEAR && !cur->IsQuadratic() ||
+ order == ORDER_QUADRATIC && cur->IsQuadratic() )
+ Nb++;
+ }
+ return Nb;
}
//=============================================================================
*
*/
//=============================================================================
-int SMESH_Mesh::NbFaces() throw(SALOME_Exception)
+int SMESH_Mesh::NbFaces(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
- return _myMeshDS->NbFaces();
+ if (order == ORDER_ANY)
+ return _myMeshDS->NbFaces();
+
+ int Nb = 0;
+ SMDS_FaceIteratorPtr it = _myMeshDS->facesIterator();
+ while (it->more()) {
+ const SMDS_MeshFace* cur = it->next();
+ if ( order == ORDER_LINEAR && !cur->IsQuadratic() ||
+ order == ORDER_QUADRATIC && cur->IsQuadratic() )
+ Nb++;
+ }
+ return Nb;
}
///////////////////////////////////////////////////////////////////////////////
/// Return the number of 3 nodes faces in the mesh. This method run in O(n)
///////////////////////////////////////////////////////////////////////////////
-int SMESH_Mesh::NbTriangles() throw(SALOME_Exception)
+int SMESH_Mesh::NbTriangles(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
int Nb = 0;
SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
- //while(itFaces->more()) if(itFaces->next()->NbNodes()==3) Nb++;
- const SMDS_MeshFace * curFace;
while (itFaces->more()) {
- curFace = itFaces->next();
+ const SMDS_MeshFace* curFace = itFaces->next();
+ int nbnod = curFace->NbNodes();
if ( !curFace->IsPoly() &&
- ( curFace->NbNodes()==3 || curFace->NbNodes()==6 ) ) Nb++;
+ ( order == ORDER_ANY && (nbnod==3 || nbnod==6) ||
+ order == ORDER_LINEAR && nbnod==3 ||
+ order == ORDER_QUADRATIC && nbnod==6 ) )
+ Nb++;
}
return Nb;
}
///////////////////////////////////////////////////////////////////////////////
/// Return the number of 4 nodes faces in the mesh. This method run in O(n)
///////////////////////////////////////////////////////////////////////////////
-int SMESH_Mesh::NbQuadrangles() throw(SALOME_Exception)
+int SMESH_Mesh::NbQuadrangles(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
int Nb = 0;
SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
- //while(itFaces->more()) if(itFaces->next()->NbNodes()==4) Nb++;
- const SMDS_MeshFace * curFace;
while (itFaces->more()) {
- curFace = itFaces->next();
+ const SMDS_MeshFace* curFace = itFaces->next();
+ int nbnod = curFace->NbNodes();
if ( !curFace->IsPoly() &&
- ( curFace->NbNodes() == 4 || curFace->NbNodes()==8 ) ) Nb++;
+ ( order == ORDER_ANY && (nbnod==4 || nbnod==8) ||
+ order == ORDER_LINEAR && nbnod==4 ||
+ order == ORDER_QUADRATIC && nbnod==8 ) )
+ Nb++;
}
return Nb;
}
*
*/
//=============================================================================
-int SMESH_Mesh::NbVolumes() throw(SALOME_Exception)
+int SMESH_Mesh::NbVolumes(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
- return _myMeshDS->NbVolumes();
+ if (order == ORDER_ANY)
+ return _myMeshDS->NbVolumes();
+
+ int Nb = 0;
+ SMDS_VolumeIteratorPtr it = _myMeshDS->volumesIterator();
+ while (it->more()) {
+ const SMDS_MeshVolume* cur = it->next();
+ if ( order == ORDER_LINEAR && !cur->IsQuadratic() ||
+ order == ORDER_QUADRATIC && cur->IsQuadratic() )
+ Nb++;
+ }
+ return Nb;
}
-int SMESH_Mesh::NbTetras() throw(SALOME_Exception)
+int SMESH_Mesh::NbTetras(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
int Nb = 0;
SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
- //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==4) Nb++;
- const SMDS_MeshVolume * curVolume;
while (itVolumes->more()) {
- curVolume = itVolumes->next();
+ const SMDS_MeshVolume* curVolume = itVolumes->next();
+ int nbnod = curVolume->NbNodes();
if ( !curVolume->IsPoly() &&
- ( curVolume->NbNodes() == 4 || curVolume->NbNodes()==10 ) ) Nb++;
+ ( order == ORDER_ANY && (nbnod==4 || nbnod==10) ||
+ order == ORDER_LINEAR && nbnod==4 ||
+ order == ORDER_QUADRATIC && nbnod==10 ) )
+ Nb++;
}
return Nb;
}
-int SMESH_Mesh::NbHexas() throw(SALOME_Exception)
+int SMESH_Mesh::NbHexas(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
int Nb = 0;
SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
- //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==8) Nb++;
- const SMDS_MeshVolume * curVolume;
while (itVolumes->more()) {
- curVolume = itVolumes->next();
+ const SMDS_MeshVolume* curVolume = itVolumes->next();
+ int nbnod = curVolume->NbNodes();
if ( !curVolume->IsPoly() &&
- ( curVolume->NbNodes() == 8 || curVolume->NbNodes()==20 ) ) Nb++;
+ ( order == ORDER_ANY && (nbnod==8 || nbnod==20) ||
+ order == ORDER_LINEAR && nbnod==8 ||
+ order == ORDER_QUADRATIC && nbnod==20 ) )
+ Nb++;
}
return Nb;
}
-int SMESH_Mesh::NbPyramids() throw(SALOME_Exception)
+int SMESH_Mesh::NbPyramids(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
int Nb = 0;
SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
- //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==5) Nb++;
- const SMDS_MeshVolume * curVolume;
while (itVolumes->more()) {
- curVolume = itVolumes->next();
+ const SMDS_MeshVolume* curVolume = itVolumes->next();
+ int nbnod = curVolume->NbNodes();
if ( !curVolume->IsPoly() &&
- ( curVolume->NbNodes() == 5 || curVolume->NbNodes()==13 ) ) Nb++;
+ ( order == ORDER_ANY && (nbnod==5 || nbnod==13) ||
+ order == ORDER_LINEAR && nbnod==5 ||
+ order == ORDER_QUADRATIC && nbnod==13 ) )
+ Nb++;
}
return Nb;
}
-int SMESH_Mesh::NbPrisms() throw(SALOME_Exception)
+int SMESH_Mesh::NbPrisms(ElementOrder order) throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
int Nb = 0;
SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
- //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==6) Nb++;
- const SMDS_MeshVolume * curVolume;
while (itVolumes->more()) {
- curVolume = itVolumes->next();
+ const SMDS_MeshVolume* curVolume = itVolumes->next();
+ int nbnod = curVolume->NbNodes();
if ( !curVolume->IsPoly() &&
- ( curVolume->NbNodes() == 6 || curVolume->NbNodes()==15 ) ) Nb++;
+ ( order == ORDER_ANY && (nbnod==6 || nbnod==15) ||
+ order == ORDER_LINEAR && nbnod==6 ||
+ order == ORDER_QUADRATIC && nbnod==15 ) )
+ Nb++;
}
return Nb;
}
//=======================================================================
ostream& SMESH_Mesh::Dump(ostream& save)
{
- save << "========================== Dump contents of mesh ==========================" << endl;
- save << "1) Total number of nodes: " << NbNodes() << endl;
- save << "2) Total number of edges: " << NbEdges() << endl;
- save << "3) Total number of faces: " << NbFaces() << endl;
- if ( NbFaces() > 0 ) {
- int nb3 = NbTriangles();
- int nb4 = NbQuadrangles();
- save << "3.1.) Number of triangles: " << nb3 << endl;
- save << "3.2.) Number of quadrangles: " << nb4 << endl;
- if ( nb3 + nb4 != NbFaces() ) {
- map<int,int> myFaceMap;
- SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
- while( itFaces->more( ) ) {
- int nbNodes = itFaces->next()->NbNodes();
- if ( myFaceMap.find( nbNodes ) == myFaceMap.end() )
- myFaceMap[ nbNodes ] = 0;
- myFaceMap[ nbNodes ] = myFaceMap[ nbNodes ] + 1;
+ int clause = 0;
+ save << "========================== Dump contents of mesh ==========================" << endl << endl;
+ save << ++clause << ") Total number of nodes: " << NbNodes() << endl << endl;
+ for ( int isQuadratic = 0; isQuadratic < 2; ++isQuadratic )
+ {
+ string orderStr = isQuadratic ? "quadratic" : "linear";
+ ElementOrder order = isQuadratic ? ORDER_QUADRATIC : ORDER_LINEAR;
+
+ save << ++clause << ") Total number of " << orderStr << " edges: " << NbEdges(order) << endl;
+ save << ++clause << ") Total number of " << orderStr << " faces: " << NbFaces(order) << endl;
+ if ( NbFaces(order) > 0 ) {
+ int nb3 = NbTriangles(order);
+ int nb4 = NbQuadrangles(order);
+ save << clause << ".1.) Number of " << orderStr << " triangles: " << nb3 << endl;
+ save << clause << ".2.) Number of " << orderStr << " quadrangles: " << nb4 << endl;
+ if ( nb3 + nb4 != NbFaces(order) ) {
+ map<int,int> myFaceMap;
+ SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
+ while( itFaces->more( ) ) {
+ int nbNodes = itFaces->next()->NbNodes();
+ if ( myFaceMap.find( nbNodes ) == myFaceMap.end() )
+ myFaceMap[ nbNodes ] = 0;
+ myFaceMap[ nbNodes ] = myFaceMap[ nbNodes ] + 1;
+ }
+ save << clause << ".3.) Faces in detail: " << endl;
+ map <int,int>::iterator itF;
+ for (itF = myFaceMap.begin(); itF != myFaceMap.end(); itF++)
+ save << "--> nb nodes: " << itF->first << " - nb elemens: " << itF->second << endl;
}
- save << "3.3.) Faces in detail: " << endl;
- map <int,int>::iterator itF;
- for (itF = myFaceMap.begin(); itF != myFaceMap.end(); itF++)
- save << "--> nb nodes: " << itF->first << " - nb elemens: " << itF->second << endl;
}
- }
- save << "4) Total number of volumes: " << NbVolumes() << endl;
- if ( NbVolumes() > 0 ) {
- int nb8 = NbHexas();
- int nb4 = NbTetras();
- int nb5 = NbPyramids();
- int nb6 = NbPrisms();
- save << "4.1.) Number of hexahedrons: " << nb8 << endl;
- save << "4.2.) Number of tetrahedrons: " << nb4 << endl;
- save << "4.3.) Number of prisms: " << nb6 << endl;
- save << "4.4.) Number of pyramides: " << nb5 << endl;
- if ( nb8 + nb4 + nb5 + nb6 != NbVolumes() ) {
- map<int,int> myVolumesMap;
- SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
- while( itVolumes->more( ) ) {
- int nbNodes = itVolumes->next()->NbNodes();
- if ( myVolumesMap.find( nbNodes ) == myVolumesMap.end() )
- myVolumesMap[ nbNodes ] = 0;
- myVolumesMap[ nbNodes ] = myVolumesMap[ nbNodes ] + 1;
+ save << ++clause << ") Total number of " << orderStr << " volumes: " << NbVolumes(order) << endl;
+ if ( NbVolumes(order) > 0 ) {
+ int nb8 = NbHexas(order);
+ int nb4 = NbTetras(order);
+ int nb5 = NbPyramids(order);
+ int nb6 = NbPrisms(order);
+ save << clause << ".1.) Number of " << orderStr << " hexahedrons: " << nb8 << endl;
+ save << clause << ".2.) Number of " << orderStr << " tetrahedrons: " << nb4 << endl;
+ save << clause << ".3.) Number of " << orderStr << " prisms: " << nb6 << endl;
+ save << clause << ".4.) Number of " << orderStr << " pyramides: " << nb5 << endl;
+ if ( nb8 + nb4 + nb5 + nb6 != NbVolumes(order) ) {
+ map<int,int> myVolumesMap;
+ SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
+ while( itVolumes->more( ) ) {
+ int nbNodes = itVolumes->next()->NbNodes();
+ if ( myVolumesMap.find( nbNodes ) == myVolumesMap.end() )
+ myVolumesMap[ nbNodes ] = 0;
+ myVolumesMap[ nbNodes ] = myVolumesMap[ nbNodes ] + 1;
+ }
+ save << clause << ".5.) Volumes in detail: " << endl;
+ map <int,int>::iterator itV;
+ for (itV = myVolumesMap.begin(); itV != myVolumesMap.end(); itV++)
+ save << "--> nb nodes: " << itV->first << " - nb elemens: " << itV->second << endl;
}
- save << "4.5.) Volumes in detail: " << endl;
- map <int,int>::iterator itV;
- for (itV = myVolumesMap.begin(); itV != myVolumesMap.end(); itV++)
- save << "--> nb nodes: " << itV->first << " - nb elemens: " << itV->second << endl;
}
+ save << endl;
}
save << "===========================================================================" << endl;
return save;