Salome HOME
Import mesh is now done in the SMESH container, not in SMESHGUI. Each mesh file parse...
authorjrt <jrt>
Mon, 16 Feb 2004 10:13:47 +0000 (10:13 +0000)
committerjrt <jrt>
Mon, 16 Feb 2004 10:13:47 +0000 (10:13 +0000)
30 files changed:
idl/SMESH_Gen.idl
idl/SMESH_Mesh.idl
src/Driver/Document_Reader.cxx
src/Driver/Document_Reader.h
src/Driver/Document_Writer.cxx
src/Driver/Document_Writer.h
src/Driver/Makefile.in
src/Driver/SMESHDriver.cxx
src/Driver/SMESHDriver.h
src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx
src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx
src/DriverDAT/Makefile.in
src/DriverMED/DriverMED_R_SMESHDS_Document.cxx
src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx
src/DriverMED/Makefile.in
src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx
src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx
src/DriverUNV/Makefile.in
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_Gen.hxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_Mesh.hxx
src/SMESHGUI/Makefile.in
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI.h
src/SMESH_I/SMESH_Gen_i.cxx
src/SMESH_I/SMESH_Gen_i.hxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_I/SMESH_Mesh_i.hxx

index c30750bf071b43be534679ac9e32ce4605abe203..82136fee136a087e725e24aa94d5f26f7a1e14c9 100644 (file)
@@ -104,7 +104,13 @@ module SMESH
     //                          in shape_array listOfSubShape)
     //  raises (SALOME::SALOME_Exception);
     
-
+       /**
+        * Import a mesh from a file.
+        * @param fileName file name to be imported.
+        * @param fileType Currently it could be either "DAT", "UNV" or "MED".
+        * @param studyId The id of the current study.
+        */
+       SMESH_Mesh Import(in long studyId, in string fileName, in string fileType);
   };
 
 };
index a051ada9db0fb40b4af08f40f0a37708e08041a2..ea65c8d3ffb69c33aa692f96dbae37738a2c1263 100644 (file)
@@ -161,13 +161,11 @@ module SMESH
        raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export Mesh with DAT and MED Formats
+     * Export mesh to a file
+        * @param fileName file name where to export the file
+        * @param fileType Currently it could be either "DAT", "UNV" or "MED".
      */
