Merge br_enable_import_mesh. Enable import mesh and save/load SMESH study.

This commit is contained in:
jrt 2004-03-15 18:42:16 +00:00
parent c9d641a57d
commit 7b70ad87bf
44 changed files with 2497 additions and 2000 deletions

View File

@ -104,7 +104,13 @@ module SMESH
// in shape_array listOfSubShape) // in shape_array listOfSubShape)
// raises (SALOME::SALOME_Exception); // 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);
}; };
}; };

View File

@ -49,7 +49,8 @@ module SMESH
ADD_PRISM, ADD_PRISM,
ADD_HEXAHEDRON, ADD_HEXAHEDRON,
REMOVE_NODE, REMOVE_NODE,
REMOVE_ELEMENT REMOVE_ELEMENT,
REMOVE_ALL
}; };
struct log_block struct log_block
@ -161,13 +162,11 @@ module SMESH
raises (SALOME::SALOME_Exception); 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 ) void Export( in string fileName, in string fileType )
raises (SALOME::SALOME_Exception);
void ExportMED( in string file )
raises (SALOME::SALOME_Exception);
void ExportUNV( in string file )
raises (SALOME::SALOME_Exception); raises (SALOME::SALOME_Exception);
/*! /*!

View File

@ -38,3 +38,16 @@ void Document_Reader::SetDocument(SMESHDS_Document * aDoc)
{ {
myDocument = 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)
{
}

View File

@ -28,17 +28,22 @@
#define _INCLUDE_DOCUMENT_READER #define _INCLUDE_DOCUMENT_READER
#include "SMESHDS_Document.hxx" #include "SMESHDS_Document.hxx"
#include "Mesh_Reader.h"
#include <string> #include <string>
class Document_Reader class Document_Reader
{ {
public: public:
virtual void Read() = 0; virtual void Read();
void SetFile(string); void SetFile(string);
void SetDocument(SMESHDS_Document *); void SetDocument(SMESHDS_Document *);
Document_Reader(Mesh_Reader*);
protected: protected:
SMESHDS_Document * myDocument; SMESHDS_Document * myDocument;
string myFile; string myFile;
private:
Mesh_Reader* myReader;
}; };
#endif #endif

View File

@ -18,14 +18,9 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // 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 "Document_Writer.h"
#include "utilities.h"
void Document_Writer::SetFile(string aFile) void Document_Writer::SetFile(string aFile)
{ {
@ -36,3 +31,28 @@ void Document_Writer::SetDocument(SMESHDS_Document * aDoc)
{ {
myDocument = 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)
{
}

View File

@ -28,17 +28,21 @@
#define _INCLUDE_DOCUMENT_WRITER #define _INCLUDE_DOCUMENT_WRITER
#include "SMESHDS_Document.hxx" #include "SMESHDS_Document.hxx"
#include "Mesh_Writer.h"
#include <string> #include <string>
class Document_Writer class Document_Writer
{ {
public:virtual void Write() = 0; public:virtual void Write();
void SetFile(string); void SetFile(string);
void SetDocument(SMESHDS_Document *); void SetDocument(SMESHDS_Document *);
Document_Writer(Mesh_Writer* );
protected: SMESHDS_Document * myDocument; protected:
SMESHDS_Document * myDocument;
string myFile; string myFile;
Mesh_Writer * myWriter;
}; };
#endif #endif

View File

@ -35,11 +35,21 @@ VPATH=.:@srcdir@
@COMMENCE@ @COMMENCE@
# header files # 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 # Libraries targets
LIB = libMeshDriver.la 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 = LIB_CLIENT_IDL =

View 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, // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // 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 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
//
//
//
// File : SMESHDriver.cxx
// Module : SMESH
using namespace std;
#include "SMESHDriver.h" #include "SMESHDriver.h"
#include <dlfcn.h> #include <dlfcn.h>
#include <utilities.h> #include <utilities.h>
//A enlever Document_Reader* SMESHDriver::GetDocumentReader(string Extension)
#include "DriverMED_R_SMESHDS_Document.h" {
#include "DriverMED_R_SMESHDS_Mesh.h" // if there is not document reader in the driver create a default
#include "DriverMED_R_SMDS_Mesh.h" // one with the mesh reader.
#include "DriverMED_W_SMESHDS_Document.h" Document_Reader * docReader=
#include "DriverMED_W_SMESHDS_Mesh.h" (Document_Reader*)getMeshDocumentDriver(Extension);
#include "DriverMED_W_SMDS_Mesh.h"
#include "DriverDAT_R_SMESHDS_Document.h" if(docReader==NULL)
#include "DriverDAT_R_SMESHDS_Mesh.h" {
#include "DriverDAT_R_SMDS_Mesh.h" Mesh_Reader * reader=GetMeshReader(Extension);
#include "DriverDAT_W_SMESHDS_Document.h" if(reader==NULL)
#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"); MESSAGE("No driver known for this extension");
return (Document_Reader*)NULL; return NULL;
}
return new Document_Reader(reader);
}
else return docReader;
} }
Document_Writer* SMESHDriver::GetDocumentWriter(string Extension)
} {
Mesh_Writer * writer=GetMeshWriter(Extension);
Document_Writer* SMESHDriver::GetDocumentWriter(string Extension, string Class) { if(writer==NULL)
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"); MESSAGE("No driver known for this extension");
return (Document_Writer*)NULL; return NULL;
}
return new Document_Writer(writer);
} }
Mesh_Reader* SMESHDriver::GetMeshReader(string extension)
{
void * driver = getMeshDriver(extension, string("Reader"));
return (Mesh_Reader*)driver;
} }
Mesh_Reader* SMESHDriver::GetMeshReader(string Extension, string Class) { Mesh_Writer* SMESHDriver::GetMeshWriter(string extension)
if (Extension==string("MED")) { {
void * driver = getMeshDriver(extension, string("Writer"));
if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) { return (Mesh_Writer*)driver;
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);
} }
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 if (Extension==string("DAT")) { else
{
if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) { void * (*factory)();
DriverDAT_R_SMESHDS_Mesh* myDriver = new DriverDAT_R_SMESHDS_Mesh(); string symbol = string("SMESH_create")+extension+string("Mesh")+type;
return (myDriver); factory = (void * (*)()) dlsym(handle, symbol.c_str());
if(factory==NULL)
{
fputs (dlerror(), stderr);
return NULL;
}
else return factory();
} }
else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) {
DriverDAT_R_SMDS_Mesh* myDriver = new DriverDAT_R_SMDS_Mesh();
return (myDriver);
} }
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();
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);
}
}
}

View File

@ -32,14 +32,17 @@
#include "Mesh_Reader.h" #include "Mesh_Reader.h"
#include "Mesh_Writer.h" #include "Mesh_Writer.h"
class SMESHDriver { class SMESHDriver
{
public : public :
static Document_Reader* GetDocumentReader(string Extension, string Class); static Document_Reader* GetDocumentReader(string Extension);
static Document_Writer* GetDocumentWriter(string Extension, string Class); static Document_Writer* GetDocumentWriter(string Extension);
static Mesh_Reader* GetMeshReader(string Extension, string Class); static Mesh_Reader* GetMeshReader(string Extension);
static Mesh_Writer* GetMeshWriter(string Extension, string Class); static Mesh_Writer* GetMeshWriter(string Extension);
private:
static void * getMeshDriver(string Extension, string type);
static void * getMeshDocumentDriver(string Extension);
}; };
#endif #endif

View File

@ -24,11 +24,21 @@
// File : DriverDAT_R_SMDS_Mesh.cxx // File : DriverDAT_R_SMDS_Mesh.cxx
// Module : SMESH // Module : SMESH
using namespace std;
#include "DriverDAT_R_SMDS_Mesh.h" #include "DriverDAT_R_SMDS_Mesh.h"
#include "utilities.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() DriverDAT_R_SMDS_Mesh::DriverDAT_R_SMDS_Mesh()
{ {
; ;

View File

@ -24,17 +24,25 @@
// File : DriverDAT_W_SMDS_Mesh.cxx // File : DriverDAT_W_SMDS_Mesh.cxx
// Module : SMESH // Module : SMESH
using namespace std;
#include "DriverDAT_W_SMDS_Mesh.h" #include "DriverDAT_W_SMDS_Mesh.h"
#include "SMDS_MeshElement.hxx" #include "SMDS_MeshElement.hxx"
#include "SMDS_MeshNode.hxx" #include "SMDS_MeshNode.hxx"
#include "utilities.h" #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()
{ {
;
} }
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() 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() void DriverDAT_W_SMDS_Mesh::Write()
{ {
int nbNodes, nbCells; int nbNodes, nbCells;
int i; int i;
@ -80,7 +88,7 @@ void DriverDAT_W_SMDS_Mesh::Write()
fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read); fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
SCRUTE(myMesh);
/**************************************************************************** /****************************************************************************
* NOMBRES D'OBJETS * * NOMBRES D'OBJETS *
****************************************************************************/ ****************************************************************************/
@ -97,9 +105,6 @@ void DriverDAT_W_SMDS_Mesh::Write()
nb_of_faces = myMesh->NbFaces(); nb_of_faces = myMesh->NbFaces();
nb_of_volumes = myMesh->NbVolumes(); nb_of_volumes = myMesh->NbVolumes();
nbCells = nb_of_edges + nb_of_faces + nb_of_volumes; 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(stdout, "%d %d\n", nbNodes, nbCells);
fprintf(myFileId, "%d %d\n", nbNodes, nbCells); fprintf(myFileId, "%d %d\n", nbNodes, nbCells);
@ -118,6 +123,7 @@ void DriverDAT_W_SMDS_Mesh::Write()
fprintf(myFileId, "%d %e %e %e\n", node->GetID(), node->X(), fprintf(myFileId, "%d %e %e %e\n", node->GetID(), node->X(),
node->Y(), node->Z()); node->Y(), node->Z());
} }
delete itNodes;
/**************************************************************************** /****************************************************************************
* ECRITURE DES ELEMENTS * * ECRITURE DES ELEMENTS *
@ -130,7 +136,7 @@ void DriverDAT_W_SMDS_Mesh::Write()
SMDS_Iterator<const SMDS_MeshEdge*> * itEdges=myMesh->edgesIterator(); SMDS_Iterator<const SMDS_MeshEdge*> * itEdges=myMesh->edgesIterator();
while(itEdges->more()) while(itEdges->more())
{ {
const SMDS_MeshElement * elem = itEdges->next(); const SMDS_MeshEdge * elem = itEdges->next();
switch (elem->NbNodes()) switch (elem->NbNodes())
{ {
@ -146,11 +152,13 @@ void DriverDAT_W_SMDS_Mesh::Write()
} }
} }
SMDS_Iterator<const SMDS_MeshElement *> * it=elem->nodesIterator(); SMDS_Iterator<const SMDS_MeshElement *> * itNodes=elem->nodesIterator();
while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID()); while(itNodes->more())
fprintf(myFileId, "%d ", itNodes->next()->GetID());
fprintf(myFileId, "\n"); fprintf(myFileId, "\n");
} }
delete itEdges;
SMDS_Iterator<const SMDS_MeshFace *> * itFaces=myMesh->facesIterator(); SMDS_Iterator<const SMDS_MeshFace *> * itFaces=myMesh->facesIterator();
while(itFaces->more()) while(itFaces->more())
@ -176,11 +184,14 @@ void DriverDAT_W_SMDS_Mesh::Write()
} }
} }
SMDS_Iterator<const SMDS_MeshElement *> * it=elem->nodesIterator(); SMDS_Iterator<const SMDS_MeshElement *> * itNodes=elem->nodesIterator();
while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID()); while(itNodes->more())
fprintf(myFileId, "%d ", itNodes->next()->GetID());
delete itNodes;
fprintf(myFileId, "\n"); fprintf(myFileId, "\n");
} }
delete itFaces;
SMDS_Iterator<const SMDS_MeshVolume*> * itVolumes=myMesh->volumesIterator(); SMDS_Iterator<const SMDS_MeshVolume*> * itVolumes=myMesh->volumesIterator();
while(itVolumes->more()) while(itVolumes->more())
@ -196,11 +207,14 @@ void DriverDAT_W_SMDS_Mesh::Write()
} }
} }
SMDS_Iterator<const SMDS_MeshElement *> * it=elem->nodesIterator(); SMDS_Iterator<const SMDS_MeshElement *> * itNodes=elem->nodesIterator();
while(it->more()) fprintf(myFileId, "%d ", it->next()->GetID()); while(itNodes->more())
fprintf(myFileId, "%d ", itNodes->next()->GetID());
delete itNodes;
fprintf(myFileId, "\n"); fprintf(myFileId, "\n");
} }
delete itVolumes;
fclose(myFileId); fclose(myFileId);
} }

View File

@ -35,11 +35,23 @@ VPATH=.:@srcdir@
@COMMENCE@ @COMMENCE@
# header files # 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 # Libraries targets
LIB = libMeshDriverDAT.la 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 = LIB_CLIENT_IDL =

View File

@ -31,13 +31,14 @@ using namespace std;
extern "C" extern "C"
{ {
Document_Reader *maker() void * SMESH_createMEDDocumentReader()
{ {
return new DriverMED_R_SMESHDS_Document; return new DriverMED_R_SMESHDS_Document;
} }
} }
DriverMED_R_SMESHDS_Document::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; int myMeshId;
//string myFile = string("/home/home_users/cai/projects/salome_prev04/SALOME_ROOT/data/fra1.med");
/**************************************************************************** /****************************************************************************
* OUVERTURE DU FICHIER EN LECTURE * * OUVERTURE DU FICHIER EN LECTURE *
****************************************************************************/ ****************************************************************************/

