Salome HOME
0021149: [CEA 445] Wrong mesh dimension V5_1_3_BR V5_1_3_patch08 V5_1_3_patch09
authoreap <eap@opencascade.com>
Thu, 2 Jun 2011 13:00:37 +0000 (13:00 +0000)
committereap <eap@opencascade.com>
Thu, 2 Jun 2011 13:00:37 +0000 (13:00 +0000)
  distinguish between mesh and space dimension

src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx

index 9c97adb9bfde2b7e230db7da3b570bcfd15a6e96..376d108653228fc6da3242b2cb1cc8de9ff9fd34 100644 (file)
@@ -344,8 +344,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
       aMeshName = myMeshName;
     }
 
-    // Mesh dimension definition
-    TInt aMeshDimension;
+    // Space dimension definition
+    TInt aSpaceDim;
     TCoordHelperPtr aCoordHelperPtr;
     {  
       bool anIsXDimension = false;
@@ -376,24 +376,24 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         anIsXDimension = (aBounds[1] - aBounds[0]) + abs(aBounds[1]) + abs(aBounds[0]) > EPS;
         anIsYDimension = (aBounds[3] - aBounds[2]) + abs(aBounds[3]) + abs(aBounds[2]) > EPS;
         anIsZDimension = (aBounds[5] - aBounds[4]) + abs(aBounds[5]) + abs(aBounds[4]) > EPS;
-        aMeshDimension = anIsXDimension + anIsYDimension + anIsZDimension;
-        if(!aMeshDimension)
-          aMeshDimension = 3;
+        aSpaceDim = anIsXDimension + anIsYDimension + anIsZDimension;
+        if(!aSpaceDim)
+          aSpaceDim = 3;
         // PAL16857(SMESH not conform to the MED convention):
-        if ( aMeshDimension == 2 && anIsZDimension ) // 2D only if mesh is in XOY plane
-          aMeshDimension = 3;
+        if ( aSpaceDim == 2 && anIsZDimension ) // 2D only if mesh is in XOY plane
+          aSpaceDim = 3;
         // PAL18941(a saved study with a mesh belong Z is opened and the mesh is belong X)
-        if ( aMeshDimension == 1 && !anIsXDimension ) // 1D only if mesh is along OX
+        if ( aSpaceDim == 1 && !anIsXDimension ) // 1D only if mesh is along OX
           if ( anIsYDimension ) {
-            aMeshDimension = 2;
+            aSpaceDim = 2;
             anIsXDimension = true;
           } else {
-            aMeshDimension = 3;
+            aSpaceDim = 3;
           }
       }
 
       SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator();
-      switch(aMeshDimension){
+      switch(aSpaceDim){
       case 3:
         aCoordHelperPtr.reset(new TCoordHelper(aNodesIter,aXYZGetCoord,aXYZName));
         break;
@@ -415,9 +415,16 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         break;
       }
     }
-
+    TInt aMeshDimension = 0;
+    if ( myMesh->NbEdges() > 0 )
+      aMeshDimension = 1;
+    if ( myMesh->NbFaces() > 0 )
+      aMeshDimension = 2;
+    if ( myMesh->NbVolumes() > 0 )
+      aMeshDimension = 3;
     
-    PMeshInfo aMeshInfo = myMed->CrMeshInfo(aMeshDimension,aMeshName);
+    PMeshInfo aMeshInfo = myMed->CrMeshInfo(aSpaceDim,aMeshName);
+    aMeshInfo->myMeshDim = aMeshDimension;
     MESSAGE("Add - aMeshName : "<<aMeshName<<"; "<<aMeshInfo->GetName());
     myMed->SetMeshInfo(aMeshInfo);
 
@@ -494,7 +501,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
     {
       // coordinates
       TCoordSlice aTCoordSlice = aNodeInfo->GetCoordSlice( iNode );
-      for(TInt iCoord = 0; iCoord < aMeshDimension; iCoord++){
+      for(TInt iCoord = 0; iCoord < aSpaceDim; iCoord++){
         aTCoordSlice[iCoord] = aCoordHelperPtr->GetCoord(iCoord);
       }
       // node number
@@ -511,7 +518,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
     anElemFamMap.Clear();
 
     // coordinate names and units
-    for (TInt iCoord = 0; iCoord < aMeshDimension; iCoord++) {
+    for (TInt iCoord = 0; iCoord < aSpaceDim; iCoord++) {
       aNodeInfo->SetCoordName( iCoord, aCoordHelperPtr->GetName(iCoord));
       aNodeInfo->SetCoordUnit( iCoord, aCoordHelperPtr->GetUnit(iCoord));
     }