-    void ExportDAT( in string file )
-      raises (SALOME::SALOME_Exception);
-    void ExportMED( in string file )
-      raises (SALOME::SALOME_Exception);
-    void ExportUNV( in string file )
+    void Export( in string fileName, in string fileType )
       raises (SALOME::SALOME_Exception);
 
     /*!
index 26dcf1450a01cc92fd1ee807d9e4c8c85f63ae41..edb1c77a97a25f5f4cdd7421dc9af2383aa5aeab 100644 (file)
@@ -38,3 +38,16 @@ void Document_Reader::SetDocument(SMESHDS_Document * aDoc)
 {
        myDocument = aDoc;
 }
+
+void Document_Reader::Read()
+{
+       int myMeshId = myDocument->NewMesh();
+       SMDS_Mesh * myMesh = myDocument->GetMesh(myMeshId);
+       myReader->SetMesh(myMesh);
+       myReader->SetFile(myFile);
+       myReader->Read();
+}
+
+Document_Reader::Document_Reader(Mesh_Reader* reader): myReader(reader)
+{
+}
index 2766466c2526017380cc15cf2860c0dcdc8fca87..719665856e41efe11303f2e3663e840b991747e4 100644 (file)
 #define _INCLUDE_DOCUMENT_READER
 
 #include "SMESHDS_Document.hxx"
+#include "Mesh_Reader.h"
 #include <string>
 
 class Document_Reader
 {
   public:
-       virtual void Read() = 0;
+       virtual void Read();
        void SetFile(string);
        void SetDocument(SMESHDS_Document *);
+       Document_Reader(Mesh_Reader*);
 
   protected:
-         SMESHDS_Document * myDocument;
+       SMESHDS_Document * myDocument;
        string myFile;
+
+  private:
+       Mesh_Reader* myReader;
 };
 #endif
index 8704c128463dbc35f436eee89e7713e834a1dbd2..95f195dc36c99e6320b9c7fc5ca18caa424a9c07 100644 (file)
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : Document_Writer.cxx
-//  Module : SMESH
 
-using namespace std;
 #include "Document_Writer.h"
+#include "utilities.h"
 
 void Document_Writer::SetFile(string aFile)
 {
@@ -36,3 +31,28 @@ void Document_Writer::SetDocument(SMESHDS_Document * aDoc)
 {
        myDocument = aDoc;
 }
+
+void Document_Writer::Write()
+{
+       SCRUTE(myFile);
+       SMESHDS_Mesh * myMesh;
+       int nb_of_meshes = myDocument->NbMeshes();      //voir avec Yves
+       SCRUTE(nb_of_meshes);
+
+       int numero = 0;
+
+       myDocument->InitMeshesIterator();
+       while(myDocument->MoreMesh())
+       {
+               numero++;
+               myMesh = myDocument->NextMesh();
+               myWriter->SetMesh(myMesh);
+               myWriter->SetFile(myFile);
+               myWriter->SetMeshId(numero);
+               myWriter->Add();
+       }
+}
+
+Document_Writer::Document_Writer(Mesh_Writer* writer): myWriter(writer)
+{
+}
index 4aea9605c07a2798dba3184307e3da0663b0cda4..f50b594865153846204bfff9641fbede0df177e1 100644 (file)
 #define _INCLUDE_DOCUMENT_WRITER
 
 #include "SMESHDS_Document.hxx"
+#include "Mesh_Writer.h"
 #include <string>
 
 class Document_Writer
 {
 
-  public:virtual void Write() = 0;
+  public:virtual void Write();
        void SetFile(string);
        void SetDocument(SMESHDS_Document *);
+       Document_Writer(Mesh_Writer* );
 
-  protected:  SMESHDS_Document * myDocument;
+  protected:
+       SMESHDS_Document * myDocument;
        string myFile;
+       Mesh_Writer * myWriter;
 
 };
 #endif
index 6016ac85fb6f19f806ec3a41ef09003386325508..cad4d3b89e08dbe427734122af2b525b48ffba49 100644 (file)
@@ -35,11 +35,21 @@ VPATH=.:@srcdir@
 @COMMENCE@
 
 # header files 
-EXPORT_HEADERS= Document_Reader.h Document_Writer.h Mesh_Reader.h Mesh_Writer.h
+EXPORT_HEADERS = \
+       SMESHDriver.h \
+       Document_Reader.h \
+       Document_Writer.h \
+       Mesh_Reader.h \
+       Mesh_Writer.h
 
 # Libraries targets
 LIB = libMeshDriver.la
-LIB_SRC = Document_Reader.cxx Document_Writer.cxx Mesh_Reader.cxx Mesh_Writer.cxx
+LIB_SRC = \
+       SMESHDriver.cxx \
+       Document_Reader.cxx \
+       Document_Writer.cxx 
+#      Mesh_Reader.cxx \
+#      Mesh_Writer.cxx \
 
 LIB_CLIENT_IDL =
 
index 83e9037a599c325bd136506ab28784f0d2a50337..696c00d884afe71ea8006eacdd1aa84288c6db0b 100644 (file)
@@ -1,4 +1,4 @@
-//  SMESH Driver : implementaion of driver for reading and writing     
+//  SMESH Driver : implementation of driver for reading and writing    
 //
 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : SMESHDriver.cxx
-//  Module : SMESH
 
-using namespace std;
 #include "SMESHDriver.h"
 
 #include <dlfcn.h>
 #include <utilities.h>
 
-//A enlever
-#include "DriverMED_R_SMESHDS_Document.h"
-#include "DriverMED_R_SMESHDS_Mesh.h"
-#include "DriverMED_R_SMDS_Mesh.h"
-#include "DriverMED_W_SMESHDS_Document.h"
-#include "DriverMED_W_SMESHDS_Mesh.h"
-#include "DriverMED_W_SMDS_Mesh.h"
-
-#include "DriverDAT_R_SMESHDS_Document.h"
-#include "DriverDAT_R_SMESHDS_Mesh.h"
-#include "DriverDAT_R_SMDS_Mesh.h"
-#include "DriverDAT_W_SMESHDS_Document.h"
-#include "DriverDAT_W_SMESHDS_Mesh.h"
-#include "DriverDAT_W_SMDS_Mesh.h"
-//
-
-Document_Reader* SMESHDriver::GetDocumentReader(string Extension, string Class) {
-  if (Extension==string("MED")) {
-    DriverMED_R_SMESHDS_Document* myDriver = new DriverMED_R_SMESHDS_Document();
-    return (myDriver);
-  }
-  else if (Extension==string("DAT")) {
-    DriverDAT_R_SMESHDS_Document* myDriver = new DriverDAT_R_SMESHDS_Document();
-    return (myDriver);
-  }
-  else {
-    MESSAGE("No driver known for this extension");
-    return (Document_Reader*)NULL;
-  }
-
-
+Document_Reader* SMESHDriver::GetDocumentReader(string Extension)
+{
+       // if there is not document reader in the driver create a default
+       // one with the mesh reader.
+       Document_Reader * docReader=
+               (Document_Reader*)getMeshDocumentDriver(Extension);
+
+       if(docReader==NULL)
+       {
+               Mesh_Reader * reader=GetMeshReader(Extension);
+               if(reader==NULL)
+               {
+               MESSAGE("No driver known for this extension");
+                       return NULL;
+               }
+               return new Document_Reader(reader);
+       }
+       else return docReader;
 }
 
-Document_Writer* SMESHDriver::GetDocumentWriter(string Extension, string Class) {
-  if (Extension==string("MED")) {
-    DriverMED_W_SMESHDS_Document* myDriver = new DriverMED_W_SMESHDS_Document();
-    return (myDriver);
-  }    
-  else if (Extension==string("DAT")) {
-    DriverDAT_W_SMESHDS_Document* myDriver = new DriverDAT_W_SMESHDS_Document();
-    return (myDriver);
-  }    
-  else {
-    MESSAGE("No driver known for this extension");
-    return (Document_Writer*)NULL;
-  }
-
-
+Document_Writer* SMESHDriver::GetDocumentWriter(string Extension)
+{
+       Mesh_Writer * writer=GetMeshWriter(Extension);
+       if(writer==NULL)
+       {
+       MESSAGE("No driver known for this extension");
+               return NULL;
+       }
+       return new Document_Writer(writer);
 }
 
-Mesh_Reader* SMESHDriver::GetMeshReader(string Extension, string Class) {
-  if (Extension==string("MED")) {
-
-  if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) {
-    DriverMED_R_SMESHDS_Mesh* myDriver = new DriverMED_R_SMESHDS_Mesh();
-    return (myDriver);
-  }
-  else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) {
-    DriverMED_R_SMDS_Mesh* myDriver = new DriverMED_R_SMDS_Mesh();
-    return (myDriver);
-  }
-
-  }
-  else if (Extension==string("DAT")) {
-
-  if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) {
-    DriverDAT_R_SMESHDS_Mesh* myDriver = new DriverDAT_R_SMESHDS_Mesh();
-    return (myDriver);
-  }
-  else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) {
-    DriverDAT_R_SMDS_Mesh* myDriver = new DriverDAT_R_SMDS_Mesh();
-    return (myDriver);
-  }
-
-  }
-
-
+Mesh_Reader* SMESHDriver::GetMeshReader(string extension)
+{
+       void * driver = getMeshDriver(extension, string("Reader"));
+       return (Mesh_Reader*)driver;
 }
 
-Mesh_Writer* SMESHDriver::GetMeshWriter(string Extension, string Class) {
-  if (Extension==string("MED")) {
-
-  if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) {
-    DriverMED_W_SMESHDS_Mesh* myDriver = new DriverMED_W_SMESHDS_Mesh();
-    return (myDriver);
-  }
-  else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) {
-    DriverMED_W_SMDS_Mesh* myDriver = new DriverMED_W_SMDS_Mesh();
-    return (myDriver);
-  }
-
-  }
-  else if (Extension==string("DAT")) {
-
-  if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) {
-    DriverDAT_W_SMESHDS_Mesh* myDriver = new DriverDAT_W_SMESHDS_Mesh();
-    return (myDriver);
-  }
-  else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) {
-    DriverDAT_W_SMDS_Mesh* myDriver = new DriverDAT_W_SMDS_Mesh();
-    return (myDriver);
-  }
-
-  }
+Mesh_Writer* SMESHDriver::GetMeshWriter(string extension)
+{
+       void * driver = getMeshDriver(extension, string("Writer"));
+       return (Mesh_Writer*)driver;
+}
 
+void * SMESHDriver::getMeshDriver(string extension, string type)
+{
+       string libName = string("libMeshDriver")+extension+string(".so");
+       void * handle = dlopen(libName.c_str(), RTLD_LAZY);
+       if(!handle)
+       {
+               fputs (dlerror(), stderr);
+               return NULL;
+       }
+       else
+       {
+               void * (*factory)();
+               string symbol = string("SMESH_create")+extension+string("Mesh")+type;
+               factory = (void * (*)()) dlsym(handle, symbol.c_str());
+               if(factory==NULL)
+               {
+                       fputs (dlerror(), stderr);
+                       return NULL;
+               }
+               else return factory();
+       }
 }
 
+void * SMESHDriver::getMeshDocumentDriver(string extension)
+{
+       string libName = string("libMeshDriver")+extension+string(".so");
+       void * handle = dlopen(libName.c_str(), RTLD_LAZY);
+       if(!handle)
+       {
+               fputs (dlerror(), stderr);
+               return NULL;
+       }
+       else
+       {
+               void * (*factory)();
+               string symbol = string("SMESH_create")+extension+string("DocumentReader");
+               factory = (void * (*)()) dlsym(handle, symbol.c_str());
+               if(factory==NULL)
+               {
+                       fputs (dlerror(), stderr);
+                       return NULL;
+               }
+               else return factory();
+       }
+}
index 78731c33df34ed4d87027a0e4ad6ca70788553c4..119208c2ebf022c848a92933ecde6c39bf6a181e 100644 (file)
 #include "Mesh_Reader.h"
 #include "Mesh_Writer.h"
 
-class SMESHDriver {
-
+class SMESHDriver
+{
   public :
-    static Document_Reader* GetDocumentReader(string Extension, string Class);
-    static Document_Writer* GetDocumentWriter(string Extension, string Class);
+    static Document_Reader* GetDocumentReader(string Extension);
+    static Document_Writer* GetDocumentWriter(string Extension);
 
-    static Mesh_Reader* GetMeshReader(string Extension, string Class);
-    static Mesh_Writer* GetMeshWriter(string Extension, string Class);
+    static Mesh_Reader* GetMeshReader(string Extension);
+    static Mesh_Writer* GetMeshWriter(string Extension);
 
+  private:
+       static void * getMeshDriver(string Extension, string type);
+       static void * getMeshDocumentDriver(string Extension);
 };
 #endif
index bd95f49fbd4f2aacab5b5efe63391fc47e1a321e..0990acc5d5703a9049da1ecf42fba316488daac8 100644 (file)
 //  File   : DriverDAT_R_SMDS_Mesh.cxx
 //  Module : SMESH
 
-using namespace std;
 #include "DriverDAT_R_SMDS_Mesh.h"
-
 #include "utilities.h"
 
+extern "C"
+{
+
+/**
+ * Factory function which will be called by SMESHDriver
+ */
+void * SMESH_createDATMeshReader()
+{
+       return new DriverDAT_R_SMDS_Mesh();
+}
+}
+
 DriverDAT_R_SMDS_Mesh::DriverDAT_R_SMDS_Mesh()
 {
        ;
index 9ebe754b3ddb52ff9586b2b4c74cbc337cacde8a..d99a124fa89f4500f8ce028f6234da23a92c14b1 100644 (file)
 //  File   : DriverDAT_W_SMDS_Mesh.cxx
 //  Module : SMESH
 
-using namespace std;
 #include "DriverDAT_W_SMDS_Mesh.h"
-
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
-
 #include "utilities.h"
 
+extern "C"
+{
+
+/**
+ * Factory function which will be called by SMESHDriver
+ */
+void * SMESH_createDATMeshWriter()
+{
+       return new DriverDAT_W_SMDS_Mesh();
+}
+}
+
 DriverDAT_W_SMDS_Mesh::DriverDAT_W_SMDS_Mesh()
 {
-       ;
 }
 
 DriverDAT_W_SMDS_Mesh::~DriverDAT_W_SMDS_Mesh()
@@ -64,12 +72,12 @@ void DriverDAT_W_SMDS_Mesh::SetMeshId(int aMeshId)
 
 void DriverDAT_W_SMDS_Mesh::Add()
 {
-       ;
+       MESSAGE("Adding a mesh to a DAT document. As DAT do not support more than one mesh in a file, the previous mesh is deleted");
+       Write();
 }
 
 void DriverDAT_W_SMDS_Mesh::Write()
 {
-
        int nbNodes, nbCells;
        int i;
 
@@ -80,7 +88,7 @@ void DriverDAT_W_SMDS_Mesh::Write()
                fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read);
                exit(EXIT_FAILURE);
        }