View File

@ -31,6 +31,18 @@ using namespace std;
#include <stdlib.h> #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() DriverMED_R_SMESHDS_Mesh::DriverMED_R_SMESHDS_Mesh()
{ {
myFileId = -1; myFileId = -1;

View File

@ -33,6 +33,18 @@ using namespace std;
#include <vector> #include <vector>
#include "utilities.h" #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() 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() void DriverMED_W_SMESHDS_Mesh::Write()
{ {
Add();
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();
} }
void DriverMED_W_SMESHDS_Mesh::Add() void DriverMED_W_SMESHDS_Mesh::Add()
@ -520,10 +520,13 @@ void DriverMED_W_SMESHDS_Mesh::Add()
{ {
int nbFamillesElts = 0; int nbFamillesElts = 0;
SMESHDS_Mesh * mySMESHDSMesh = dynamic_cast<SMESHDS_Mesh *>(myMesh); SMESHDS_Mesh * mySMESHDSMesh = dynamic_cast<SMESHDS_Mesh *>(myMesh);
map<int,int> mapFamille;
if(!mySMESHDSMesh->ShapeToMesh().IsNull())
{
TopTools_IndexedMapOfShape myIndexToShape; TopTools_IndexedMapOfShape myIndexToShape;
TopExp::MapShapes(mySMESHDSMesh->ShapeToMesh(), myIndexToShape); TopExp::MapShapes(mySMESHDSMesh->ShapeToMesh(), myIndexToShape);
map<int,int> mapFamille;
if (besoinfamilledemaille == 1) if (besoinfamilledemaille == 1)
{ {
@ -554,6 +557,8 @@ void DriverMED_W_SMESHDS_Mesh::Add()
} }
} }
} }
}
else besoinfamilledemaille = 0;
int indice = 1; int indice = 1;
for (i = 0; i < MED_NBR_GEOMETRIE_MAILLE; i++) for (i = 0; i < MED_NBR_GEOMETRIE_MAILLE; i++)

