From c33d1b01132679f24994aa63d2a7aedbd348c3ef Mon Sep 17 00:00:00 2001 From: jrt Date: Mon, 16 Feb 2004 10:13:47 +0000 Subject: [PATCH] Import mesh is now done in the SMESH container, not in SMESHGUI. Each mesh file parser and writer is a plugin loadable as a shared library --- idl/SMESH_Gen.idl | 8 +- idl/SMESH_Mesh.idl | 10 +- src/Driver/Document_Reader.cxx | 13 ++ src/Driver/Document_Reader.h | 9 +- src/Driver/Document_Writer.cxx | 32 ++- src/Driver/Document_Writer.h | 8 +- src/Driver/Makefile.in | 14 +- src/Driver/SMESHDriver.cxx | 185 ++++++++---------- src/Driver/SMESHDriver.h | 15 +- src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx | 14 +- src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx | 58 +++--- src/DriverDAT/Makefile.in | 16 +- .../DriverMED_R_SMESHDS_Document.cxx | 5 +- src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx | 12 ++ src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx | 79 ++++---- src/DriverMED/Makefile.in | 20 +- src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx | 14 ++ src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx | 20 +- src/DriverUNV/Makefile.in | 19 +- src/SMESH/SMESH_Gen.cxx | 36 ++++ src/SMESH/SMESH_Gen.hxx | 3 +- src/SMESH/SMESH_Mesh.cxx | 48 ++--- src/SMESH/SMESH_Mesh.hxx | 5 +- src/SMESHGUI/Makefile.in | 2 +- src/SMESHGUI/SMESHGUI.cxx | 170 +++------------- src/SMESHGUI/SMESHGUI.h | 6 +- src/SMESH_I/SMESH_Gen_i.cxx | 112 ++++++----- src/SMESH_I/SMESH_Gen_i.hxx | 2 + src/SMESH_I/SMESH_Mesh_i.cxx | 30 ++- src/SMESH_I/SMESH_Mesh_i.hxx | 10 +- 30 files changed, 491 insertions(+), 484 deletions(-) diff --git a/idl/SMESH_Gen.idl b/idl/SMESH_Gen.idl index c30750bf0..82136fee1 100644 --- a/idl/SMESH_Gen.idl +++ b/idl/SMESH_Gen.idl @@ -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); }; }; diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index a051ada9d..ea65c8d3f 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -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); /*! diff --git a/src/Driver/Document_Reader.cxx b/src/Driver/Document_Reader.cxx index 26dcf1450..edb1c77a9 100644 --- a/src/Driver/Document_Reader.cxx +++ b/src/Driver/Document_Reader.cxx @@ -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) +{ +} diff --git a/src/Driver/Document_Reader.h b/src/Driver/Document_Reader.h index 2766466c2..719665856 100644 --- a/src/Driver/Document_Reader.h +++ b/src/Driver/Document_Reader.h @@ -28,17 +28,22 @@ #define _INCLUDE_DOCUMENT_READER #include "SMESHDS_Document.hxx" +#include "Mesh_Reader.h" #include 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 diff --git a/src/Driver/Document_Writer.cxx b/src/Driver/Document_Writer.cxx index 8704c1284..95f195dc3 100644 --- a/src/Driver/Document_Writer.cxx +++ b/src/Driver/Document_Writer.cxx @@ -18,14 +18,9 @@ // 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) +{ +} diff --git a/src/Driver/Document_Writer.h b/src/Driver/Document_Writer.h index 4aea9605c..f50b59486 100644 --- a/src/Driver/Document_Writer.h +++ b/src/Driver/Document_Writer.h @@ -28,17 +28,21 @@ #define _INCLUDE_DOCUMENT_WRITER #include "SMESHDS_Document.hxx" +#include "Mesh_Writer.h" #include 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 diff --git a/src/Driver/Makefile.in b/src/Driver/Makefile.in index 6016ac85f..cad4d3b89 100644 --- a/src/Driver/Makefile.in +++ b/src/Driver/Makefile.in @@ -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 = diff --git a/src/Driver/SMESHDriver.cxx b/src/Driver/SMESHDriver.cxx index 83e9037a5..696c00d88 100644 --- a/src/Driver/SMESHDriver.cxx +++ b/src/Driver/SMESHDriver.cxx @@ -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 @@ -18,122 +18,97 @@ // 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 #include -//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(); + } +} diff --git a/src/Driver/SMESHDriver.h b/src/Driver/SMESHDriver.h index 78731c33d..119208c2e 100644 --- a/src/Driver/SMESHDriver.h +++ b/src/Driver/SMESHDriver.h @@ -32,14 +32,17 @@ #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 diff --git a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx b/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx index bd95f49fb..0990acc5d 100644 --- a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx +++ b/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx @@ -24,11 +24,21 @@ // 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() { ; diff --git a/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx b/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx index 9ebe754b3..d99a124fa 100644 --- a/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx +++ b/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx @@ -24,17 +24,25 @@ // 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 * itEdges=myMesh->edgesIterator(); + SMDS_Iterator * 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 * it=elem->nodesIterator(); - while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID()); - + SMDS_Iterator * itNodes=elem->nodesIterator(); + while(itNodes->more()) + fprintf(myFileId, "%d ", itNodes->next()->GetID()); + fprintf(myFileId, "\n"); } + delete itEdges; SMDS_Iterator * itFaces=myMesh->facesIterator(); while(itFaces->more()) @@ -176,13 +184,16 @@ void DriverDAT_W_SMDS_Mesh::Write() } } - SMDS_Iterator * it=elem->nodesIterator(); - while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID()); - + SMDS_Iterator * itNodes=elem->nodesIterator(); + while(itNodes->more()) + fprintf(myFileId, "%d ", itNodes->next()->GetID()); + delete itNodes; + fprintf(myFileId, "\n"); } + delete itFaces; - SMDS_Iterator * itVolumes=myMesh->volumesIterator(); + SMDS_Iterator * itVolumes=myMesh->volumesIterator(); while(itVolumes->more()) { const SMDS_MeshElement * elem = itVolumes->next(); @@ -196,11 +207,14 @@ void DriverDAT_W_SMDS_Mesh::Write() } } - SMDS_Iterator * it=elem->nodesIterator(); - while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID()); + SMDS_Iterator * itNodes=elem->nodesIterator(); + while(itNodes->more()) + fprintf(myFileId, "%d ", itNodes->next()->GetID()); + delete itNodes; fprintf(myFileId, "\n"); } + delete itVolumes; fclose(myFileId); } diff --git a/src/DriverDAT/Makefile.in b/src/DriverDAT/Makefile.in index cf3dba921..8043bf715 100644 --- a/src/DriverDAT/Makefile.in +++ b/src/DriverDAT/Makefile.in @@ -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 = diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Document.cxx b/src/DriverMED/DriverMED_R_SMESHDS_Document.cxx index ca50c550e..4949199ab 100644 --- a/src/DriverMED/DriverMED_R_SMESHDS_Document.cxx +++ b/src/DriverMED/DriverMED_R_SMESHDS_Document.cxx @@ -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 * ****************************************************************************/ diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx index 1652a55a7..3c1475954 100644 --- a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx @@ -31,6 +31,18 @@ using namespace std; #include +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; diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx index 845985436..8b1567f02 100644 --- a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx @@ -33,6 +33,18 @@ using namespace std; #include #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(myMesh); - TopTools_IndexedMapOfShape myIndexToShape; - TopExp::MapShapes(mySMESHDSMesh->ShapeToMesh(), myIndexToShape); - map 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 * 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 * 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++) diff --git a/src/DriverMED/Makefile.in b/src/DriverMED/Makefile.in index 4217426f5..1a5396a8c 100644 --- a/src/DriverMED/Makefile.in +++ b/src/DriverMED/Makefile.in @@ -19,12 +19,9 @@ # # 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 = diff --git a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx index c6286a7b3..36bba7472 100644 --- a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx +++ b/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx @@ -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() { ; diff --git a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx index 01b112baa..a841488f7 100644 --- a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx +++ b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx @@ -1,13 +1,7 @@ -using namespace std; #include "DriverUNV_W_SMDS_Mesh.h" - #include "SMDS_MeshElement.hxx" #include "SMDS_MeshNode.hxx" - - - - #include #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 * diff --git a/src/DriverUNV/Makefile.in b/src/DriverUNV/Makefile.in index cfb048787..f052db37e 100644 --- a/src/DriverUNV/Makefile.in +++ b/src/DriverUNV/Makefile.in @@ -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 = diff --git a/src/SMESH/SMESH_Gen.cxx b/src/SMESH/SMESH_Gen.cxx index ec40c71ff..fd5504858 100644 --- a/src/SMESH/SMESH_Gen.cxx +++ b/src/SMESH/SMESH_Gen.cxx @@ -30,6 +30,7 @@ #include "SMESH_subMesh.hxx" #include "SMDS_MeshElement.hxx" #include "SMDS_MeshNode.hxx" +#include "SMESHDriver.h" #include #include @@ -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("<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; +} + diff --git a/src/SMESH/SMESH_Gen.hxx b/src/SMESH/SMESH_Gen.hxx index 5443c0e4c..70f17f506 100644 --- a/src/SMESH/SMESH_Gen.hxx +++ b/src/SMESH/SMESH_Gen.hxx @@ -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); diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 82f24dddf..a25911730 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -32,13 +32,8 @@ #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 @@ -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("<SetMesh(GetMeshDS()); + writer->SetFile(string(fileName)); + writer->Write(); + } } //============================================================================= diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx index f179f68dc..fbda43b02 100644 --- a/src/SMESH/SMESH_Mesh.hxx +++ b/src/SMESH/SMESH_Mesh.hxx @@ -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); diff --git a/src/SMESHGUI/Makefile.in b/src/SMESHGUI/Makefile.in index 660789e06..6f6c98f5b 100644 --- a/src/SMESHGUI/Makefile.in +++ b/src/SMESHGUI/Makefile.in @@ -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@ diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 5f56add8f..47bb68559 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -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 @@ -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(); } } diff --git a/src/SMESHGUI/SMESHGUI.h b/src/SMESHGUI/SMESHGUI.h index ee29287bf..fdcbe7cda 100644 --- a/src/SMESHGUI/SMESHGUI.h +++ b/src/SMESHGUI/SMESHGUI.h @@ -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: diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index b55ed358b..e9dcc0ffe 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -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 diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 1a0453285..4b9548e95 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -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 diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 9dee0f562..7a2ffaa99 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -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); +} diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index ca631431e..74a03a75b 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -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); -- 2.39.2