Fix 11772

6) Export-import MED2.1 or MED2.2 of the quadratic hexa mesh on default box =>
"The file is incorrect..."
This commit is contained in:
eap 2006-03-03 14:06:24 +00:00
parent bbf925f3b3
commit 3f2ba65ea9

View File

@ -393,28 +393,30 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
#ifdef _ELEMENTS_BY_DIM_ #ifdef _ELEMENTS_BY_DIM_
SMDS_MED_ENTITY = eARETE; SMDS_MED_ENTITY = eARETE;
#endif #endif
// count edges of diff types
int aNbSeg3 = 0, aNbSeg2 = 0;
SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator(); SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator();
while ( anIter->more() )
// TInt aNbConnectivity = MED::GetNbNodes(eSEG2); if ( anIter->next()->NbNodes() == 3 )
// MED::TIntVector anElemNums(aNbElems); ++aNbSeg3;
// MED::TIntVector aFamilyNums(aNbElems); aNbSeg2 = aNbElems - aNbSeg3;
// MED::TIntVector aConnectivity(aNbElems*aNbConnectivity);
TInt aNbSeg2Conn = MED::GetNbNodes(eSEG2); TInt aNbSeg2Conn = MED::GetNbNodes(eSEG2);
MED::TIntVector aSeg2ElemNums(aNbElems); MED::TIntVector aSeg2ElemNums, aSeg2FamilyNums, aSeg2Conn;
MED::TIntVector aSeg2FamilyNums(aNbElems); aSeg2ElemNums .reserve( aNbSeg2 );
MED::TIntVector aSeg2Conn(aNbElems*aNbSeg2Conn); aSeg2FamilyNums.reserve( aNbSeg2 );
aSeg2Conn .reserve( aNbSeg2*aNbSeg2Conn );
TInt aNbSeg3Conn = MED::GetNbNodes(eSEG3); TInt aNbSeg3Conn = MED::GetNbNodes(eSEG3);
MED::TIntVector aSeg3ElemNums(aNbElems); MED::TIntVector aSeg3ElemNums, aSeg3FamilyNums, aSeg3Conn;
MED::TIntVector aSeg3FamilyNums(aNbElems); aSeg3ElemNums .reserve( aNbSeg3 );
MED::TIntVector aSeg3Conn(aNbElems*aNbSeg3Conn); aSeg3FamilyNums.reserve( aNbSeg3 );
aSeg3Conn .reserve( aNbSeg3*aNbSeg3Conn );
//for(TInt iElem = 0, Conn = 0; anIter->more(); iElem++, iConn+=aNbConnectivity){ anIter = myMesh->edgesIterator();
for(TInt iElem = 0; anIter->more(); iElem++) { while ( anIter->more() ) {
const SMDS_MeshEdge* anElem = anIter->next(); const SMDS_MeshEdge* anElem = anIter->next();
TInt aNbNodes = anElem->NbNodes(); TInt aNbNodes = anElem->NbNodes();
SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
TInt aNbConnectivity; TInt aNbConnectivity;
MED::TIntVector* anElemNums; MED::TIntVector* anElemNums;
@ -437,32 +439,25 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
break; break;
} }
MED::TIntVector aVector(aNbNodes); for(TInt iNode = 0; iNode < aNbNodes; iNode++) {
for(TInt iNode = 0; aNodesIter->more(); iNode++){ const SMDS_MeshElement* aNode = anElem->GetNode( iNode );
const SMDS_MeshElement* aNode = aNodesIter->next();
#ifdef _EDF_NODE_IDS_ #ifdef _EDF_NODE_IDS_
aVector[iNode] = aNodeIdMap[aNode->GetID()]; aConnectivity->push_back( aNodeIdMap[aNode->GetID()] );
#else #else
aVector[iNode] = aNode->GetID(); aConnectivity->push_back( aNode->GetID() );
#endif #endif
} }
TInt aSize = aConnectivity->size();
aConnectivity->resize(aSize+aNbConnectivity);
// There is some differences between SMDS and MED in cells mapping
for(TInt iNode = 0; iNode < aNbNodes; iNode++)
(*aConnectivity)[aSize+iNode] = aVector[iNode];
anElemNums->push_back(anElem->GetID()); anElemNums->push_back(anElem->GetID());
if (anElemFamMap.find(anElem) != anElemFamMap.end()) map<const SMDS_MeshElement*,int>::iterator edge_fam = anElemFamMap.find( anElem );
aFamilyNums->push_back(anElemFamMap[anElem]); if ( edge_fam != anElemFamMap.end() )
aFamilyNums->push_back( edge_fam->second );
else else
aFamilyNums->push_back( myFacesDefaultFamilyId ); aFamilyNums->push_back( myFacesDefaultFamilyId );
} }
if(TInt aNbElems = aSeg2ElemNums.size()){ if ( aNbSeg2 ) {
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo, PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
SMDS_MED_ENTITY, SMDS_MED_ENTITY,
eSEG2, eSEG2,
@ -472,7 +467,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
aSeg2ElemNums); aSeg2ElemNums);
myMed->SetCellInfo(aCellInfo); myMed->SetCellInfo(aCellInfo);
} }
if(TInt aNbElems = aSeg3ElemNums.size()){ if ( aNbSeg3 ) {
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo, PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
SMDS_MED_ENTITY, SMDS_MED_ENTITY,
eSEG3, eSEG3,