View File

@ -19,12 +19,9 @@
# #
# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org # See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
# #
#
#
# File : Makefile.in # File : Makefile.in
# Author : Marc Tajchman (CEA) # Author : Marc Tajchman (CEA)
# Module : SMESH # Module : SMESH
# $Header$
top_srcdir=@top_srcdir@ top_srcdir=@top_srcdir@
top_builddir=../.. top_builddir=../..
@ -35,18 +32,23 @@ VPATH=.:@srcdir@
@COMMENCE@ @COMMENCE@
# header files # 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 # Libraries targets
LIB = libMeshDriverMED.la LIB = libMeshDriverMED.la
LIB_SRC = \ LIB_SRC = \
DriverMED_R_SMDS_Mesh.cxx \
DriverMED_R_SMESHDS_Mesh.cxx \ DriverMED_R_SMESHDS_Mesh.cxx \
DriverMED_R_SMESHDS_Document.cxx \ DriverMED_R_SMESHDS_Document.cxx \
DriverMED_W_SMDS_Mesh.cxx \ DriverMED_R_SMDS_Mesh.cxx \
DriverMED_W_SMESHDS_Document.cxx \
DriverMED_W_SMESHDS_Mesh.cxx DriverMED_W_SMESHDS_Mesh.cxx
#DriverMED_W_SMDS_Mesh.cxx \
#DriverMED_W_SMESHDS_Document.cxx
LIB_CLIENT_IDL = LIB_CLIENT_IDL =
LIB_SERVER_IDL = LIB_SERVER_IDL =

View File