-       SCRUTE(myMesh);
+
   /****************************************************************************
   *                       NOMBRES D'OBJETS                                    *
   ****************************************************************************/
@@ -97,9 +105,6 @@ void DriverDAT_W_SMDS_Mesh::Write()
        nb_of_faces = myMesh->NbFaces();
        nb_of_volumes = myMesh->NbVolumes();
        nbCells = nb_of_edges + nb_of_faces + nb_of_volumes;
-       SCRUTE(nb_of_edges);
-       SCRUTE(nb_of_faces);
-       SCRUTE(nb_of_volumes);
 
        fprintf(stdout, "%d %d\n", nbNodes, nbCells);
        fprintf(myFileId, "%d %d\n", nbNodes, nbCells);
@@ -118,7 +123,8 @@ void DriverDAT_W_SMDS_Mesh::Write()
                fprintf(myFileId, "%d %e %e %e\n", node->GetID(), node->X(),
                        node->Y(), node->Z());
        }
-       
+       delete itNodes;
+
   /****************************************************************************
   *                       ECRITURE DES ELEMENTS                                *
   ****************************************************************************/
@@ -127,10 +133,10 @@ void DriverDAT_W_SMDS_Mesh::Write()
        fprintf(stdout, "(**************************)");
        /* Ecriture des connectivites, noms, numeros des mailles */
 
-       SMDS_Iterator<const SMDS_MeshEdge *> * itEdges=myMesh->edgesIterator();
+       SMDS_Iterator<const SMDS_MeshEdge*> * itEdges=myMesh->edgesIterator();
        while(itEdges->more())
        {
-               const SMDS_MeshElement * elem = itEdges->next();
+               const SMDS_MeshEdge * elem = itEdges->next();
 
                switch (elem->NbNodes())
                {
@@ -146,11 +152,13 @@ void DriverDAT_W_SMDS_Mesh::Write()
                }
                }
 
-               SMDS_Iterator<const SMDS_MeshElement *> * it=elem->nodesIterator();
-               while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID());
-
+               SMDS_Iterator<const SMDS_MeshElement *> * itNodes=elem->nodesIterator();
+               while(itNodes->more())
+                       fprintf(myFileId, "%d ", itNodes->next()->GetID());
+               
                fprintf(myFileId, "\n");
        }
+       delete itEdges;
 
        SMDS_Iterator<const SMDS_MeshFace *> * itFaces=myMesh->facesIterator();
        while(itFaces->more())
@@ -176,13 +184,16 @@ void DriverDAT_W_SMDS_Mesh::Write()
                }
                }
 
-               SMDS_Iterator<const SMDS_MeshElement *> * it=elem->nodesIterator();
-               while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID());
-
+               SMDS_Iterator<const SMDS_MeshElement *> * itNodes=elem->nodesIterator();
+               while(itNodes->more())
+                       fprintf(myFileId, "%d ", itNodes->next()->GetID());
+               delete itNodes;
+       
                fprintf(myFileId, "\n");
        }
+       delete itFaces;
 
-       SMDS_Iterator<const SMDS_MeshVolume *> * itVolumes=myMesh->volumesIterator();
+       SMDS_Iterator<const SMDS_MeshVolume*> * itVolumes=myMesh->volumesIterator();
        while(itVolumes->more())
        {
                const SMDS_MeshElement * elem = itVolumes->next();
@@ -196,11 +207,14 @@ void DriverDAT_W_SMDS_Mesh::Write()
                }
                }
 
-               SMDS_Iterator<const SMDS_MeshElement *> * it=elem->nodesIterator();
-               while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID());
+               SMDS_Iterator<const SMDS_MeshElement *> * itNodes=elem->nodesIterator();
+               while(itNodes->more())
+                       fprintf(myFileId, "%d ", itNodes->next()->GetID());
+               delete itNodes; 
 
                fprintf(myFileId, "\n");
        }
+       delete itVolumes;
 
        fclose(myFileId);
 }
index cf3dba921988323a61f555b5e520c6cb0cbbaf77..8043bf715b95bd100a635f76c9af8c307a435981 100644 (file)
@@ -35,11 +35,23 @@ VPATH=.:@srcdir@
 @COMMENCE@
 
 # header files 
-EXPORT_HEADERS= DriverDAT_R_SMDS_Mesh.h DriverDAT_R_SMESHDS_Mesh.h DriverDAT_R_SMESHDS_Document.h DriverDAT_W_SMDS_Mesh.h DriverDAT_W_SMESHDS_Mesh.h DriverDAT_W_SMESHDS_Document.h 
+EXPORT_HEADERS = \
+       DriverDAT_R_SMDS_Mesh.h \
+       DriverDAT_R_SMESHDS_Mesh.h \
+       DriverDAT_W_SMDS_Mesh.h \
+       DriverDAT_W_SMESHDS_Mesh.h 
+#      DriverDAT_W_SMESHDS_Document.h \
+#      DriverDAT_R_SMESHDS_Document.h \
 
 # Libraries targets
 LIB = libMeshDriverDAT.la
-LIB_SRC = DriverDAT_R_SMDS_Mesh.cxx DriverDAT_R_SMESHDS_Mesh.cxx DriverDAT_R_SMESHDS_Document.cxx DriverDAT_W_SMDS_Mesh.cxx DriverDAT_W_SMESHDS_Mesh.cxx DriverDAT_W_SMESHDS_Document.cxx 
+LIB_SRC = \
+       DriverDAT_R_SMDS_Mesh.cxx \
+       DriverDAT_R_SMESHDS_Mesh.cxx \
+       DriverDAT_W_SMDS_Mesh.cxx \
+       DriverDAT_W_SMESHDS_Mesh.cxx 
+       #DriverDAT_W_SMESHDS_Document.cxx \
+       #DriverDAT_R_SMESHDS_Document.cxx \
 
 LIB_CLIENT_IDL =
 
