#include "MED_Factory.hxx"
#include "MED_Utilities.hxx"
#include "SMDS_IteratorOnIterators.hxx"
-#include "SMDS_MeshElement.hxx"
#include "SMDS_MeshNode.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
#include "SMDS_SetIterator.hxx"
#include "SMESHDS_Mesh.hxx"
DriverMED_W_SMESHDS_Mesh::DriverMED_W_SMESHDS_Mesh():
- myMedVersion(MED::eV2_2),
myAllSubMeshes (false),
myDoGroupOfNodes (false),
myDoGroupOfEdges (false),
myDoAllInGroups(false)
{}
-void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName,
- MED::EVersion theId)
-{
- Driver_SMESHDS_Mesh::SetFile(theFileName);
- myMedVersion = theId;
- //MESSAGE("myMedVersion:"<<myMedVersion);
-}
-
void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName)
{
Driver_SMESHDS_Mesh::SetFile(theFileName);
}
-/*!
- * MED version is either the latest available, or with an inferior minor,
- * to ensure backward compatibility on writing med files.
- */
-string DriverMED_W_SMESHDS_Mesh::GetVersionString(const MED::EVersion theVersion, int theNbDigits)
-{
- TInt majeur, mineur, release;
- majeur = mineur = release = 0;
- MED::GetVersionRelease<eV2_2>(majeur, mineur, release);
- TInt imposedMineur = mineur;
- switch( theVersion ) {
- case MED::eV2_1 :
- case MED::eV2_2 :
- case MED::eLATEST : break;
- case MED::eMINOR_0 : imposedMineur = 0; break;
- case MED::eMINOR_1 : imposedMineur = 1; break;
- case MED::eMINOR_2 : imposedMineur = 2; break;
- case MED::eMINOR_3 : imposedMineur = 3; break;
- case MED::eMINOR_4 : imposedMineur = 4; break;
- case MED::eMINOR_5 : imposedMineur = 5; break;
- case MED::eMINOR_6 : imposedMineur = 6; break;
- case MED::eMINOR_7 : imposedMineur = 7; break;
- case MED::eMINOR_8 : imposedMineur = 8; break;
- case MED::eMINOR_9 : imposedMineur = 9; break;
- case MED::eVUnknown : imposedMineur = mineur; break;
- }
- if (imposedMineur > mineur)
- imposedMineur = mineur;
- ostringstream name;
- if ( theNbDigits > 0 )
- name << majeur;
- if ( theNbDigits > 1 )
- name << "." << imposedMineur;
- if ( theNbDigits > 2 )
- name << "." << release;
- return name.str();
-}
-
void DriverMED_W_SMESHDS_Mesh::AddGroup(SMESHDS_GroupBase* theGroup)
{
myGroups.push_back(theGroup);
Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
{
Status aResult = DRS_OK;
- if (myMesh->hasConstructionEdges() || myMesh->hasConstructionFaces()) {
- INFOS("SMDS_MESH with hasConstructionEdges() or hasConstructionFaces() do not supports!!!");
- return DRS_FAIL;
- }
try {
//MESSAGE("Perform - myFile : "<<myFile);
const SMDS_MeshNode* aNode = aNodesIter->next();
aBounds[0] = min(aBounds[0],aNode->X());
aBounds[1] = max(aBounds[1],aNode->X());
-
+
aBounds[2] = min(aBounds[2],aNode->Y());
aBounds[3] = max(aBounds[3],aNode->Y());
}
}
- SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator(/*idInceasingOrder=*/true);
+ SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator();
switch ( aSpaceDimension ) {
case 3:
aCoordHelperPtr.reset(new TCoordHelper(aNodesIter,aXYZGetCoord,aXYZName));
break;
}
}
- //MESSAGE("myMedVersion:"<<myMedVersion);
- MED::PWrapper myMed = CrWrapper(myFile,myMedVersion);
+
+ MED::PWrapper myMed = CrWrapperW(myFile);
PMeshInfo aMeshInfo = myMed->CrMeshInfo(aMeshDimension,aSpaceDimension,aMeshName);
//MESSAGE("Add - aMeshName : "<<aMeshName<<"; "<<aMeshInfo->GetName());
myMed->SetMeshInfo(aMeshInfo);
continue;
}
+ // build map of family numbers for this type
+ if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
+ {
+ fillElemFamilyMap( anElemFamMap, aFamilies, aElemTypeData->_smdsType );
+ isElemFamMapBuilt[ aElemTypeData->_smdsType ] = true;
+ }
+
// iterator on elements of a current type
SMDS_ElemIteratorPtr elemIterator;
int iElem = 0;
// Treat POLYEDREs
// ----------------
- else if (aElemTypeData->_geomType == ePOLYEDRE )
+ else if ( aElemTypeData->_geomType == ePOLYEDRE )
{
elemIterator = myMesh->elementGeomIterator( SMDSGeom_POLYHEDRA );
-
+
if ( nbPolyhedronNodes == 0 ) {
// Count nb of nodes
while ( elemIterator->more() ) {
const SMDS_MeshElement* anElem = elemIterator->next();
- const SMDS_VtkVolume *aPolyedre = dynamic_cast<const SMDS_VtkVolume*>(anElem);
- if ( !aPolyedre ) continue;
- nbPolyhedronNodes += aPolyedre->NbNodes();
- nbPolyhedronFaces += aPolyedre->NbFaces();
+ nbPolyhedronNodes += anElem->NbNodes();
+ nbPolyhedronFaces += anElem->NbFaces();
if ( ++iElem == aElemTypeData->_nbElems )
break;
}
TInt iFace = 0, iNode = 0;
while ( elemIterator->more() )
{
- const SMDS_MeshElement* anElem = elemIterator->next();
- const SMDS_VtkVolume *aPolyedre = dynamic_cast<const SMDS_VtkVolume*>(anElem);
+ const SMDS_MeshElement* anElem = elemIterator->next();
+ const SMDS_MeshVolume *aPolyedre = myMesh->DownCast< SMDS_MeshVolume >( anElem );
if ( !aPolyedre ) continue;
// index
TInt aNbFaces = aPolyedre->NbFaces();
// allocate data arrays
PBallInfo aBallInfo = myMed->CrBallInfo( aMeshInfo, aElemTypeData->_nbElems );
- // build map of family numbers for this type
- if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
- {
- fillElemFamilyMap( anElemFamMap, aFamilies, aElemTypeData->_smdsType );
- isElemFamMapBuilt[ aElemTypeData->_smdsType ] = true;
- }
-
elemIterator = myMesh->elementsIterator( SMDSAbs_Ball );
while ( elemIterator->more() )
{
theConnMode,
theIsElemNum,
theIsElemNames);
- // build map of family numbers for this type
- if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
- {
- fillElemFamilyMap( anElemFamMap, aFamilies, aElemTypeData->_smdsType );
- isElemFamMapBuilt[ aElemTypeData->_smdsType ] = true;
- }
TInt aNbNodes = MED::GetNbNodes(aElemTypeData->_geomType);
elemIterator = myMesh->elementsIterator( aElemTypeData->_smdsType );