To debug polygon / polyedre MED conversation

This commit is contained in:
apo 2006-01-25 13:49:07 +00:00
parent a73de8d678
commit 0893b18124
2 changed files with 46 additions and 46 deletions

View File

@ -154,7 +154,7 @@ DriverMED_R_SMESHDS_Mesh
// Reading pre information about all MED cells // Reading pre information about all MED cells
//-------------------------------------------- //--------------------------------------------
typedef std::vector<int> TNodeIds; typedef MED::TVector<int> TNodeIds;
bool takeNumbers = true; // initially we trust the numbers from file bool takeNumbers = true; // initially we trust the numbers from file
MED::TEntityInfo aEntityInfo = aMed->GetEntityInfo(aMeshInfo); MED::TEntityInfo aEntityInfo = aMed->GetEntityInfo(aMeshInfo);
MED::TEntityInfo::iterator anEntityIter = aEntityInfo.begin(); MED::TEntityInfo::iterator anEntityIter = aEntityInfo.begin();
@ -229,7 +229,7 @@ DriverMED_R_SMESHDS_Mesh
aFamily->SetType(anElement->GetType()); aFamily->SetType(anElement->GetType());
} }
} }
} // for (TInt iPG = 0; iPG < nbPolygons; iPG++) }
break; break;
} }
case ePOLYEDRE: { case ePOLYEDRE: {
@ -240,7 +240,7 @@ DriverMED_R_SMESHDS_Mesh
for(TInt iElem = 0; iElem < aNbElem; iElem++){ for(TInt iElem = 0; iElem < aNbElem; iElem++){
MED::TCConnSliceArr aConnSliceArr = aPolyedreInfo->GetConnSliceArr(iElem); MED::TCConnSliceArr aConnSliceArr = aPolyedreInfo->GetConnSliceArr(iElem);
TInt aNbFaces = aConnSliceArr.size(); TInt aNbFaces = aConnSliceArr.size();
typedef std::vector<int> TQuantities; typedef MED::TVector<int> TQuantities;
TQuantities aQuantities(aNbFaces); TQuantities aQuantities(aNbFaces);
TInt aNbNodes = aPolyedreInfo->GetNbNodes(iElem); TInt aNbNodes = aPolyedreInfo->GetNbNodes(iElem);
TNodeIds aNodeIds(aNbNodes); TNodeIds aNodeIds(aNbNodes);
@ -249,57 +249,57 @@ DriverMED_R_SMESHDS_Mesh
TInt aNbConn = aConnSlice.size(); TInt aNbConn = aConnSlice.size();
aQuantities[iFace] = aNbConn; aQuantities[iFace] = aNbConn;
#ifdef _EDF_NODE_IDS_ #ifdef _EDF_NODE_IDS_
if(anIsNodeNum) if(anIsNodeNum){
for(TInt iConn = 0; iConn < aNbConn; iConn++) for(TInt iConn = 0; iConn < aNbConn; iConn++){
aNodeIds[iNode++] = aNodeInfo->GetElemNum(aConnSlice[iConn] - 1); aNodeIds[iNode++] = aNodeInfo->GetElemNum(aConnSlice[iConn] - 1);
}
}
else else
for(TInt iConn = 0; iConn < aNbConn; iConn++) for(TInt iConn = 0; iConn < aNbConn; iConn++)
aNodeIds[iNode++] = aConnSlice[iConn]; aNodeIds[iNode++] = aConnSlice[iConn];
#else #else
for(TInt iConn = 0; iConn < aNbConn; iConn++) for(TInt iConn = 0; iConn < aNbConn; iConn++)
aNodeIds[iNode++] = aConnSlice[iConn]; aNodeIds[iNode++] = aConnSlice[iConn];
#endif #endif
}
bool isRenum = false;
SMDS_MeshElement* anElement = NULL;
TInt aFamNum = aPolyedreInfo->GetFamNum(iElem);
try{
if(anIsElemNum){
TInt anElemId = aPolyedreInfo->GetElemNum(iElem);
anElement = myMesh->AddPolyhedralVolumeWithID(aNodeIds,aQuantities,anElemId);
}
if(!anElement){
std::vector<const SMDS_MeshNode*> aNodes(aNbNodes);
for(TInt iConn = 0; iConn < aNbNodes; iConn++)
aNodes[iConn] = FindNode(myMesh,aNodeIds[iConn]);
anElement = myMesh->AddPolyhedralVolume(aNodes,aQuantities);
isRenum = anIsElemNum;
}
}catch(const std::exception& exc){
aResult = DRS_FAIL;
}catch(...){
aResult = DRS_FAIL;
} }
bool isRenum = false; if(!anElement){
SMDS_MeshElement* anElement = NULL; aResult = DRS_WARN_SKIP_ELEM;
TInt aFamNum = aPolyedreInfo->GetFamNum(iElem); }else{
if(isRenum){
try{ anIsElemNum = eFAUX;
if(anIsElemNum){ takeNumbers = false;
TInt anElemId = aPolyedreInfo->GetElemNum(iElem); if (aResult < DRS_WARN_RENUMBER)
anElement = myMesh->AddPolyhedralVolumeWithID(aNodeIds,aQuantities,anElemId); aResult = DRS_WARN_RENUMBER;
} }
if(!anElement){ if ( checkFamilyID ( aFamily, aFamNum )) {
std::vector<const SMDS_MeshNode*> aNodes(aNbNodes); // Save reference to this element from its family
for(TInt iConn = 0; iConn < aNbNodes; iConn++) aFamily->AddElement(anElement);
aNodes[iConn] = FindNode(myMesh,aNodeIds[iConn]); aFamily->SetType(anElement->GetType());
anElement = myMesh->AddPolyhedralVolume(aNodes,aQuantities); }
isRenum = anIsElemNum; }
} }
}catch(const std::exception& exc){
aResult = DRS_FAIL;
}catch(...){
aResult = DRS_FAIL;
}
if(!anElement){
aResult = DRS_WARN_SKIP_ELEM;
}else{
if(isRenum){
anIsElemNum = eFAUX;
takeNumbers = false;
if (aResult < DRS_WARN_RENUMBER)
aResult = DRS_WARN_RENUMBER;
}
if ( checkFamilyID ( aFamily, aFamNum ))
{
// Save reference to this element from its family
aFamily->AddElement(anElement);
aFamily->SetType(anElement->GetType());
}
}
} // for (int iPE = 0; iPE < nbPolyedres; iPE++)
break; break;
} }
default: { default: {

View File

@ -558,8 +558,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
PPolygoneInfo aCellInfo = myMed->CrPolygoneInfo(aMeshInfo, PPolygoneInfo aCellInfo = myMed->CrPolygoneInfo(aMeshInfo,
SMDS_MED_ENTITY, SMDS_MED_ENTITY,
ePOLYGONE, ePOLYGONE,
aPolygoneConn,
aPolygoneInds, aPolygoneInds,
aPolygoneConn,
SMDS_MED_CONNECTIVITY, SMDS_MED_CONNECTIVITY,
aPolygoneFamilyNums, aPolygoneFamilyNums,
aPolygoneElemNums); aPolygoneElemNums);