mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-03-16 04:11:26 +05:00
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:
parent
bbf925f3b3
commit
3f2ba65ea9
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user