@ -3,6 +3,20 @@ using namespace std;
#include "utilities.h" #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() DriverUNV_R_SMDS_Mesh::DriverUNV_R_SMDS_Mesh()
{ {
; ;

View File

@ -1,13 +1,7 @@
using namespace std;
#include "DriverUNV_W_SMDS_Mesh.h" #include "DriverUNV_W_SMDS_Mesh.h"
#include "SMDS_MeshElement.hxx" #include "SMDS_MeshElement.hxx"
#include "SMDS_MeshNode.hxx" #include "SMDS_MeshNode.hxx"
#include <utilities.h> #include <utilities.h>
#define sNODE_UNV_ID " 2411" #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_DESC1 "%10d %2d 1 1 7 %1d\n"
#define sELT_BEAM_DESC2 " 0 1 1\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() DriverUNV_W_SMDS_Mesh::DriverUNV_W_SMDS_Mesh()
{ {
; ;
@ -89,7 +96,6 @@ void DriverUNV_W_SMDS_Mesh::Write()
SCRUTE(nb_of_volumes); SCRUTE(nb_of_volumes);
fprintf(stdout, "%d %d\n", nbNodes, nbCells); fprintf(stdout, "%d %d\n", nbNodes, nbCells);
fprintf(myFileId, "%d %d\n", nbNodes, nbCells);
/**************************************************************************** /****************************************************************************
* ECRITURE DES NOEUDS * * ECRITURE DES NOEUDS *

View File

@ -35,18 +35,23 @@ VPATH=.:@srcdir@
@COMMENCE@ @COMMENCE@
# header files # header files
EXPORT_HEADERS= DriverUNV_R_SMDS_Mesh.h DriverUNV_R_SMESHDS_Mesh.h DriverUNV_R_SMESHDS_Document.h \ EXPORT_HEADERS = \
DriverUNV_W_SMDS_Mesh.h DriverUNV_W_SMESHDS_Mesh.h DriverUNV_W_SMESHDS_Document.h 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 # Libraries targets
LIB = libMeshDriverUNV.la LIB = libMeshDriverUNV.la
LIB_SRC = \ LIB_SRC = \
DriverUNV_R_SMDS_Mesh.cxx \ DriverUNV_R_SMDS_Mesh.cxx \
DriverUNV_R_SMESHDS_Mesh.cxx \ DriverUNV_W_SMDS_Mesh.cxx
DriverUNV_R_SMESHDS_Document.cxx \ #DriverUNV_W_SMESHDS_Mesh.cxx \
DriverUNV_W_SMESHDS_Document.cxx \ #DriverUNV_R_SMESHDS_Mesh.cxx \
DriverUNV_W_SMDS_Mesh.cxx \ #DriverUNV_R_SMESHDS_Document.cxx \
DriverUNV_W_SMESHDS_Mesh.cxx #DriverUNV_W_SMESHDS_Document.cxx \
LIB_CLIENT_IDL = LIB_CLIENT_IDL =

View File

@ -1271,7 +1271,7 @@ SMDS_Iterator<const SMDS_MeshNode *> * SMDS_Mesh::nodesIterator() const
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
///Return an iterator on volumes of the current mesh. Once used this iterator ///Return an iterator on egdes of the current mesh. Once used this iterator
///must be free by the caller ///must be free by the caller
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
SMDS_Iterator<const SMDS_MeshEdge *> * SMDS_Mesh::edgesIterator() const SMDS_Iterator<const SMDS_MeshEdge *> * SMDS_Mesh::edgesIterator() const
@ -1574,3 +1574,126 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem,
delete s2; delete s2;
delete s1; delete s1;
} }
/**
* Concat the coordinates of all nodes in an array.
* Its used to display the mesh.
* @return A array of size 3*NbNodes() containing the coordinates of nodes.
*/
double * SMDS_Mesh::getNodesCoordinates()
{
double * toReturn=new double[3*NbNodes()];
SMDS_Iterator<const SMDS_MeshNode*> * it=nodesIterator();
int i=0;
while(it->more())
{
const SMDS_MeshNode * n=it->next();
toReturn[i]=n->X();
i++;
toReturn[i]=n->Y();
i++;
toReturn[i]=n->Z();
i++;
}
delete it;
return toReturn;
}
/**
* Concat the id of all nodes in an array.
* Its used to display the mesh.
* @return A array of size NbNodes() containing the ids of nodes.
*/
long * SMDS_Mesh::getNodesID()
{
long * toReturn=new long[NbNodes()];
SMDS_Iterator<const SMDS_MeshNode*> * it=nodesIterator();
int i=0;
while(it->more())
{
const SMDS_MeshNode * n=it->next();
toReturn[i]=n->GetID();
i++;
}
delete it;
return toReturn;
}
/**
* Concat the id of nodes of edges in an array.
* Array format is {edge_id, node1_id, node2_id}
* Its used to display the mesh.
* @return A array of size 3*NbEdges() containing the edges.
*/
long * SMDS_Mesh::getEdgesIndices()
{
long * toReturn=new long[NbEdges()*3];
SMDS_Iterator<const SMDS_MeshEdge*> * it=edgesIterator();
int i=0;
while(it->more())
{
const SMDS_MeshEdge * e=it->next();
toReturn[i]=e->GetID();
i++;
SMDS_Iterator<const SMDS_MeshElement*> * itn=e->nodesIterator();
while(itn->more())
{
const SMDS_MeshElement * n=itn->next();
toReturn[i]=n->GetID();
i++;
}
delete itn;
}
delete it;
return toReturn;
}
/**
* Concat the id of nodes of triangles in an array.
* Array format is {tria_id, node1_id, node2_id, node3_id}
* Its used to display the mesh.
* @return A array of size 4*NbTriangles() containing the edges.
*/
long * SMDS_Mesh::getTrianglesIndices()
{
long * toReturn=new long[NbTriangles()*4];
SMDS_Iterator<const SMDS_MeshFace*> * it=facesIterator();
int i=0;
while(it->more())
{
const SMDS_MeshFace * f=it->next();
if(f->NbNodes()==3)
{
toReturn[i]=f->GetID();
i++;
SMDS_Iterator<const SMDS_MeshElement*> * itn=f->nodesIterator();
while(itn->more())
{
const SMDS_MeshElement * n=itn->next();
toReturn[i]=n->GetID();
i++;
}
delete itn;
}
}
delete it;
return toReturn;
}
/**
* Return the number of 3 nodes faces in the mesh.
* This method run in O(n).
* @return The number of face whose number of nodes is 3
*/
int SMDS_Mesh::NbTriangles() const
{
SMDS_Iterator<const SMDS_MeshFace*> * it=facesIterator();
int toReturn=0;
while(it->more())
{
const SMDS_MeshFace * f=it->next();
if(f->NbNodes()==3) toReturn++;
}
return toReturn;
}

View File

@ -167,6 +167,7 @@ class SMDS_Mesh:public SMDS_MeshObject
int NbNodes() const; int NbNodes() const;
int NbEdges() const; int NbEdges() const;
int NbFaces() const; int NbFaces() const;
int NbTriangles() const;
int NbVolumes() const; int NbVolumes() const;
int NbSubMesh() const; int NbSubMesh() const;
void DumpNodes() const; void DumpNodes() const;
@ -184,6 +185,11 @@ class SMDS_Mesh:public SMDS_MeshObject
void setConstructionFaces(bool); void setConstructionFaces(bool);
void setInverseElements(bool); void setInverseElements(bool);
double * getNodesCoordinates();
long * getNodesID();
long * getEdgesIndices();
long * getTrianglesIndices();
private: private:
SMDS_Mesh(SMDS_Mesh * parent); SMDS_Mesh(SMDS_Mesh * parent);
SMDS_MeshFace * createTriangle(SMDS_MeshNode * node1, SMDS_MeshFace * createTriangle(SMDS_MeshNode * node1,

View File

@ -94,7 +94,7 @@ CXXFLAGS+= $(OCC_CXXFLAGS) $(MED2_INCLUDES) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR
#IDLCXXFLAGS+= -Wbtp #IDLCXXFLAGS+= -Wbtp
LDFLAGS+= $(HDF5_LIBS) $(MED2_LIBS) -lOpUtil -lSMESHDS -lSMDS -lMEFISTO2D -lMeshDriverDAT -lMeshDriverMED -lMeshDriverUNV -L${KERNEL_ROOT_DIR}/lib/salome LDFLAGS+= $(HDF5_LIBS) $(MED2_LIBS) -lOpUtil -lSMESHDS -lSMDS -lMEFISTO2D -lMeshDriver -L${KERNEL_ROOT_DIR}/lib/salome
ifeq (@WITHNETGEN@,yes) ifeq (@WITHNETGEN@,yes)
LIB_SRC+= SMESH_NETGEN_3D.cxx LIB_SRC+= SMESH_NETGEN_3D.cxx

View File

@ -30,6 +30,7 @@
#include "SMESH_subMesh.hxx" #include "SMESH_subMesh.hxx"
#include "SMDS_MeshElement.hxx" #include "SMDS_MeshElement.hxx"
#include "SMDS_MeshNode.hxx" #include "SMDS_MeshNode.hxx"
#include "SMESHDriver.h"
#include <gp_Pnt.hxx> #include <gp_Pnt.hxx>
#include <BRep_Tool.hxx> #include <BRep_Tool.hxx>
@ -126,7 +127,8 @@ throw(SALOME_Exception)
//============================================================================= //=============================================================================
/*! /*!
* * @TODO Doing a full update after computation is not optimal when doing a local
* remeshing.
*/ */
//============================================================================= //=============================================================================
@ -138,7 +140,7 @@ throw(SALOME_Exception)
/* /*
Algo : s'appuie ou non sur une geometrie Algo : s'appuie ou non sur une geometrie
Si geometrie: Si geometrie:
Vertex : rien à faire (range le point) Vertex : rien <EFBFBD>faire (range le point)
Edge, Wire, collection d'edge et wire : 1D Edge, Wire, collection d'edge et wire : 1D
Face, Shell, collection de Face et Shells : 2D Face, Shell, collection de Face et Shells : 2D
Solid, Collection de Solid : 3D Solid, Collection de Solid : 3D
@ -183,6 +185,8 @@ Solid, Collection de Solid : 3D
smToCompute = sm->GetFirstToCompute(); smToCompute = sm->GetFirstToCompute();
} }
aMesh.GetMeshDS()->logFullUpdate();
return ret; return ret;
} }
@ -404,3 +408,40 @@ int SMESH_Gen::GetShapeDim(const TopoDS_Shape & aShape)
// SCRUTE(shapeDim); // SCRUTE(shapeDim);
return 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();
mesh->GetMeshDS()->logFullUpdate();
return mesh;
}

View File

@ -69,6 +69,7 @@ class SMESH_Gen
static int GetShapeDim(const TopoDS_Shape & aShape); static int GetShapeDim(const TopoDS_Shape & aShape);
SMESH_Algo *GetAlgo(SMESH_Mesh & aMesh, 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 // inherited methods from SALOMEDS::Driver

View File

@ -32,13 +32,8 @@
#include "SMESH_Hypothesis.hxx" #include "SMESH_Hypothesis.hxx"
#include "SMESHDS_Script.hxx" #include "SMESHDS_Script.hxx"
#include "SMDS_MeshVolume.hxx" #include "SMDS_MeshVolume.hxx"
#include "utilities.h" #include "utilities.h"
#include "SMESHDriver.h"
#include "Mesh_Writer.h"
#include "DriverMED_W_SMESHDS_Mesh.h"
#include "DriverDAT_W_SMESHDS_Mesh.h"
#include "DriverUNV_W_SMESHDS_Mesh.h"
#include <TCollection_AsciiString.hxx> #include <TCollection_AsciiString.hxx>
@ -415,37 +410,22 @@ throw(SALOME_Exception)
return _subMeshesUsingHypothesisList; 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::Export(const char *fileName, const char *fileType)
throw(SALOME_Exception)
void SMESH_Mesh::ExportMED(const char *file) throw(SALOME_Exception)
{ {
Mesh_Writer *myWriter = new DriverMED_W_SMESHDS_Mesh; MESSAGE("SMESH_Mesh::Export("<<fileName<<","<<fileType<<")");
myWriter->SetFile(string(file)); Mesh_Writer * writer = SMESHDriver::GetMeshWriter(string(fileType));
myWriter->SetMesh(_myMeshDS); if(writer!=NULL)
MESSAGE(" _idDoc " << _idDoc) myWriter->SetMeshId(_idDoc); {
myWriter->Add(); writer->SetMesh(GetMeshDS());
writer->SetFile(string(fileName));
writer->Write();
} }
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)
{
Mesh_Writer *myWriter = new DriverUNV_W_SMESHDS_Mesh;
myWriter->SetFile(string(file));
myWriter->SetMesh(_myMeshDS);
myWriter->SetMeshId(_idDoc);
myWriter->Add();
} }
//============================================================================= //=============================================================================

View File

@ -101,9 +101,8 @@ class SMESH_Mesh
GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp)
throw(SALOME_Exception); throw(SALOME_Exception);
void ExportDAT(const char *file) throw(SALOME_Exception); void Export(const char *fileName, const char *fileType)
void ExportMED(const char *file) throw(SALOME_Exception); throw(SALOME_Exception);
void ExportUNV(const char *file) throw(SALOME_Exception);
int NbNodes() throw(SALOME_Exception); int NbNodes() throw(SALOME_Exception);

View File

@ -29,6 +29,7 @@
#include "SMESHDS_CommandType.hxx" #include "SMESHDS_CommandType.hxx"
#include <list> #include <list>
using namespace std;
class SMESHDS_Command class SMESHDS_Command
{ {

View File

@ -38,7 +38,8 @@ SMESHDS_AddPrism,
SMESHDS_AddHexahedron, SMESHDS_AddHexahedron,
SMESHDS_RemoveNode, SMESHDS_RemoveNode,
SMESHDS_RemoveElement, SMESHDS_RemoveElement,
SMESHDS_MoveNode SMESHDS_MoveNode,
SMESHDS_UpdateAll
}; };

View File

@ -97,3 +97,7 @@ int SMESHDS_Hypothesis::GetType() const
return _type; return _type;
} }
void SMESHDS_Hypothesis::SetID(int id)
{
_hypId=id;
}

View File

@ -48,6 +48,7 @@ public:
const char* GetName() const; const char* GetName() const;
int GetID() const; int GetID() const;
void SetID(int id);
int GetType() const; int GetType() const;
virtual ostream & SaveTo(ostream & save)=0; virtual ostream & SaveTo(ostream & save)=0;

View File

@ -577,3 +577,12 @@ void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement* anElement,
SMESHDS_Mesh::~SMESHDS_Mesh() SMESHDS_Mesh::~SMESHDS_Mesh()
{ {
} }
/**
* Add FULL_UPDATE command to the log of this mesh. Once interpreted by the
* graphical client it will (re)draw the full mesh.
*/
void SMESHDS_Mesh::logFullUpdate()
{
myScript->UpdateAll();
}

View File

@ -133,6 +133,7 @@ class SMESHDS_Mesh:public SMDS_Mesh
void SetNodeOnVertex(SMDS_MeshNode * aNode, int Index); void SetNodeOnVertex(SMDS_MeshNode * aNode, int Index);
void SetMeshElementOnShape(const SMDS_MeshElement * anElt, int Index); void SetMeshElementOnShape(const SMDS_MeshElement * anElt, int Index);
~SMESHDS_Mesh(); ~SMESHDS_Mesh();
void logFullUpdate();
private: private:
struct HashTopoDS_Shape struct HashTopoDS_Shape

View File

@ -26,7 +26,6 @@
// Module : SMESH // Module : SMESH
// $Header: // $Header:
using namespace std;
#include "SMESHDS_Script.hxx" #include "SMESHDS_Script.hxx"
//======================================================================= //=======================================================================
@ -321,3 +320,12 @@ const list<SMESHDS_Command*>& SMESHDS_Script::GetCommands()
{ {
return myCommands; return myCommands;
} }
/**
* Add UpdateAll command to the log of this mesh. Once interpreted by the
* graphical client it will (re)draw the full mesh.
*/
void SMESHDS_Script::UpdateAll()
{
myCommands.insert(myCommands.end(), new SMESHDS_Command(SMESHDS_UpdateAll));
}

View File

@ -52,6 +52,7 @@ class SMESHDS_Script
void RemoveElement(int ElementID); void RemoveElement(int ElementID);
void Clear(); void Clear();
const list<SMESHDS_Command*> & GetCommands(); const list<SMESHDS_Command*> & GetCommands();
void UpdateAll();
~SMESHDS_Script(); ~SMESHDS_Script();
private: private:

View 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 CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome -I${GEOM_ROOT_DIR}/include/salome
#$(OCC_CXXFLAGS) #$(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@ @CONCLUDE@

View File

@ -87,26 +87,6 @@ using namespace std;
#include "SALOMEGUI_QtCatchCorbaException.hxx" #include "SALOMEGUI_QtCatchCorbaException.hxx"
#include "utilities.h" #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 // QT Includes
#define INCLUDE_MENUITEM_DEF #define INCLUDE_MENUITEM_DEF
#include <qapplication.h> #include <qapplication.h>
@ -237,8 +217,6 @@ SMESHGUI *SMESHGUI::GetOrCreateSMESHGUI(QAD_Desktop * desktop)
smeshGUI->myStudyAPI = smeshGUI->myStudyAPI =
SMESHGUI_StudyAPI(smeshGUI->myStudy, smeshGUI->myComponentMesh); SMESHGUI_StudyAPI(smeshGUI->myStudy, smeshGUI->myComponentMesh);
smeshGUI->myDocument = new SMESHDS_Document(1); //NBU
smeshGUI->mySimulationActors = vtkActorCollection::New(); smeshGUI->mySimulationActors = vtkActorCollection::New();
smeshGUI->mySimulationActors2D = vtkActor2DCollection::New(); smeshGUI->mySimulationActors2D = vtkActor2DCollection::New();
} }
@ -2104,8 +2082,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
case 112: case 112:
case 111: case 111:
{ {
Import_Document(parent, theCommandID); //NBU smeshGUI->Import_Document(parent, theCommandID);
//Import_Mesh(parent,theCommandID);
break; break;
} }
@ -3498,58 +3475,6 @@ SALOMEDS::Study::ListOfSObject *
return listSOmesh._retn(); 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()) if (!filename.isEmpty())
{ {
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
aMesh->ExportMED(filename.latin1()); aMesh->Export(filename.latin1(), "MED");
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
} }
@ -3591,7 +3516,7 @@ void SMESHGUI::Export_Mesh(QAD_Desktop * parent, int theCommandID)
if (!filename.isEmpty()) if (!filename.isEmpty())
{ {
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
aMesh->ExportDAT(filename.latin1()); aMesh->Export(filename.latin1(), "DAT");
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
} }
@ -3605,11 +3530,11 @@ void SMESHGUI::Export_Mesh(QAD_Desktop * parent, int theCommandID)
if (!filename.isEmpty()) if (!filename.isEmpty())
{ {
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
aMesh->ExportUNV(filename.latin1()); aMesh->Export(filename.latin1(), "UNV");
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
else else
aMesh->ExportDAT(filename.latin1()); aMesh->Export(filename.latin1(), "DAT");
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
@ -3642,90 +3567,49 @@ void SMESHGUI::Import_Document(QAD_Desktop * parent, int theCommandID)
{ {
QString filter; QString filter;
string myExtension; string myExtension;
Document_Reader *myReader;
if (theCommandID == 113) if (theCommandID == 113)
{ {
filter = tr("MED files (*.med)"); filter = tr("MED files (*.med)");
myExtension = string("MED"); myExtension = string("MED");
myReader = new DriverMED_R_SMESHDS_Document;
} }
else if (theCommandID == 112) else if (theCommandID == 112)
{ {
filter = tr("IDEAS files (*.unv)"); filter = tr("IDEAS files (*.unv)");
myExtension = string("UNV"); myExtension = string("UNV");
myReader = new DriverUNV_R_SMESHDS_Document;
} }
else if (theCommandID == 111) else if (theCommandID == 111)
{ {
filter = tr("DAT files (*.dat)"); filter = tr("DAT files (*.dat)");
myExtension = string("DAT"); myExtension = string("DAT");
myReader = new DriverDAT_R_SMESHDS_Document;
} }
QString filename = QAD_FileDlg::getFileName(parent, QString filename = QAD_FileDlg::getFileName(parent, "", filter,
"", tr("Import document"), true);
filter,
tr("Import document"),
true);
if (!filename.isEmpty()) if (!filename.isEmpty())
{ {
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
string myClass = string("SMESHDS_Document"); try
// Document_Reader* myReader = SMESHDriver::GetDocumentReader(myExtension, myClass); {
SMESHDS_Document *newDocument = new SMESHDS_Document(1); if (!myComponentMesh->_is_nil())
{
SMESH::SMESH_Mesh_var aMesh =
myComponentMesh->Import(myStudyId, filename.latin1(),
myExtension.c_str());
myReader->SetFile(string(filename.latin1())); if (!aMesh->_is_nil())
myReader->SetDocument(smeshGUI->myDocument); {
myReader->Read(); SALOMEDS::SObject_var SM = myStudyAPI.AddNewMesh(aMesh);
QApplication::restoreOverrideCursor(); myStudyAPI.SetName(SM, filename);
} }
} }
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) catch(const SALOME::SALOME_Exception & S_ex)
{ {
filter = tr("DAT files (*.dat)"); QtCatchCorbaException(S_ex);
myExtension = string("DAT");
myWriter = new DriverDAT_W_SMESHDS_Document;
} }
else if (theCommandID == 123) myActiveStudy->updateObjBrowser(true);
{
filter = tr("IDEAS files (*.unv)");
myExtension = string("UNV");
myWriter = new DriverUNV_W_SMESHDS_Document;
}
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();
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
} }
@ -3817,9 +3701,6 @@ bool SMESHGUI::SetSettings(QAD_Desktop * parent)
smeshGUI->myAutomaticUpdate = false; smeshGUI->myAutomaticUpdate = false;
} }
/* menus disable */
parent->menuBar()->setItemEnabled(11, false); // IMPORT
return true; return true;
} }
@ -4098,13 +3979,13 @@ bool SMESHGUI::CustomPopup(QAD_Desktop * parent,
return false; return false;
} }
//============================================================================= /**
/*! Method: BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO) * Ensures that the actor for the given <theIO> exists in the active VTK view
* Purpose: ensures that the actor for the given <theIO> exists in the active VTK view * @TODO Handle multiple selection.
*/ */
//=============================================================================
void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject) & theIO) void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject) & theIO)
{ {
MESSAGE("SMESHGUI::BuildPresentation("<<theIO->getEntry()<<")");
/* Create or retrieve an object SMESHGUI */ /* Create or retrieve an object SMESHGUI */
SMESHGUI::GetOrCreateSMESHGUI(QAD_Application::getDesktop()); SMESHGUI::GetOrCreateSMESHGUI(QAD_Application::getDesktop());
@ -4113,7 +3994,8 @@ void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject) & theIO)
if (activeFrame->getTypeView() == VIEW_VTK) if (activeFrame->getTypeView() == VIEW_VTK)
{ {
// VTK // VTK
SALOMEDS::SObject_var fatherSF = // Some ideas to handle multiple selection...
/*SALOMEDS::SObject_var fatherSF =
smeshGUI->myStudy->FindObjectID(activeFrame->entry()); smeshGUI->myStudy->FindObjectID(activeFrame->entry());
SALOME_Selection *Sel = SALOME_Selection *Sel =
@ -4121,8 +4003,8 @@ void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject) & theIO)
getSelection()); getSelection());
SALOME_ListIteratorOfListIO It(Sel->StoredIObjects()); SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
// for(;It.More();It.Next()) { for(;It.More();It.Next()) {
// Handle(SALOME_InteractiveObject) IObject = It.Value(); Handle(SALOME_InteractiveObject) IObject = It.Value();*/
Handle(SALOME_InteractiveObject) IObject = theIO; Handle(SALOME_InteractiveObject) IObject = theIO;
if (IObject->hasEntry()) if (IObject->hasEntry())
{ {
@ -4131,41 +4013,38 @@ void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject) & theIO)
SMESH_Actor *ac = SMESH_Actor *ac =
smeshGUI->FindActorByEntry(IObject->getEntry(), res, false); smeshGUI->FindActorByEntry(IObject->getEntry(), res, false);
// Actor not found at all -> mesh is not computed -> do nothing!!!
if (!res) if (!res)
{ {
/*SMESH::SMESH_Mesh_var aM; SALOMEDS::SObject_var aMorSM=smeshGUI->myStudy->FindObjectID( IObject->getEntry());
* SALOMEDS::SObject_var aMorSM = smeshGUI->myStudy->FindObjectID( IObject->getEntry() ); SALOMEDS::GenericAttribute_var anAttr;
* SALOMEDS::SObject_var father = aMorSM->GetFather(); SALOMEDS::AttributeIOR_var anIOR;
* SALOMEDS::SObject_var fatherComp = aMorSM->GetFatherComponent(); if(aMorSM->FindAttribute(anAttr, "AttributeIOR"))
* {
* // Non-displayable objects (Hypo, Algo) have tags < 3 or have a father different from component anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
* if (aMorSM->Tag() < 3 || strcmp(father->GetID(), fatherComp->GetID()) != 0) SMESH::SMESH_Mesh_var aM =
* continue; SMESH::SMESH_Mesh::_narrow( _orb->string_to_object(anIOR->Value()));
* if(!aM->_is_nil())
* SALOMEDS::GenericAttribute_var anAttr; {
* SALOMEDS::AttributeIOR_var anIOR; smeshGUI->InitActor(aM);
* if ( !aMorSM->_is_nil() ) { ac = smeshGUI->ReadScript(aM);
* if (aMorSM->FindAttribute(anAttr, "AttributeIOR") ) { smeshGUI->DisplayActor( ac, true );
* anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); smeshGUI->DisplayEdges( ac );
* aM = SMESH::SMESH_Mesh::_narrow( _orb->string_to_object(anIOR->Value()) ); smeshGUI->ChangeRepresentation( ac, ac->getDisplayMode() );
* }
* }
*
* if (!aM->_is_nil()) {
* smeshGUI->InitActor(aM);
* ac = smeshGUI->ReadScript(aM);
* }
*
* if (ac) {
* smeshGUI->DisplayActor( ac, true );
* smeshGUI->DisplayEdges( ac );
* smeshGUI->ChangeRepresentation( ac, ac->getDisplayMode() );
* } */
// continue;
} }
else else
{ // The actor exists in some view {
MESSAGE("Do not know how to display something which is not a SMESH_Mesh");
}
}
else
{
MESSAGE("The object "<<theIO->getEntry()<<
" do not have \"AttributeIOR\" attribute");
}
}
else
{
// The actor exists in some view
// Check whether the actor belongs to the active view // Check whether the actor belongs to the active view
VTKViewer_RenderWindowInteractor *rwInter = VTKViewer_RenderWindowInteractor *rwInter =
((VTKViewer_ViewFrame *) activeFrame->getRightFrame()-> ((VTKViewer_ViewFrame *) activeFrame->getRightFrame()->
@ -4188,12 +4067,11 @@ void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject) & theIO)
smeshGUI->ChangeRepresentation(ac, ac->getDisplayMode()); smeshGUI->ChangeRepresentation(ac, ac->getDisplayMode());
} }
} }
// }
} }
else else
{ {
MESSAGE MESSAGE("BuildPresentation() must not be called while non-VTK view is active");
("BuildPresentation() must not be called while non-VTK view is active")} }
} }
//============================================================================= //=============================================================================
@ -4216,13 +4094,14 @@ void SMESHGUI::setOrb()
ASSERT(!CORBA::is_nil(_orb)); ASSERT(!CORBA::is_nil(_orb));
} }
//============================================================================= /**
/*! * Get the history of all commands made in the SMESH server. This list of command
* * is used to display the mesh in the VTK view
* @TODO Handle the REMOVE_ALL command.
*/ */
//=============================================================================
SMESH_Actor *SMESHGUI::ReadScript(SMESH::SMESH_Mesh_ptr aMesh) SMESH_Actor *SMESHGUI::ReadScript(SMESH::SMESH_Mesh_ptr aMesh)
{ {
MESSAGE("SMESHGUI::ReadScript");
SMESH_Actor *MeshActor; SMESH_Actor *MeshActor;
if (!aMesh->_is_nil()) if (!aMesh->_is_nil())
{ {
@ -4231,11 +4110,8 @@ SMESH_Actor *SMESHGUI::ReadScript(SMESH::SMESH_Mesh_ptr aMesh)
if (result) if (result)
{ {
SMESH::log_array_var aSeq = aMesh->GetLog(true); SMESH::log_array_var aSeq = aMesh->GetLog(true);
MESSAGE("SMESHGUI::ReadScript: The log contains "<<aSeq->length()
if (aSeq->length() == 0) <<" commands.");
{
MESSAGE("ReadScript(): log is empty") return MeshActor;
}
for (unsigned int ind = 0; ind < aSeq->length(); ind++) for (unsigned int ind = 0; ind < aSeq->length(); ind++)
{ {
@ -4296,6 +4172,10 @@ SMESH_Actor *SMESHGUI::ReadScript(SMESH::SMESH_Mesh_ptr aMesh)
aSeq[ind].coords, aSeq[ind].indexes); aSeq[ind].coords, aSeq[ind].indexes);
break; break;
} }
case SMESH::REMOVE_ALL:
MESSAGE("REMOVE_ALL command not yet implemented");
break;
default: MESSAGE("Warning: Unknown script command.");
} }
} }
return MeshActor; return MeshActor;
@ -4348,6 +4228,7 @@ void SMESHGUI::Dump(SMESH_Actor * Mactor)
void SMESHGUI::AddNodes(SMESH_Actor * Mactor, int number, void SMESHGUI::AddNodes(SMESH_Actor * Mactor, int number,
const SMESH::double_array & coords, const SMESH::long_array & indexes) const SMESH::double_array & coords, const SMESH::long_array & indexes)
{ {
MESSAGE("SMESHGUI::AddNodes(number="<<number<<", indexes.length()="<<indexes.length()<<")");
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
if (Mactor->GetMapper() == NULL) if (Mactor->GetMapper() == NULL)
{ {
@ -4405,8 +4286,9 @@ void SMESHGUI::AddNode(SMESH_Actor * Mactor, int idnode, float x, float y,
float z) float z)
{ {
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
MESSAGE("SMESHGUI::AddNode " << idnode << " : " << x << ";" << y << ";" << MESSAGE("SMESHGUI::AddNode " << idnode << " : " << x << ";" << y << ";" << z);
z) if (Mactor->GetMapper() == NULL)
if (Mactor->GetMapper() == NULL)
{ {
vtkPoints *Pts = vtkPoints::New(); vtkPoints *Pts = vtkPoints::New();
int idVTK = Pts->InsertNextPoint(x, y, z); int idVTK = Pts->InsertNextPoint(x, y, z);
@ -5067,6 +4949,9 @@ void SMESHGUI::AddEdge(SMESH_Actor * Mactor, int idedge, int idnode1,
void SMESHGUI::AddTriangles(SMESH_Actor * Mactor, int number, void SMESHGUI::AddTriangles(SMESH_Actor * Mactor, int number,
const SMESH::double_array & coords, const SMESH::long_array & indexes) const SMESH::double_array & coords, const SMESH::long_array & indexes)
{ {
MESSAGE("SMESHGUI::AddTriangles(number="<<number<<", indexes.length="
<<indexes.length()<<")");
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
//vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource ); //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
SMESH_Grid *ugrid = SMESH_Grid::SafeDownCast(Mactor->DataSource); SMESH_Grid *ugrid = SMESH_Grid::SafeDownCast(Mactor->DataSource);
@ -6011,6 +5896,7 @@ void SMESHGUI::InitActor(SMESH::SMESH_Mesh_ptr aMesh)
//============================================================================= //=============================================================================
void SMESHGUI::Update() void SMESHGUI::Update()
{ {
MESSAGE("SMESHGUI::Update");
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK)
{ //VTK { //VTK
vtkRenderer *theRenderer = vtkRenderer *theRenderer =

View File

@ -88,8 +88,6 @@ private :
// vtkScalarBarActor* myScalarBar; // vtkScalarBarActor* myScalarBar;
SMESHDS_Document * myDocument;//NBU
bool myAutomaticUpdate; bool myAutomaticUpdate;
public : public :
@ -303,9 +301,7 @@ public :
static void setOrb(); static void setOrb();
/* Import/Export */ //NBU /* Import/Export */ //NBU
static void Import_Document(QAD_Desktop* parent, int theCommandID); 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);
static void Export_Mesh(QAD_Desktop* parent, int theCommandID); static void Export_Mesh(QAD_Desktop* parent, int theCommandID);
signals: signals:

View File

@ -99,7 +99,7 @@ SMESHGUI_StudyAPI::SMESHGUI_StudyAPI ( SALOMEDS::Study_ptr aStudy,
// NRI // NRI
SALOMEDS::SComponent_var father = aStudy->FindComponent("MESH"); SALOMEDS::SComponent_var father = aStudy->FindComponent("MESH");
SALOMEDS::GenericAttribute_var anAttr; /*SALOMEDS::GenericAttribute_var anAttr;
SALOMEDS::AttributeName_var aName; SALOMEDS::AttributeName_var aName;
SALOMEDS::AttributePixMap_var aPixmap; SALOMEDS::AttributePixMap_var aPixmap;
@ -115,7 +115,7 @@ SMESHGUI_StudyAPI::SMESHGUI_StudyAPI ( SALOMEDS::Study_ptr aStudy,
aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" ); aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
myStudyBuilder->DefineComponentInstance(father, CompMesh ); myStudyBuilder->DefineComponentInstance(father, CompMesh );
mySComponentMesh = SALOMEDS::SComponent::_narrow( father ); mySComponentMesh = SALOMEDS::SComponent::_narrow( father );*/
} }
//======================================================================= //=======================================================================

File diff suppressed because it is too large Load Diff

View File

@ -96,6 +96,8 @@ public:
const SMESH::shape_array& listOfSubShape) const SMESH::shape_array& listOfSubShape)
throw (SALOME::SALOME_Exception); throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr Import(CORBA::Long studyId, const char* fileName,
const char* fileType);
// inherited methods from SALOMEDS::Driver // inherited methods from SALOMEDS::Driver
@ -153,6 +155,24 @@ protected:
GEOM::GEOM_Shape_ptr aShape); GEOM::GEOM_Shape_ptr aShape);
private: private:
void loadMesh(char * name, HDFfile * hdf_file, char * meshFile,
SALOMEDS::Study_var study);
void loadHypothesis(char * name, HDFfile * hdf_file, char * hypothesisFile,
int studyId);
void loadAlgorithms(char * name, HDFfile * hdf_file, char * algorithmsFile,
int studyId);
void loadAppliedHypothesis(HDFgroup * hdfGroupMeshId, bool _found,
SALOMEDS::Study_var Study, SMESH::SMESH_Mesh_var myNewMesh,
GEOM::GEOM_Shape_var aShape);
GEOM::GEOM_Gen_var getGeomEngine();
GEOM::GEOM_Shape_var getShape(SALOMEDS::Study_var Study, char * refFromFile);
void loadAppliedAlgorithms(HDFgroup * hdfGroupMeshId,
bool _found, SALOMEDS::Study_var Study, SMESH::SMESH_Mesh_var myNewMesh,
GEOM::GEOM_Shape_var aShape);
void loadSubMeshes(HDFgroup * hdfGroupMeshId, char * msgname,
SALOMEDS::Study_var Study, SMESH::SMESH_Mesh_var myNewMesh);
SMESH_HypothesisFactory_i _hypothesisFactory_i; SMESH_HypothesisFactory_i _hypothesisFactory_i;
::SMESH_Gen _impl; // no namespace here ::SMESH_Gen _impl; // no namespace here
int _localId; // unique Id of created objects, within SMESH_Gen_i entity int _localId; // unique Id of created objects, within SMESH_Gen_i entity

View File

@ -81,3 +81,8 @@ CORBA::Long SMESH_Hypothesis_i::GetId()
MESSAGE("GetId"); MESSAGE("GetId");
return _baseImpl->GetID(); return _baseImpl->GetID();
} }
::SMESH_Hypothesis* SMESH_Hypothesis_i::getImpl()
{
return _baseImpl;
}

View File

@ -44,6 +44,7 @@ public:
char* GetName(); char* GetName();
CORBA::Long GetId(); CORBA::Long GetId();
::SMESH_Hypothesis* getImpl();
protected: protected:
::SMESH_Hypothesis* _baseImpl; ::SMESH_Hypothesis* _baseImpl;

View File

@ -162,18 +162,15 @@ CORBA::Boolean
return ret; return ret;
}; };
//============================================================================= /**
/*! *@TODO Not implemented
*
*/ */
//=============================================================================
SMESH::ListOfHypothesis * SMESH::ListOfHypothesis *
SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Shape_ptr aSubShape) SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Shape_ptr aSubShape)
throw(SALOME::SALOME_Exception) throw(SALOME::SALOME_Exception)
{ {
MESSAGE("GetHypothesisList"); MESSAGE("GetHypothesisList: Not implemented");
// **** return NULL;
}; };
//============================================================================= //=============================================================================
@ -230,25 +227,101 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetElementsOnShape(GEOM::
return SMESH::SMESH_subMesh::_duplicate(_mapSubMeshIor[subMeshId]); return SMESH::SMESH_subMesh::_duplicate(_mapSubMeshIor[subMeshId]);
} }
//============================================================================= /**
/*! * Translate the UpdateAll SMESHDS_Command to a set of SMESH::log_command.
* * As the input log need to be resized, it is realocated.
* @param logBlock The log where to insert created commands
* @param index The place where to insert created commands in log. It is updated
* with the place to put new elements.
* @return The realocated and resized log.
* @TODO Add support for other type of elements
*/ */
//============================================================================= SMESH::log_array_var SMESH_Mesh_i::
createUpdateAllCommand(SMESH::log_array_var log, int * index)
{
MESSAGE("SMESH_Mesh_i::createUpdateAllCommand");
SMESH::log_array_var aLog=new SMESH::log_array(log->length()+3);
aLog->length(log->length()+3);
for(int i=0;i<*index;i++)
{
aLog[i]=log[i];
}
log->length(0);
int id=*index;
//Remove all elements
aLog[id].commandType=SMESH::REMOVE_ALL;
id++;
//Export nodes
aLog[id].commandType=SMESH::ADD_NODE;
aLog[id].number=_impl->GetMeshDS()->NbNodes();
double * nodesCoordinates=_impl->GetMeshDS()->getNodesCoordinates();
aLog[id].coords=SMESH::double_array(
aLog[id].number*3,
aLog[id].number*3,
nodesCoordinates);
long * nodesID=_impl->GetMeshDS()->getNodesID();
aLog[id].indexes=SMESH::long_array(
aLog[id].number,
aLog[id].number,
nodesID);
id++;
MESSAGE("Export edges");
//Export edges
aLog[id].commandType=SMESH::ADD_EDGE;
aLog[id].number=_impl->GetMeshDS()->NbEdges();
aLog[id].coords.length(0);
long * edgesIndices=_impl->GetMeshDS()->getEdgesIndices();
aLog[id].indexes=SMESH::long_array(
aLog[id].number*3,
aLog[id].number*3,
edgesIndices);
id++;
MESSAGE("Export triangles");
//Export triangles
aLog[id].commandType=SMESH::ADD_TRIANGLE;
aLog[id].number=_impl->GetMeshDS()->NbTriangles();
aLog[id].coords.length(0);
long * triasIndices=_impl->GetMeshDS()->getTrianglesIndices();
aLog[id].indexes=SMESH::long_array(
aLog[id].number*4,
aLog[id].number*4,
triasIndices);
(*index)=id;
return aLog;
}
/**
* Return the log of the current mesh. CORBA wrap of the SMESH::GetLog method
* with a special treatment for SMESHDS_UpdateAll commands
* @param clearAfterGet Tell if the log must be cleared after being returned
* @return the log
*/
SMESH::log_array * SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet) SMESH::log_array * SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
throw(SALOME::SALOME_Exception) throw(SALOME::SALOME_Exception)
{ {
MESSAGE("SMESH_Mesh_i::GetLog"); MESSAGE("SMESH_Mesh_i::GetLog");
SMESH::log_array_var aLog; SMESH::log_array_var aLog;
try /*try
{ {*/
list < SMESHDS_Command * >logDS = _impl->GetLog(); list < SMESHDS_Command * >logDS = _impl->GetLog();
aLog = new SMESH::log_array; aLog = new SMESH::log_array;
int indexLog = 0; int indexLog = 0;
int lg = logDS.size(); int lg = logDS.size();
SCRUTE(lg); MESSAGE("Number of command in the log: "<<lg);
aLog->length(lg); aLog->length(lg);
list < SMESHDS_Command * >::iterator its = logDS.begin(); list < SMESHDS_Command * >::iterator its = logDS.begin();
while (its != logDS.end()) while (its != logDS.end())
@ -267,6 +340,12 @@ throw(SALOME::SALOME_Exception)
//SCRUTE(rnum); //SCRUTE(rnum);
list < double >::const_iterator ir = coordList.begin(); list < double >::const_iterator ir = coordList.begin();
aLog[indexLog].commandType = comType; aLog[indexLog].commandType = comType;
if(comType==SMESHDS_UpdateAll)
{
aLog=createUpdateAllCommand(aLog, &indexLog);
}
else
{
aLog[indexLog].number = lgcom; aLog[indexLog].number = lgcom;
aLog[indexLog].coords.length(rnum); aLog[indexLog].coords.length(rnum);
aLog[indexLog].indexes.length(inum); aLog[indexLog].indexes.length(inum);
@ -283,16 +362,16 @@ throw(SALOME::SALOME_Exception)
ii++; ii++;
} }
indexLog++; indexLog++;
}
its++; its++;
} }
if (clearAfterGet) if (clearAfterGet) _impl->ClearLog();
_impl->ClearLog(); return aLog._retn();
} /*}
catch(SALOME_Exception & S_ex) catch(SALOME_Exception & S_ex)
{ {
THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
} }*/
return aLog._retn();
} }
// SMESH::string_array* SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet) // SMESH::string_array* SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
@ -530,25 +609,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) SALOME_MED::MESH_ptr SMESH_Mesh_i::GetMEDMesh()throw(SALOME::SALOME_Exception)
{ {
SMESH_MEDMesh_i *aMedMesh = new SMESH_MEDMesh_i(this); SMESH_MEDMesh_i *aMedMesh = new SMESH_MEDMesh_i(this);
@ -625,3 +685,14 @@ CORBA::Long SMESH_Mesh_i::NbSubMesh()throw(SALOME::SALOME_Exception)
{ {
return _impl->NbSubMesh(); 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);
}

View File

@ -91,6 +91,9 @@ public:
CORBA::Long GetStudyId() CORBA::Long GetStudyId()
throw (SALOME::SALOME_Exception); throw (SALOME::SALOME_Exception);
void Export(const char* fileName, const char* fileType)
throw (SALOME::SALOME_Exception);
// --- C++ interface // --- C++ interface
void SetImpl(::SMESH_Mesh* impl); void SetImpl(::SMESH_Mesh* impl);
@ -100,13 +103,6 @@ public:
void SetIor(SMESH::SMESH_Mesh_ptr myIor); void SetIor(SMESH::SMESH_Mesh_ptr myIor);
SMESH::SMESH_Mesh_ptr GetIor(); 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() SALOME_MED::MESH_ptr GetMEDMesh()
throw (SALOME::SALOME_Exception); throw (SALOME::SALOME_Exception);
@ -142,7 +138,7 @@ public:
map<int, ::SMESH_subMesh*> _mapSubMesh; //NRI map<int, ::SMESH_subMesh*> _mapSubMesh; //NRI
private: private:
SMESH::log_array_var createUpdateAllCommand(SMESH::log_array_var log, int * index);
::SMESH_Mesh* _impl; // :: force no namespace here ::SMESH_Mesh* _impl; // :: force no namespace here
SMESH_Gen_i* _gen_i; SMESH_Gen_i* _gen_i;
// CORBA::ORB_ptr _orb; // CORBA::ORB_ptr _orb;