index ca50c550e1b9299c6034850f4a241212e22743fd..4949199abab7b07d61d04aadfb4131d54199cbe2 100644 (file)
@@ -31,13 +31,14 @@ using namespace std;
 
 extern "C"
 {
-       Document_Reader *maker()
+       void * SMESH_createMEDDocumentReader()
        {
                return new DriverMED_R_SMESHDS_Document;
        }
 }
 
 DriverMED_R_SMESHDS_Document::DriverMED_R_SMESHDS_Document()
+       :Document_Reader(new DriverMED_R_SMESHDS_Mesh())
 {
        ;
 }
@@ -60,8 +61,6 @@ void DriverMED_R_SMESHDS_Document::Read()
 
        int myMeshId;
 
-       //string myFile = string("/home/home_users/cai/projects/salome_prev04/SALOME_ROOT/data/fra1.med");
-
 /****************************************************************************
   *                      OUVERTURE DU FICHIER EN LECTURE                      *
   ****************************************************************************/
index 1652a55a7e0ffc9b09309172b203d3ca5fd98e50..3c1475954210b3633c9e11fd386dfd5d8592cc39 100644 (file)
@@ -31,6 +31,18 @@ using namespace std;
 
 #include <stdlib.h>
 
+extern "C"
+{
+/**
+ * Factory function which will be called by SMESHDriver
+ */
+void * SMESH_createMEDMeshReader()
+{
+       return new DriverMED_R_SMESHDS_Mesh();
+}
+
+}
+
 DriverMED_R_SMESHDS_Mesh::DriverMED_R_SMESHDS_Mesh()
 {
        myFileId = -1;
index 8459854360677b869d95fb1416372f2de5478849..8b1567f0255be142c71db66be2b12da2be7cc0c2 100644 (file)
@@ -33,6 +33,18 @@ using namespace std;
 #include <vector>
 #include "utilities.h"
 
+extern "C"
+{
+/**
+ * Factory function which will be called by SMESHDriver
+ */
+void * SMESH_createMEDMeshWriter()
+{
+       return new DriverMED_W_SMESHDS_Mesh();
+}
+
+}
+
 DriverMED_W_SMESHDS_Mesh::DriverMED_W_SMESHDS_Mesh()
 {
        ;
@@ -65,19 +77,7 @@ void DriverMED_W_SMESHDS_Mesh::SetMeshId(int aMeshId)
 
 void DriverMED_W_SMESHDS_Mesh::Write()
 {
-
-       string myClass = string("SMDS_Mesh");
-       string myExtension = string("MED");
-
-       DriverMED_W_SMDS_Mesh *myWriter = new DriverMED_W_SMDS_Mesh;
-
-       myWriter->SetMesh(myMesh);
-       //  myWriter->SetFile(myFile);
-       myWriter->SetMeshId(myMeshId);
-       myWriter->SetFileId(myFileId);
-
-       myWriter->Write();
-
+       Add();
 }
 
 void DriverMED_W_SMESHDS_Mesh::Add()
@@ -520,40 +520,45 @@ void DriverMED_W_SMESHDS_Mesh::Add()
        {
                int nbFamillesElts = 0;
                SMESHDS_Mesh * mySMESHDSMesh = dynamic_cast<SMESHDS_Mesh *>(myMesh);
-               TopTools_IndexedMapOfShape myIndexToShape;
-               TopExp::MapShapes(mySMESHDSMesh->ShapeToMesh(), myIndexToShape);
-
                map<int,int> mapFamille;
 
-               if (besoinfamilledemaille == 1)
+               if(!mySMESHDSMesh->ShapeToMesh().IsNull())
                {
-                       int t;
-                       for (t = 1; t <= myIndexToShape.Extent(); t++)
+                       TopTools_IndexedMapOfShape myIndexToShape;
+                       TopExp::MapShapes(mySMESHDSMesh->ShapeToMesh(), myIndexToShape);
+
+
+                       if (besoinfamilledemaille == 1)
                        {
-                               const TopoDS_Shape S = myIndexToShape(t);
-                               if (mySMESHDSMesh->HasMeshElements(S))
+                               int t;
+                               for (t = 1; t <= myIndexToShape.Extent(); t++)
                                {
-                                       //MESSAGE ("********* Traitement de la Famille "<<-t);
-
-                                       SMESHDS_SubMesh * SM = mySMESHDSMesh->MeshElements(S);
-                                       SMDS_Iterator<const SMDS_MeshElement*> * ite=SM->GetElements();
-                                       bool plein = false;
-                                       while(ite->more())
-                                       {
-                                               mapFamille[ite->next()->GetID()] = -t;
-                                               plein = true;
-                                       }
-                                       if (plein)
+                                       const TopoDS_Shape S = myIndexToShape(t);
+                                       if (mySMESHDSMesh->HasMeshElements(S))
                                        {
-                                               nbFamillesElts++;
-                                               char famille[MED_TAILLE_NOM + 1];
-                                               sprintf(famille, "E%d", t);
-                                               CreateFamily(strdup(nommaa), strdup(famille), -t,
-                                                       attvalabs++);
+                                               //MESSAGE ("********* Traitement de la Famille "<<-t);
+       
+                                               SMESHDS_SubMesh * SM = mySMESHDSMesh->MeshElements(S);
+                                               SMDS_Iterator<const SMDS_MeshElement*> * ite=SM->GetElements();
+                                               bool plein = false;
+                                               while(ite->more())
+                                               {
+                                                       mapFamille[ite->next()->GetID()] = -t;
+                                                       plein = true;
+                                               }
+                                               if (plein)
+                                               {
+                                                       nbFamillesElts++;
+                                                       char famille[MED_TAILLE_NOM + 1];
+                                                       sprintf(famille, "E%d", t);
+                                                       CreateFamily(strdup(nommaa), strdup(famille), -t,
+                                                               attvalabs++);
+                                               }
                                        }
                                }
                        }
                }
+               else besoinfamilledemaille = 0;
 
                int indice = 1;
                for (i = 0; i < MED_NBR_GEOMETRIE_MAILLE; i++)
index 4217426f55b76b664899c84a793badc04e3caf3a..1a5396a8c7d041d69b4f0b45b576ef211da96fa7 100644 (file)
 # 
 #  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
 #
-#
-#
 #  File   : Makefile.in
 #  Author : Marc Tajchman (CEA)
 #  Module : SMESH
-#  $Header$
 
 top_srcdir=@top_srcdir@
 top_builddir=../..
@@ -35,18 +32,23 @@ VPATH=.:@srcdir@
 @COMMENCE@
 
 # header files 
-EXPORT_HEADERS= DriverMED_R_SMDS_Mesh.h DriverMED_R_SMESHDS_Mesh.h DriverMED_R_SMESHDS_Document.h DriverMED_W_SMDS_Mesh.h DriverMED_W_SMESHDS_Mesh.h DriverMED_W_SMESHDS_Document.h 
+EXPORT_HEADERS = \
+       DriverMED_R_SMESHDS_Mesh.h \
+       DriverMED_R_SMESHDS_Document.h \
+       DriverMED_R_SMDS_Mesh.h \
+       DriverMED_W_SMESHDS_Mesh.h 
+       #DriverMED_W_SMDS_Mesh.h \
+       #DriverMED_W_SMESHDS_Document.h 
 
 # Libraries targets
 LIB = libMeshDriverMED.la
 LIB_SRC = \
-       DriverMED_R_SMDS_Mesh.cxx \
        DriverMED_R_SMESHDS_Mesh.cxx \
        DriverMED_R_SMESHDS_Document.cxx \
-       DriverMED_W_SMDS_Mesh.cxx \
-       DriverMED_W_SMESHDS_Document.cxx \
-       DriverMED_W_SMESHDS_Mesh.cxx
-
+       DriverMED_R_SMDS_Mesh.cxx \
+       DriverMED_W_SMESHDS_Mesh.cxx 
+       #DriverMED_W_SMDS_Mesh.cxx \
+       #DriverMED_W_SMESHDS_Document.cxx 
 LIB_CLIENT_IDL =
 LIB_SERVER_IDL =
 
index c6286a7b3fcdc1c065cce18ce17d6673f721e321..36bba747246a9a9457f2cc864c12227d02ba416d 100644 (file)
@@ -3,6 +3,20 @@ using namespace std;
 
 #include "utilities.h"
 
+
+extern "C"
+{
+
+/**
+ * Factory function which will be called by SMESHDriver
+ */
+void * SMESH_createUNVMeshReader()
+{
+       return new DriverUNV_R_SMDS_Mesh();
+}
+
+}
+
 DriverUNV_R_SMDS_Mesh::DriverUNV_R_SMDS_Mesh()
 {
        ;
index 01b112baa9058f229e1371eecd8ba304920722b8..a841488f74340fb4a8bd6db8cb23aa5d0ff07704 100644 (file)
@@ -1,13 +1,7 @@
-using namespace std;
 #include "DriverUNV_W_SMDS_Mesh.h"
-
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 
-
-
-
-
 #include <utilities.h>
 
 #define sNODE_UNV_ID "  2411"
@@ -19,6 +13,19 @@ using namespace std;
 #define sELT_BEAM_DESC1 "%10d        %2d         1         1         7         %1d\n"
 #define sELT_BEAM_DESC2 "         0         1         1\n"
 
+extern "C"
+{
+
+/**
+ * Factory function which will be called by SMESHDriver
+ */
+void * SMESH_createUNVMeshWriter()
+{
+       return new DriverUNV_W_SMDS_Mesh();
+}
+
+}
+
 DriverUNV_W_SMDS_Mesh::DriverUNV_W_SMDS_Mesh()
 {
        ;
@@ -89,7 +96,6 @@ void DriverUNV_W_SMDS_Mesh::Write()
        SCRUTE(nb_of_volumes);
 
        fprintf(stdout, "%d %d\n", nbNodes, nbCells);
-       fprintf(myFileId, "%d %d\n", nbNodes, nbCells);
 
   /****************************************************************************
   *                       ECRITURE DES NOEUDS                                 *
index cfb048787a595a60312f5cc88faefb6cf178b010..f052db37ea2d106d00eae64e491589d92c1f7114 100644 (file)
@@ -35,18 +35,23 @@ VPATH=.:@srcdir@
 @COMMENCE@
 
 # header files 
-EXPORT_HEADERS= DriverUNV_R_SMDS_Mesh.h DriverUNV_R_SMESHDS_Mesh.h DriverUNV_R_SMESHDS_Document.h \
-                DriverUNV_W_SMDS_Mesh.h DriverUNV_W_SMESHDS_Mesh.h DriverUNV_W_SMESHDS_Document.h 
+EXPORT_HEADERS = \
+       DriverUNV_R_SMDS_Mesh.h \
+       DriverUNV_W_SMDS_Mesh.h 
+       #DriverUNV_W_SMESHDS_Mesh.h \
+       #DriverUNV_W_SMESHDS_Document.h \
+       #DriverUNV_R_SMESHDS_Mesh.h \
+       #DriverUNV_R_SMESHDS_Document.h \
 
 # Libraries targets
 LIB = libMeshDriverUNV.la
 LIB_SRC = \
        DriverUNV_R_SMDS_Mesh.cxx \
-       DriverUNV_R_SMESHDS_Mesh.cxx \
-       DriverUNV_R_SMESHDS_Document.cxx \
-       DriverUNV_W_SMESHDS_Document.cxx \
-       DriverUNV_W_SMDS_Mesh.cxx \
-       DriverUNV_W_SMESHDS_Mesh.cxx 
+       DriverUNV_W_SMDS_Mesh.cxx 
+       #DriverUNV_W_SMESHDS_Mesh.cxx \
+       #DriverUNV_R_SMESHDS_Mesh.cxx \
+       #DriverUNV_R_SMESHDS_Document.cxx \
+       #DriverUNV_W_SMESHDS_Document.cxx \
 
 LIB_CLIENT_IDL =
 
index ec40c71ff9a7d3335fdee3cb5a09e6687dd55897..fd5504858e1066114251f0723bd44c9638c56d4b 100644 (file)
@@ -30,6 +30,7 @@
 #include "SMESH_subMesh.hxx"
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMESHDriver.h"
 
 #include <gp_Pnt.hxx>
 #include <BRep_Tool.hxx>
@@ -404,3 +405,38 @@ int SMESH_Gen::GetShapeDim(const TopoDS_Shape & aShape)
 //   SCRUTE(shapeDim);
        return shapeDim;
 }
+
+/**
+ * Import a mesh from a file
+ * @param fileName file name to be imported
+ * @param fileType Currently it could be either "DAT", "UNV" or "MED".
+ * @todo
+ */
+SMESH_Mesh * SMESH_Gen::Import(int studyId, const char * fileName,
+       const char * fileType)
+{
+       MESSAGE("SMESH_Gen::Import("<<studyId<<","<<fileName<<","<<fileType<<")");
+
+       // Get studyContext, create it if it does'nt exist, with a SMESHDS_Document
+       StudyContextStruct *myStudyContext = GetStudyContext(studyId);
+
+       // will be used with document
+       /*Document_Reader * reader = SMESHDriver::GetDocumentReader(string(fileType));
+       reader->SetDocument(myStudyContext->myDocument);
+       reader->SetFile(string(fileName));
+       reader->Read();*/
+       // currently we only read one mesh from a file (limitation on MED files).
+
+       // create a new SMESH_mesh object 
+       SMESH_Mesh *mesh = new SMESH_Mesh(_localId++, studyId, this,
+               myStudyContext->myDocument);
+       myStudyContext->mapMesh[_localId] = mesh;
+       
+       Mesh_Reader * reader = SMESHDriver::GetMeshReader(string(fileType));
+       reader->SetMesh(mesh->GetMeshDS());
+       reader->SetFile(string(fileName));
+       reader->Read();
+       
+       return mesh;
+}
+
index 5443c0e4c9f3870df9ef0c2b021a573e2405e15f..70f17f50605287ab1479e3a01d0bcbaf05692dec 100644 (file)
@@ -69,7 +69,8 @@ class SMESH_Gen
 
        static int GetShapeDim(const TopoDS_Shape & aShape);
        SMESH_Algo *GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape);
-
+       SMESH_Mesh *Import(int studyId, const char * fileName, const char * fileType);
        // inherited methods from SALOMEDS::Driver
 
        void Save(int studyId, const char *aUrlOfFile);
index 82f24dddf92121d8ec04e2c8c063d03a218c2737..a259117302299ad0a19a195b732083d33f1f0403 100644 (file)
 #include "SMESH_Hypothesis.hxx"
 #include "SMESHDS_Script.hxx"
 #include "SMDS_MeshVolume.hxx"
-
 #include "utilities.h"
-
-#include "Mesh_Writer.h"
-#include "DriverMED_W_SMESHDS_Mesh.h"
-#include "DriverDAT_W_SMESHDS_Mesh.h"
-#include "DriverUNV_W_SMESHDS_Mesh.h"
+#include "SMESHDriver.h"
 
 #include <TCollection_AsciiString.hxx>
 
@@ -415,37 +410,22 @@ throw(SALOME_Exception)
        return _subMeshesUsingHypothesisList;
 }
 
-//=============================================================================
 /*!
- *
+ * Export mesh to a file
+ * @param fileName file name where to export the file
+ * @param fileType Currently it could be either "DAT", "UNV" or "MED".
  */
-//=============================================================================
-
-void SMESH_Mesh::ExportMED(const char *file) throw(SALOME_Exception)
-{
-       Mesh_Writer *myWriter = new DriverMED_W_SMESHDS_Mesh;
-       myWriter->SetFile(string(file));
-       myWriter->SetMesh(_myMeshDS);
-       MESSAGE(" _idDoc " << _idDoc) myWriter->SetMeshId(_idDoc);
-       myWriter->Add();
-}
-
-void SMESH_Mesh::ExportDAT(const char *file) throw(SALOME_Exception)
-{
-       Mesh_Writer *myWriter = new DriverDAT_W_SMESHDS_Mesh;
-       myWriter->SetFile(string(file));
-       myWriter->SetMesh(_myMeshDS);
-       myWriter->SetMeshId(_idDoc);
-       myWriter->Add();
-}
-
-void SMESH_Mesh::ExportUNV(const char *file) throw(SALOME_Exception)
+void SMESH_Mesh::Export(const char *fileName, const char *fileType)
+       throw(SALOME_Exception)
 {
-       Mesh_Writer *myWriter = new DriverUNV_W_SMESHDS_Mesh;
-       myWriter->SetFile(string(file));
-       myWriter->SetMesh(_myMeshDS);
-       myWriter->SetMeshId(_idDoc);
-       myWriter->Add();
+       MESSAGE("SMESH_Mesh::Export("<<fileName<<","<<fileType<<")");
+       Mesh_Writer * writer = SMESHDriver::GetMeshWriter(string(fileType));
+       if(writer!=NULL)
+       {
+               writer->SetMesh(GetMeshDS());
+               writer->SetFile(string(fileName));
+               writer->Write();
+       }
 }
 
 //=============================================================================
index f179f68dc10f9e56b760dc1f389f7784322ff2c1..fbda43b0259c0c0fa2af3ec26fa9ec5f92deff8c 100644 (file)
@@ -101,9 +101,8 @@ class SMESH_Mesh
                GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp)
                throw(SALOME_Exception);
 
-       void ExportDAT(const char *file) throw(SALOME_Exception);
-       void ExportMED(const char *file) throw(SALOME_Exception);
-       void ExportUNV(const char *file) throw(SALOME_Exception);
+       void Export(const char *fileName, const char *fileType)
+               throw(SALOME_Exception);
 
        int NbNodes() throw(SALOME_Exception);
 
index 660789e06801ff16c85a25284911f2e33cd98d93..6f6c98f5be4d4fd51aada88a6ea88b54cf7e8ea1 100644 (file)
@@ -126,6 +126,6 @@ CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) $(PYT
 CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome -I${GEOM_ROOT_DIR}/include/salome
 #$(OCC_CXXFLAGS)
 
-LDFLAGS += -lOCCViewer -lVTKViewer -lSalomeObject -lSalomeGUI -lSMESHObject -lSMDS -lSMESHDS -lSMESHFiltersSelection -lGEOMClient -lMeshDriverDAT -lMeshDriverMED -lMeshDriverUNV $(OCC_KERNEL_LIBS) -L${KERNEL_ROOT_DIR}/lib/salome -L${GEOM_ROOT_DIR}/lib/salome
+LDFLAGS += -lOCCViewer -lVTKViewer -lSalomeObject -lSalomeGUI -lSMESHObject -lSMDS -lSMESHDS -lSMESHFiltersSelection -lGEOMClient $(OCC_KERNEL_LIBS) -L${KERNEL_ROOT_DIR}/lib/salome -L${GEOM_ROOT_DIR}/lib/salome
 
 @CONCLUDE@
index 5f56add8f6b6f36327723b5e0dcd1a479b0c7679..47bb68559b16ea0b067f60210a750b86b16fcbf5 100644 (file)
@@ -87,26 +87,6 @@ using namespace std;
 #include "SALOMEGUI_QtCatchCorbaException.hxx"
 #include "utilities.h"
 
-#include "SMDS_Mesh.hxx"
-#include "SMESHDS_Document.hxx"
-#include "Document_Reader.h"
-#include "Document_Writer.h"
-#include "Mesh_Reader.h"
-#include "Mesh_Writer.h"
-
-#include "DriverDAT_R_SMESHDS_Document.h"
-#include "DriverMED_R_SMESHDS_Document.h"
-#include "DriverUNV_R_SMESHDS_Document.h"
-#include "DriverDAT_W_SMESHDS_Document.h"
-#include "DriverMED_W_SMESHDS_Document.h"
-#include "DriverUNV_W_SMESHDS_Document.h"
-#include "DriverDAT_R_SMESHDS_Mesh.h"
-#include "DriverMED_R_SMESHDS_Mesh.h"
-#include "DriverUNV_R_SMESHDS_Mesh.h"
-#include "DriverDAT_W_SMESHDS_Mesh.h"
-#include "DriverMED_W_SMESHDS_Mesh.h"
-#include "DriverUNV_W_SMESHDS_Mesh.h"
-
 // QT Includes
 #define         INCLUDE_MENUITEM_DEF
 #include <qapplication.h>
@@ -237,8 +217,6 @@ SMESHGUI *SMESHGUI::GetOrCreateSMESHGUI(QAD_Desktop * desktop)
                smeshGUI->myStudyAPI =
                        SMESHGUI_StudyAPI(smeshGUI->myStudy, smeshGUI->myComponentMesh);
 
-               smeshGUI->myDocument = new SMESHDS_Document(1); //NBU
-
                smeshGUI->mySimulationActors = vtkActorCollection::New();
                smeshGUI->mySimulationActors2D = vtkActor2DCollection::New();
        }
@@ -2104,8 +2082,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
        case 112:
        case 111:
        {
-               Import_Document(parent, theCommandID);  //NBU
-               //Import_Mesh(parent,theCommandID);
+               smeshGUI->Import_Document(parent, theCommandID);
                break;
        }
 
@@ -3498,58 +3475,6 @@ SALOMEDS::Study::ListOfSObject *
        return listSOmesh._retn();
 }
 
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::Import_Mesh(QAD_Desktop * parent, int theCommandID)
-{
-       QString filter;
-       string myExtension;
-       Mesh_Reader *myReader;
-
-       if (theCommandID == 113)
-       {
-               filter = tr("MED files (*.med)");
-               myExtension = string("MED");
-               myReader = new DriverMED_R_SMESHDS_Mesh;
-       }
-       else if (theCommandID == 112)
-       {
-               filter = tr("IDEAS files (*.unv)");
-               myExtension = string("UNV");
-       }
-       else if (theCommandID == 111)
-       {
-               filter = tr("DAT files (*.dat)");
-               myExtension = string("MED");
-               myReader = new DriverDAT_R_SMESHDS_Mesh;
-       }
-
-       QString filename = QAD_FileDlg::getFileName(parent,
-               "",
-               filter,
-               tr("Import mesh"),
-               true);
-       if (!filename.isEmpty())
-       {
-               QApplication::setOverrideCursor(Qt::waitCursor);
-               string myClass = string("SMESHDS_Mesh");
-//    Mesh_Reader* myReader = SMESHDriver::GetMeshReader(myExtension, myClass);
-
-               int myMeshId = (smeshGUI->myDocument)->NewMesh();
-               SMDS_Mesh *myMesh = (smeshGUI->myDocument)->GetMesh(myMeshId);
-
-               myReader->SetFile(string(filename.latin1()));
-               myReader->SetMesh(myMesh);
-               myReader->SetMeshId(myMeshId);
-               myReader->Read();
-
-               QApplication::restoreOverrideCursor();
-       }
-}
-
 //=============================================================================
 /*!
  *
@@ -3577,7 +3502,7 @@ void SMESHGUI::Export_Mesh(QAD_Desktop * parent, int theCommandID)
                                if (!filename.isEmpty())
                                {
                                        QApplication::setOverrideCursor(Qt::waitCursor);
-                                       aMesh->ExportMED(filename.latin1());
+                                       aMesh->Export(filename.latin1(), "MED");
                                        QApplication::restoreOverrideCursor();
                                }
                        }
@@ -3591,7 +3516,7 @@ void SMESHGUI::Export_Mesh(QAD_Desktop * parent, int theCommandID)
                                if (!filename.isEmpty())
                                {
                                        QApplication::setOverrideCursor(Qt::waitCursor);
-                                       aMesh->ExportDAT(filename.latin1());
+                                       aMesh->Export(filename.latin1(), "DAT");
                                        QApplication::restoreOverrideCursor();
                                }
                        }
@@ -3605,11 +3530,11 @@ void SMESHGUI::Export_Mesh(QAD_Desktop * parent, int theCommandID)
                                if (!filename.isEmpty())
                                {
                                        QApplication::setOverrideCursor(Qt::waitCursor);
-                                       aMesh->ExportUNV(filename.latin1());
+                                       aMesh->Export(filename.latin1(), "UNV");
                                        QApplication::restoreOverrideCursor();
                                }
                                else
-                                       aMesh->ExportDAT(filename.latin1());
+                                       aMesh->Export(filename.latin1(), "DAT");
 
                                QApplication::restoreOverrideCursor();
 
@@ -3642,90 +3567,49 @@ void SMESHGUI::Import_Document(QAD_Desktop * parent, int theCommandID)
 {
        QString filter;
        string myExtension;
-       Document_Reader *myReader;
 
        if (theCommandID == 113)
        {
                filter = tr("MED files (*.med)");
                myExtension = string("MED");
-               myReader = new DriverMED_R_SMESHDS_Document;
        }
        else if (theCommandID == 112)
        {
                filter = tr("IDEAS files (*.unv)");
                myExtension = string("UNV");
-               myReader = new DriverUNV_R_SMESHDS_Document;
        }
        else if (theCommandID == 111)
        {
                filter = tr("DAT files (*.dat)");
                myExtension = string("DAT");
-               myReader = new DriverDAT_R_SMESHDS_Document;
        }
 
-       QString filename = QAD_FileDlg::getFileName(parent,
-               "",
-               filter,
-               tr("Import document"),
-               true);
-       if (!filename.isEmpty())
-       {
-               QApplication::setOverrideCursor(Qt::waitCursor);
-               string myClass = string("SMESHDS_Document");
-//    Document_Reader* myReader = SMESHDriver::GetDocumentReader(myExtension, myClass);
-               SMESHDS_Document *newDocument = new SMESHDS_Document(1);
-
-               myReader->SetFile(string(filename.latin1()));
-               myReader->SetDocument(smeshGUI->myDocument);
-               myReader->Read();
-               QApplication::restoreOverrideCursor();
-       }
-}
-
-void SMESHGUI::Export_Document(QAD_Desktop * parent, int theCommandID)
-{
-       QString filter;
-       Document_Writer *myWriter;
-       string myExtension;
-
-       if (theCommandID == 122)
-       {
-               filter = tr("MED files (*.med)");
-               myExtension = string("MED");
-               myWriter = new DriverMED_W_SMESHDS_Document;
-       }
-       else if (theCommandID == 121)
-       {
-               filter = tr("DAT files (*.dat)");
-               myExtension = string("DAT");
-               myWriter = new DriverDAT_W_SMESHDS_Document;
-       }
-       else if (theCommandID == 123)
-       {
-               filter = tr("IDEAS files (*.unv)");
-               myExtension = string("UNV");
-               myWriter = new DriverUNV_W_SMESHDS_Document;
-       }
+       QString filename = QAD_FileDlg::getFileName(parent, "", filter,
+               tr("Import document"), true);
 
-       QString filename = QAD_FileDlg::getFileName(parent,
-               "",
-               filter,
-               tr("Export document"),
-               false);
        if (!filename.isEmpty())
        {
                QApplication::setOverrideCursor(Qt::waitCursor);
-               string myClass = string("SMESHDS_Document");
-               //Document_Writer* myWriter = SMESHDriver::GetDocumentWriter(myExtension, myClass);
-
-               myWriter->SetFile(string(filename.latin1()));
-               myWriter->SetDocument(smeshGUI->myDocument);
-
-               //StudyContextStruct* myStudyContext = _impl.GetStudyContext(myStudyId);
-               //Handle(SMESHDS_Document) myDocument = myStudyContext->myDocument;
-               //myWriter->SetDocument(myDocument);
-
-               myWriter->Write();
+               try
+               {
+                       if (!myComponentMesh->_is_nil())
+                       {
+                               SMESH::SMESH_Mesh_var aMesh =
+                                       myComponentMesh->Import(myStudyId, filename.latin1(),
+                                       myExtension.c_str());
+       
+                               if (!aMesh->_is_nil())
+                               {
+                                       SALOMEDS::SObject_var SM = myStudyAPI.AddNewMesh(aMesh);
+                                       myStudyAPI.SetName(SM, filename);
+                               }
+                       }
+               }
+               catch(const SALOME::SALOME_Exception & S_ex)
+               {
+                       QtCatchCorbaException(S_ex);
+               }
+               myActiveStudy->updateObjBrowser(true);
                QApplication::restoreOverrideCursor();
        }
 }
index ee29287bfb2c54b9e87e3d2cce9a4a9e4cdcc10e..fdcbe7cda9e7be319c3a6000a91de3479be00b55 100644 (file)
@@ -88,8 +88,6 @@ private :
 
   //  vtkScalarBarActor*    myScalarBar;
 
-  SMESHDS_Document *        myDocument;//NBU
-
   bool                      myAutomaticUpdate;
 
 public :
@@ -303,9 +301,7 @@ public :
   static void setOrb();
 
   /* Import/Export */ //NBU
