Salome HOME
Fix crash during preview
authorgdd <gdd>
Fri, 10 Aug 2012 14:01:12 +0000 (14:01 +0000)
committergdd <gdd>
Fri, 10 Aug 2012 14:01:12 +0000 (14:01 +0000)
src/SMESH_I/SMESH_MeshEditor_i.cxx

index 026eed079f2ac031ff0f0e4236db2b5e8091bc20..4ff0529dd5b61acfcb298059c25633a541aab9a2 100644 (file)
@@ -464,21 +464,25 @@ SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
     typedef map<int, int> TNodesMap;
     TNodesMap nodesMap;
 
-    TPreviewMesh * aPreviewMesh = dynamic_cast< TPreviewMesh* >( myEditor.GetMesh() );
-    SMDSAbs_ElementType previewType = aPreviewMesh->myPreviewType;
-
     SMESHDS_Mesh* aMeshDS = myEditor.GetMeshDS();
     int nbEdges = aMeshDS->NbEdges();
     int nbFaces = aMeshDS->NbFaces();
     int nbVolum = aMeshDS->NbVolumes();
-    switch ( previewType ) {
-    case SMDSAbs_Edge  : nbFaces = nbVolum = 0; break;
-    case SMDSAbs_Face  : nbEdges = nbVolum = 0; break;
-    case SMDSAbs_Volume: nbEdges = nbFaces = 0; break;
-    default:;
-    }
     myPreviewData = new SMESH::MeshPreviewStruct();
     myPreviewData->nodesXYZ.length(aMeshDS->NbNodes());
+
+    TPreviewMesh * aPreviewMesh = dynamic_cast< TPreviewMesh* >( myEditor.GetMesh() );
+    SMDSAbs_ElementType previewType = SMDSAbs_All;
+    if (aPreviewMesh) {
+      previewType = aPreviewMesh->myPreviewType;
+      switch ( previewType ) {
+      case SMDSAbs_Edge  : nbFaces = nbVolum = 0; break;
+      case SMDSAbs_Face  : nbEdges = nbVolum = 0; break;
+      case SMDSAbs_Volume: nbEdges = nbFaces = 0; break;
+      default:;
+      }
+    }
+
     myPreviewData->elementTypes.length(nbEdges + nbFaces + nbVolum);
     int i = 0, j = 0;
     SMDS_ElemIteratorPtr itMeshElems = aMeshDS->elementsIterator();