]> SALOME platform Git repositories - modules/paravis.git/commitdiff
Salome HOME
Keep PARAVIS alive after exception thrown on writing
authorAnthony Geay <anthony.geay@edf.fr>
Fri, 19 Jan 2018 07:29:18 +0000 (08:29 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Fri, 19 Jan 2018 07:29:18 +0000 (08:29 +0100)
src/Plugins/MEDWriter/IO/VTKToMEDMem.cxx
src/Plugins/MEDWriter/IO/vtkMEDWriter.cxx

index b63989583774f6374859aed57833d2f62c8f9025..8b295481ec7e27ab75e321ed20e1e8a23b0c49ed 100644 (file)
@@ -664,7 +664,16 @@ void ConvertFromPolyData(MEDFileData *ret, vtkPolyData *ds, const std::vector<in
   vtkCellArray *cc(ds->GetLines());
   if(cc)
     {
-      MCAuto<MEDCouplingUMesh> subMesh(BuildMeshFromCellArray(cc,coords,1,INTERP_KERNEL::NORM_SEG2));
+      MCAuto<MEDCouplingUMesh> subMesh;
+      try
+        {
+          subMesh=BuildMeshFromCellArray(cc,coords,1,INTERP_KERNEL::NORM_SEG2);
+        }
+      catch(INTERP_KERNEL::Exception& e)
+        {
+          std::ostringstream oss; oss << "MEDWriter does not manage polyline cell type because MED file format does not support it ! Maybe it is the source of the problem ? The cause of this exception was " << e.what() << std::endl;
+          throw INTERP_KERNEL::Exception(oss.str());
+        }
       if((const MEDCouplingUMesh *)subMesh)
         {
           std::vector<MCAuto<DataArray> > cellFs(AddPartFields2(offset,offset+subMesh->getNumberOfCells(),ds->GetCellData()));
index 65537b3e262a7ffa2ec74392815b16cc8a617cdd..4c6cd3ef6769f575c373ba5f638150c17d63eff3 100644 (file)
@@ -212,6 +212,18 @@ int vtkMEDWriter::RequestUpdateExtent(vtkInformation* vtkNotUsed(request), vtkIn
   return 1;
 }
 
+template<class T>
+void ExceptionDisplayer(vtkMEDWriter *self, const std::string& fileName, T& e)
+{
+  std::ostringstream oss;
+  oss << "Exception has been thrown in vtkMEDWriter::RequestData : During writing of \"" << fileName << "\", the following exception has been thrown : "<< e.what() << std::endl;
+  if(self->HasObserver("ErrorEvent") )
+    self->InvokeEvent("ErrorEvent",const_cast<char *>(oss.str().c_str()));
+  else
+    vtkOutputWindowDisplayErrorText(const_cast<char *>(oss.str().c_str()));
+  vtkObject::BreakOnError();
+}
+
 int vtkMEDWriter::RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
 {
   //std::cerr << "########################################## vtkMEDWriter::RequestData        ########################################## " << (const char *) this->FileName << std::endl;
@@ -269,15 +281,14 @@ int vtkMEDWriter::RequestData(vtkInformation *request, vtkInformationVector **in
             }
         }
     }
+  catch(INTERP_KERNEL::Exception& e)
+    {
+      ExceptionDisplayer(this,(const char *) this->FileName,e);
+      return 0;
+    }
   catch(MZCException& e)
     {
-      std::ostringstream oss;
-      oss << "Exception has been thrown in vtkMEDWriter::RequestData : During writing of \"" << (const char *) this->FileName << "\", the following exception has been thrown : "<< e.what() << std::endl;
-      if(this->HasObserver("ErrorEvent") )
-        this->InvokeEvent("ErrorEvent",const_cast<char *>(oss.str().c_str()));
-      else
-        vtkOutputWindowDisplayErrorText(const_cast<char *>(oss.str().c_str()));
-      vtkObject::BreakOnError();
+      ExceptionDisplayer(this,(const char *) this->FileName,e);
       return 0;
     }
   return 1;