-  static void Import_Document(QAD_Desktop* parent, int theCommandID);
-  static void Export_Document(QAD_Desktop* parent, int theCommandID);
-  static void Import_Mesh(QAD_Desktop* parent, int theCommandID);
+  void Import_Document(QAD_Desktop* parent, int theCommandID);
   static void Export_Mesh(QAD_Desktop* parent, int theCommandID);
 
 signals:
index b55ed358bd435e495cc3ccc3d447b8254b031c0d..e9dcc0ffe79be69e616754002a3322c54678da9d 100644 (file)
@@ -55,14 +55,7 @@ using namespace std;
 #include "SMESH_MaxElementArea_i.hxx"
 #include "SMESH_MaxElementVolume_i.hxx"
 
-#include "SMESHDS_Document.hxx"
-
-#include "Document_Reader.h"
-#include "DriverMED_W_SMESHDS_Mesh.h"
-#include "DriverMED_R_SMESHDS_Mesh.h"
-#include "DriverMED_R_SMESHDS_Document.h"
-#include "DriverUNV_R_SMESHDS_Document.h"
-#include "DriverDAT_R_SMESHDS_Document.h"
+#include "SMESHDriver.h"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
@@ -580,11 +573,11 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
        SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
        
        SCRUTE(mySMESHDSMesh->NbNodes());
-       if (mySMESHDSMesh->NbNodes()>0) {//checks if the mesh is not empty
-         
-         DriverMED_W_SMESHDS_Mesh* myWriter = new DriverMED_W_SMESHDS_Mesh;
+       if (mySMESHDSMesh->NbNodes()>0)
+       {
+         //checks if the mesh is not empty       
+         Mesh_Writer * myWriter = SMESHDriver::GetMeshWriter("MED");
          myWriter->SetFile(meshfile.ToCString());
-         
          myWriter->SetMesh(mySMESHDSMesh);
          myWriter->SetMeshId(gotBranch->Tag());
          myWriter->Add();
@@ -1134,47 +1127,22 @@ bool SMESH_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
                                
          //********** 
          //********** Loading of mesh data
-         if (strcmp(datafilename,"No data")!=0) {
-                 
-           med_idt fid;
+         if (strcmp(datafilename,"No data")!=0)
+         {
            int ret;
-           
-           //****************************************************************************
-           //*                      OUVERTURE DU FICHIER EN LECTURE                      *
-           //****************************************************************************
-                 
-           fid = MEDouvrir(datafilename,MED_LECT);
-           if (fid < 0)
-             {
-               printf(">> ERREUR : ouverture du fichier %s \n",datafilename);
-               exit(EXIT_FAILURE);
-             }
-           else {
-                   
-             StudyContext_iStruct* myStudyContext = _mapStudyContext_i[studyId];
-             int meshId = myNewMesh->GetId();
-             SMESH_Mesh_i* meshServant = myStudyContext->mapMesh_i[meshId];
-             ::SMESH_Mesh& myLocMesh = meshServant->GetImpl();
-             SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
-                   
-             DriverMED_R_SMESHDS_Mesh* myReader = new DriverMED_R_SMESHDS_Mesh;
-                   
-             myReader->SetMesh(mySMESHDSMesh);
-             myReader->SetMeshId(myMeshId);
-             myReader->SetFileId(fid);
-             myReader->ReadMySelf();
-             //SCRUTE(mySMESHDSMesh->NbNodes());
-             //myNewMesh->ExportUNV("/tmp/test.unv");//only to check out
-                   
-             //****************************************************************************
-             //*                      FERMETURE DU FICHIER                                 *
-             //****************************************************************************
-             ret = MEDfermer(fid);
-                   
-             if (ret != 0)
-               printf(">> ERREUR : erreur a la fermeture du fichier %s\n",datafilename);
-                   
-           }
+           StudyContext_iStruct* myStudyContext = _mapStudyContext_i[studyId];
+           int meshId = myNewMesh->GetId();
+           SMESH_Mesh_i* meshServant = myStudyContext->mapMesh_i[meshId];
+           ::SMESH_Mesh& myLocMesh = meshServant->GetImpl();
+           SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
+
+           Mesh_Reader* myReader = SMESHDriver::GetMeshReader("MED");
+           myReader->SetMesh(mySMESHDSMesh);
+           myReader->SetMeshId(myMeshId);
+           myReader->SetFile(datafilename);
+           myReader->Read();
+           //SCRUTE(mySMESHDSMesh->NbNodes());
+           //myNewMesh->ExportUNV("/tmp/test.unv");//only to check out
          }
        }
        //********** 
@@ -1735,6 +1703,46 @@ SMESH_topo* SMESH_Gen_i::ExploreMainShape(GEOM::GEOM_Gen_ptr geomEngine,
   return myTopo;
 }
       
+/**
+ * Import a mesh from a file
+ * @param fileName file name to be imported
+ * @param fileType Currently it could be either "DAT", "UNV" or "MED".
+ */
+SMESH::SMESH_Mesh_ptr SMESH_Gen_i::Import(CORBA::Long studyId,
+       const char* fileName, const char* fileType)
+{
+       MESSAGE("SMESH_Gen_I::Import");
+       SMESH_Mesh_i* meshServant;
+       try
+       {
+               if (_mapStudyContext_i.find(studyId) == _mapStudyContext_i.end())
+               {
+                       _mapStudyContext_i[studyId] = new StudyContext_iStruct;      
+               }
+               StudyContext_iStruct* myStudyContext = _mapStudyContext_i[studyId];
+
+               // create a new mesh object servant, store it in a map in study context
+               meshServant = new SMESH_Mesh_i(this, NULL, studyId, _localId);
+               myStudyContext->mapMesh_i[_localId] = meshServant;
+               _localId++;
+
+               // create a new mesh object
+               meshServant->SetImpl(_impl.Import(studyId, fileName, fileType));
+       }
+       catch (SALOME_Exception& S_ex)
+       {
+               THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
+       }
+
+       // activate the CORBA servant of Mesh
+
+       SMESH::SMESH_Mesh_var mesh
+               = SMESH::SMESH_Mesh::_narrow(meshServant->_this());
+  
+       meshServant->SetIor(mesh);
+       return SMESH::SMESH_Mesh::_duplicate(mesh);
+}
+
 //=============================================================================
 /*! 
  * C factory, accessible with dlsym, after dlopen  
index 1a045328542cbdf72919f7b0999aa9b0f35f7e8c..4b9548e9554ac9b78f1fe1b4bc3ad1adce23a05e 100644 (file)
@@ -96,6 +96,8 @@ public:
                                    const SMESH::shape_array& listOfSubShape)
     throw (SALOME::SALOME_Exception);
 
+       SMESH::SMESH_Mesh_ptr Import(CORBA::Long studyId, const char* fileName,
+               const char* fileType);
 
   // inherited methods from SALOMEDS::Driver
 
index 9dee0f5621005a8ca9ff9276bb9e6ebae73bcca1..7a2ffaa995c1757ce5f0b96563cc32243b775d73 100644 (file)
@@ -530,25 +530,6 @@ SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
  */
 //=============================================================================
 
-void SMESH_Mesh_i::ExportMED(const char *file) throw(SALOME::SALOME_Exception)
-{
-       _impl->ExportMED(file);
-}
-void SMESH_Mesh_i::ExportDAT(const char *file) throw(SALOME::SALOME_Exception)
-{
-       _impl->ExportDAT(file);
-}
-void SMESH_Mesh_i::ExportUNV(const char *file) throw(SALOME::SALOME_Exception)
-{
-       _impl->ExportUNV(file);
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
 SALOME_MED::MESH_ptr SMESH_Mesh_i::GetMEDMesh()throw(SALOME::SALOME_Exception)
 {
        SMESH_MEDMesh_i *aMedMesh = new SMESH_MEDMesh_i(this);
@@ -625,3 +606,14 @@ CORBA::Long SMESH_Mesh_i::NbSubMesh()throw(SALOME::SALOME_Exception)
 {
        return _impl->NbSubMesh();
 }
+
+/*!
+ * Export mesh to a file
+ * @param fileName file name where to export the file
+ * @param fileType Currently it could be either "DAT", "UNV" or "MED".
+ */
+void SMESH_Mesh_i::Export(const char* fileName, const char* fileType)
+       throw (SALOME::SALOME_Exception)
+{
+       _impl->Export(fileName, fileType);
+}
index ca631431e5e2e249da5b2ef5efe15e1e6b8d09e9..74a03a75b9e8e659adf532cdaa9e2d3597ca4667 100644 (file)
@@ -91,6 +91,9 @@ public:
   CORBA::Long GetStudyId()
     throw (SALOME::SALOME_Exception);
 
+  void Export(const char* fileName, const char* fileType)
+       throw (SALOME::SALOME_Exception);
+
   // --- C++ interface
 
   void SetImpl(::SMESH_Mesh* impl);
@@ -100,13 +103,6 @@ public:
   void SetIor(SMESH::SMESH_Mesh_ptr myIor);
   SMESH::SMESH_Mesh_ptr GetIor();
 
-  void ExportMED( const char* file )
-    throw (SALOME::SALOME_Exception);
-  void ExportDAT( const char* file )
-    throw (SALOME::SALOME_Exception);
-  void ExportUNV( const char* file )
-    throw (SALOME::SALOME_Exception);
-
   SALOME_MED::MESH_ptr GetMEDMesh()
     throw (SALOME::SALOME_Exception);