X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_MEDMesh_i.cxx;h=823c8a037057165e95fc78d76e8bc43e8b4f76bd;hp=23fb01fe6ff3aae2ccc651f72308671cce4cd5d7;hb=d4a710ce52f6e76786a7b3845e2f7975dc9a00b1;hpb=8b4ba0cdff7660465a9ea7b26ef0df0757afed97 diff --git a/src/SMESH_I/SMESH_MEDMesh_i.cxx b/src/SMESH_I/SMESH_MEDMesh_i.cxx index 23fb01fe6..823c8a037 100644 --- a/src/SMESH_I/SMESH_MEDMesh_i.cxx +++ b/src/SMESH_I/SMESH_MEDMesh_i.cxx @@ -1,19 +1,36 @@ -using namespace std; -//============================================================================= -// File : SMESH_MEDMesh_i.cxx -// Project : SALOME -// Copyright : EDF 2001 -//============================================================================= +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses +// File : SMESH_MEDMesh_i.cxx +// Module : SMESH +// #include "SMESH_MEDMesh_i.hxx" +#include "SMESH_Gen_i.hxx" #include "SMESH_Mesh_i.hxx" #include "SMESHDS_Mesh.hxx" #include "SMESHDS_SubMesh.hxx" -#include "SMDS_MapIteratorOfExtendedMap.hxx" -#include "SMDS_MapOfMeshElement.hxx" - #include #include #include @@ -37,11 +54,14 @@ using namespace std; # include "Utils_ORB_INIT.hxx" # include "Utils_SINGLETON.hxx" +# include "Utils_ExceptHandlers.hxx" + extern "C" { #include } +using namespace std; //============================================================================= /*! @@ -54,6 +74,7 @@ SMESH_MEDMesh_i::SMESH_MEDMesh_i() BEGIN_OF("Default Constructor SMESH_MEDMesh_i"); END_OF("Default Constructor SMESH_MEDMesh_i"); } + //============================================================================= /*! * Destructor @@ -62,22 +83,24 @@ SMESH_MEDMesh_i::SMESH_MEDMesh_i() SMESH_MEDMesh_i::~SMESH_MEDMesh_i() { } + //============================================================================= /*! * Constructor */ //============================================================================= -SMESH_MEDMesh_i::SMESH_MEDMesh_i( ::SMESH_Mesh_i* m_i ) :_meshId(""), - _compte(false), - _creeFamily(false), - _famIdent(0), - _indexElts(0), - _indexEnts(0) +SMESH_MEDMesh_i::SMESH_MEDMesh_i(::SMESH_Mesh_i * m_i):_meshId(""), + _compte(false), + _creeFamily(false), + _famIdent(0), + _indexElts(0), + _indexEnts(0) { + BEGIN_OF("Constructor SMESH_MEDMesh_i"); + _mesh_i = m_i; _meshDS = _mesh_i->GetImpl().GetMeshDS(); - BEGIN_OF("Constructor SMESH_MEDMesh_i"); END_OF("Constructor SMESH_MEDMesh_i"); } @@ -86,619 +109,740 @@ SMESH_MEDMesh_i::SMESH_MEDMesh_i( ::SMESH_Mesh_i* m_i ) :_meshId(""), * CORBA: Accessor for Name */ //============================================================================= -char * SMESH_MEDMesh_i::getName() - throw (SALOME::SALOME_Exception) +char *SMESH_MEDMesh_i::getName() throw(SALOME::SALOME_Exception) { if (_meshDS == NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); try - { - // A COMPLETER PAR LE NOM DU MAILLAGE - //return CORBA::string_dup(_mesh_i->getName().c_str()); + { + SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen(); + SALOMEDS::Study_var study = gen->GetCurrentStudy(); + SALOMEDS::SObject_var meshSO = gen->ObjectToSObject( study, _mesh_i->_this()); + if ( meshSO->_is_nil() ) return CORBA::string_dup("toto"); - } + + CORBA::String_var name = meshSO->GetName(); + return CORBA::string_dup( name.in() ); + } catch(...) - { - MESSAGE("Exception en accedant au nom"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant au nom"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } + return 0; } + //============================================================================= /*! * CORBA: Accessor for corbaindex cuisine interne */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getCorbaIndex() - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getCorbaIndex()throw(SALOME::SALOME_Exception) { MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); } + //============================================================================= /*! * CORBA: Accessor for Space Dimension */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getSpaceDimension() - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getSpaceDimension()throw(SALOME::SALOME_Exception) { // PN : Il semblerait que la dimension soit fixee a 3 if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); return 3; } + //============================================================================= /*! * CORBA: Accessor for Mesh Dimension */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getMeshDimension() - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getMeshDimension()throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); // PN : Il semblerait que la dimension soit fixee a 3 if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); return 3; } //============================================================================= /*! - * CORBA: Accessor for Coordinates System + * CORBA: Accessor for the boolean _isAGrid */ //============================================================================= -char * SMESH_MEDMesh_i::getCoordinateSystem() +CORBA::Boolean SMESH_MEDMesh_i::getIsAGrid() throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!!!! NOT YET IMPLEMENTED !!!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return false; +} +//============================================================================= +/*! + * CORBA: Accessor for the connectivities, to see if they exist + */ +//============================================================================= +CORBA::Boolean +SMESH_MEDMesh_i::existConnectivity(SALOME_MED::medConnectivity connectivityType, + SALOME_MED::medEntityMesh entity) throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!!!! IMPLEMENTED BUT ONLY PARTIALLY !!!!!!"); + + + return false; + +} +//============================================================================= +/*! + * CORBA: Accessor for Coordinate + */ +//============================================================================= +CORBA::Double SMESH_MEDMesh_i::getCoordinate(CORBA::Long Number, CORBA::Long Axis) + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!!!! NOT YET IMPLEMENTED !!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return 0.0; +} +//============================================================================= +/*! + * CORBA: Accessor for Coordinates System + */ +//============================================================================= +char *SMESH_MEDMesh_i::getCoordinatesSystem() throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); // PN : En dur. Non encore prevu try - { - string systcoo="CARTESIEN"; - return CORBA::string_dup(systcoo.c_str()); - } + { + string systcoo = "CARTESIEN"; + return CORBA::string_dup(systcoo.c_str()); + } catch(...) - { - MESSAGE("Exception en accedant au maillage"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant au maillage"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } } + //============================================================================= /*! * CORBA: Accessor for Coordinates */ //============================================================================= -Engines::double_array * SMESH_MEDMesh_i::getCoordinates(SALOME_MED::medModeSwitch typeSwitch) - throw (SALOME::SALOME_Exception) +SALOME_TYPES::ListOfDouble * SMESH_MEDMesh_i::getCoordinates +(SALOME_MED::medModeSwitch typeSwitch) throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); - Engines::double_array_var myseq = new Engines::double_array; + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); + SALOME_TYPES::ListOfDouble_var myseq = new SALOME_TYPES::ListOfDouble; try + { + // PN : En dur + int spaceDimension = 3; + int nbNodes = _meshDS->NbNodes(); + SCRUTE(nbNodes); + myseq->length(nbNodes * spaceDimension); + int i = 0; + + SMDS_NodeIteratorPtr itNodes=_meshDS->nodesIterator(); + while(itNodes->more()) { - // PN : En dur - int spaceDimension=3; - int nbNodes=_meshDS->NbNodes(); - SCRUTE(nbNodes); - myseq->length(nbNodes*spaceDimension); - int i = 0; - SMDS_MeshNodesIterator itNodes(_meshDS); - for (;itNodes.More();itNodes.Next()) - { - - const Handle(SMDS_MeshElement)& elem = itNodes.Value(); - const Handle(SMDS_MeshNode)& node =_meshDS->GetNode(1,elem); - - if (typeSwitch == SALOME_MED::MED_FULL_INTERLACE) - { - myseq[i*3]=node->X(); - myseq[i*3+1]=node->Y(); - myseq[i*3+2]=node->Z(); - SCRUTE(myseq[i*3]); - SCRUTE(myseq[i*3+1]); - SCRUTE(myseq[i*3+2]); - } - else - { - ASSERT(typeSwitch == SALOME_MED::MED_NO_INTERLACE); - myseq[i]=node->X(); - myseq[i+nbNodes]=node->Y(); - myseq[i+(nbNodes*2)]=node->Z(); - SCRUTE(myseq[i]); - SCRUTE(myseq[i+nbNodes]); - SCRUTE(myseq[i+(nbNodes*2)]); - } - i++; - } + const SMDS_MeshNode* node = itNodes->next(); + + if (typeSwitch == SALOME_MED::MED_FULL_INTERLACE) + { + myseq[i * 3] = node->X(); + myseq[i * 3 + 1] = node->Y(); + myseq[i * 3 + 2] = node->Z(); + SCRUTE(myseq[i * 3]); + SCRUTE(myseq[i * 3 + 1]); + SCRUTE(myseq[i * 3 + 2]); + } + else + { + ASSERT(typeSwitch == SALOME_MED::MED_NO_INTERLACE); + myseq[i] = node->X(); + myseq[i + nbNodes] = node->Y(); + myseq[i + (nbNodes * 2)] = node->Z(); + SCRUTE(myseq[i]); + SCRUTE(myseq[i + nbNodes]); + SCRUTE(myseq[i + (nbNodes * 2)]); + } + i++; } + } catch(...) - { - MESSAGE("Exception en accedant aux coordonnees"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant aux coordonnees"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } return myseq._retn(); } + //============================================================================= /*! * CORBA: Accessor for Coordinates Names */ //============================================================================= -Engines::string_array * SMESH_MEDMesh_i::getCoordinatesNames() - throw (SALOME::SALOME_Exception) +SALOME_TYPES::ListOfString * +SMESH_MEDMesh_i::getCoordinatesNames()throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); - Engines::string_array_var myseq = new Engines::string_array; + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); + SALOME_TYPES::ListOfString_var myseq = new SALOME_TYPES::ListOfString; try - { - // PN : en dur - int spaceDimension=3; - myseq->length(spaceDimension); - myseq[0]=CORBA::string_dup("x"); - myseq[1]=CORBA::string_dup("y"); - myseq[2]=CORBA::string_dup("z"); - } + { + // PN : en dur + int spaceDimension = 3; + myseq->length(spaceDimension); + myseq[0] = CORBA::string_dup("x"); + myseq[1] = CORBA::string_dup("y"); + myseq[2] = CORBA::string_dup("z"); + } catch(...) - { - MESSAGE("Exception en accedant aux noms des coordonnees"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant aux noms des coordonnees"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } return myseq._retn(); } + //============================================================================= /*! * CORBA: Accessor for Coordinates Units */ //============================================================================= -Engines::string_array * SMESH_MEDMesh_i::getCoordinatesUnits() - throw (SALOME::SALOME_Exception) +SALOME_TYPES::ListOfString * +SMESH_MEDMesh_i::getCoordinatesUnits()throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); - Engines::string_array_var myseq = new Engines::string_array; + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); + SALOME_TYPES::ListOfString_var myseq = new SALOME_TYPES::ListOfString; try - { - // PN : en dur - int spaceDimension=3; - myseq->length(spaceDimension); - myseq[0]=CORBA::string_dup("m"); - myseq[1]=CORBA::string_dup("m"); - myseq[2]=CORBA::string_dup("m"); - } + { + // PN : en dur + int spaceDimension = 3; + myseq->length(spaceDimension); + myseq[0] = CORBA::string_dup("m"); + myseq[1] = CORBA::string_dup("m"); + myseq[2] = CORBA::string_dup("m"); + } catch(...) - { - MESSAGE("Exception en accedant aux unites des coordonnees"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant aux unites des coordonnees"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } return myseq._retn(); } + //============================================================================= /*! * CORBA: Accessor for Number of Nodes */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfNodes() - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getNumberOfNodes()throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); try - { - return _meshDS->NbNodes(); - } + { + return _meshDS->NbNodes(); + } catch(...) - { - MESSAGE("Exception en accedant au nombre de noeuds"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant au nombre de noeuds"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } } + //============================================================================= /*! * CORBA: Accessor for number of Types */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfTypes(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getNumberOfTypes(SALOME_MED::medEntityMesh entity) + throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); try - { - if (! _compte) - calculeNbElts(); - int retour = 0; - if ( _mapNbTypes.find(entity)!=_mapNbTypes.end()) - retour=_mapNbTypes[entity]; - return retour; - } + { + if (!_compte) + calculeNbElts(); + int retour = 0; + if (_mapNbTypes.find(entity) != _mapNbTypes.end()) + retour = _mapNbTypes[entity]; + return retour; + } catch(...) - { - MESSAGE("Exception en accedant au nombre de Types"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant au nombre de Types"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } } //============================================================================= /*! * CORBA: Accessor for existing geometry element types - * Not implemented for MED_ALL_ENTITIES + * Not implemented for MED_ALL_ENTITIES */ //============================================================================= -SALOME_MED::medGeometryElement_array * SMESH_MEDMesh_i::getTypes (SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) +SALOME_MED::medGeometryElement_array * +SMESH_MEDMesh_i::getTypes(SALOME_MED::medEntityMesh entity) throw(SALOME:: + SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); - if (entity ==SALOME_MED::MED_ALL_ENTITIES) - THROW_SALOME_CORBA_EXCEPTION("Not implemented for MED_ALL_ENTITIES",\ - SALOME::BAD_PARAM); - if (! _compte) + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); + if (entity == SALOME_MED::MED_ALL_ENTITIES) + THROW_SALOME_CORBA_EXCEPTION("Not implemented for MED_ALL_ENTITIES", + SALOME::BAD_PARAM); + if (!_compte) calculeNbElts(); - SALOME_MED::medGeometryElement_array_var myseq = + SALOME_MED::medGeometryElement_array_var myseq = new SALOME_MED::medGeometryElement_array; try + { + if (_mapNbTypes.find(entity) == _mapNbTypes.end()) + THROW_SALOME_CORBA_EXCEPTION("No Such Entity in the mesh", + SALOME::BAD_PARAM); + int nbTypes = _mapNbTypes[entity]; + + myseq->length(nbTypes); + + if (_mapIndToVectTypes.find(entity) == _mapIndToVectTypes.end()) + THROW_SALOME_CORBA_EXCEPTION("No Such Entity in the mesh", + SALOME::INTERNAL_ERROR); + + int index = _mapIndToVectTypes[entity]; + ASSERT(_TypesId[index].size() != 0); + int i = 0; + vector < SALOME_MED::medGeometryElement >::iterator it; + for (it = _TypesId[index].begin(); it != _TypesId[index].end(); it++) { - if ( _mapNbTypes.find(entity) ==_mapNbTypes.end()) - THROW_SALOME_CORBA_EXCEPTION("No Such Entity in the mesh"\ - ,SALOME::BAD_PARAM); - int nbTypes=_mapNbTypes[entity]; - - myseq->length(nbTypes); - - if ( _mapIndToVectTypes.find(entity) ==_mapIndToVectTypes.end()) - THROW_SALOME_CORBA_EXCEPTION("No Such Entity in the mesh"\ - ,SALOME::INTERNAL_ERROR); - - int index=_mapIndToVectTypes[entity]; - ASSERT( _TypesId[index].size()!=0); - int i=0; - vector::iterator it; - for (it=_TypesId[index].begin();it!=_TypesId[index].end();it++) - { - myseq[i++]=*it; - }; - } + myseq[i++] = *it; + }; + } catch(...) - { - MESSAGE("Exception en accedant aux differents types"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant aux differents types"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } return myseq._retn(); } + //============================================================================= /*! * CORBA: Returns number of elements of type medGeometryElement - * Not implemented for MED_ALL_ELEMENTS - * implemented for MED_ALL_ENTITIES + * Not implemented for MED_ALL_ELEMENTS + * implemented for MED_ALL_ENTITIES * * Dans cette implementation, il n est pas prevu de tenir compte du entity * qui ne doit pas pouvoir avoir deux valeurs differentes pour un geomElement */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfElements(SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement geomElement) - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getNumberOfElements(SALOME_MED:: + medEntityMesh entity, + SALOME_MED::medGeometryElement geomElement) throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); if (geomElement == SALOME_MED::MED_ALL_ELEMENTS) - THROW_SALOME_CORBA_EXCEPTION("Not implemented for MED_ALL_ELEMENTS", \ - SALOME::BAD_PARAM); - if (! _compte) + THROW_SALOME_CORBA_EXCEPTION("Not implemented for MED_ALL_ELEMENTS", + SALOME::BAD_PARAM); + if (!_compte) calculeNbElts(); try + { + int retour = 0; + if (_mapIndToSeqElts.find(geomElement) != _mapIndToSeqElts.end()) { - int retour = 0; - if ( _mapIndToSeqElts.find(geomElement)!=_mapIndToSeqElts.end()) - { - int index = _mapIndToSeqElts[geomElement]; - retour=_seq_elemId[index]->length(); - } - return retour; + int index = _mapIndToSeqElts[geomElement]; + + retour = _seq_elemId[index]->length(); } + return retour; + } catch(...) - { - MESSAGE("Exception en accedant au nombre d élements"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object"\ - ,SALOME::INTERNAL_ERROR); - } + { + MESSAGE("Exception en accedant au nombre d élements"); + THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", + SALOME::INTERNAL_ERROR); + } } + //============================================================================= /*! * CORBA: Accessor for connectivities */ //============================================================================= -Engines::long_array * SMESH_MEDMesh_i::getConnectivity(SALOME_MED::medModeSwitch typeSwitch, - SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement geomElement) - throw (SALOME::SALOME_Exception) +SALOME_TYPES::ListOfLong * +SMESH_MEDMesh_i::getConnectivity(SALOME_MED::medConnectivity mode, + SALOME_MED::medEntityMesh entity, + SALOME_MED::medGeometryElement geomElement) + throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); if (mode != SALOME_MED::MED_NODAL) - THROW_SALOME_CORBA_EXCEPTION("Not Implemented",\ - SALOME::BAD_PARAM); - if (typeSwitch == SALOME_MED::MED_NO_INTERLACE) - THROW_SALOME_CORBA_EXCEPTION("Not Yet Implemented",\ - SALOME::BAD_PARAM); - if (! _compte) + THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); + /*if (typeSwitch == SALOME_MED::MED_NO_INTERLACE) + THROW_SALOME_CORBA_EXCEPTION("Not Yet Implemented", SALOME::BAD_PARAM);*/ + if (!_compte) calculeNbElts(); // Faut-il renvoyer un pointeur vide ??? - if ( _mapIndToSeqElts.find(geomElement)!=_mapIndToSeqElts.end()) - THROW_SALOME_CORBA_EXCEPTION("No Such Element in the mesh"\ - ,SALOME::BAD_PARAM); + if (_mapIndToSeqElts.find(geomElement) != _mapIndToSeqElts.end()) + THROW_SALOME_CORBA_EXCEPTION("No Such Element in the mesh", + SALOME::BAD_PARAM); + + int index = _mapIndToSeqElts[geomElement]; - int index=_mapIndToSeqElts[geomElement]; return _seq_elemId[index]._retn(); } + //============================================================================= /*! * CORBA: Accessor for connectivities */ //============================================================================= -Engines::long_array* SMESH_MEDMesh_i::getConnectivityIndex(SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) +SALOME_TYPES::ListOfLong * +SMESH_MEDMesh_i::getConnectivityIndex(SALOME_MED::medConnectivity mode, + SALOME_MED::medEntityMesh entity) + throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: Find an element corresponding to the given connectivity */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getElementNumber(SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement type, - const Engines::long_array & connectivity -) - throw (SALOME::SALOME_Exception) +CORBA::Long +SMESH_MEDMesh_i::getElementNumber(SALOME_MED::medConnectivity mode, + SALOME_MED::medEntityMesh entity, + SALOME_MED::medGeometryElement type, + const SALOME_TYPES::ListOfLong & connectivity) + throw(SALOME::SALOME_Exception) { - const char * LOC = "getElementNumber "; - MESSAGE(LOC<<"Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + const char *LOC = "getElementNumber "; + MESSAGE(LOC << "Pas Implemente dans SMESH"); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return -1; } + //============================================================================= /*! * CORBA: Accessor for Ascendant connectivities * not implemented for MED_ALL_ENTITIES and MED_MAILLE */ //============================================================================= -Engines::long_array* SMESH_MEDMesh_i::getReverseConnectivity(SALOME_MED::medConnectivity mode) - throw (SALOME::SALOME_Exception) +SALOME_TYPES::ListOfLong * +SMESH_MEDMesh_i::getReverseConnectivity(SALOME_MED:: + medConnectivity mode) throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: Accessor for connectivities */ //============================================================================= -Engines::long_array* SMESH_MEDMesh_i::getReverseConnectivityIndex(SALOME_MED::medConnectivity mode) - throw (SALOME::SALOME_Exception) +SALOME_TYPES::ListOfLong * +SMESH_MEDMesh_i::getReverseConnectivityIndex(SALOME_MED:: + medConnectivity mode) throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: Returns number of families within the mesh */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfFamilies(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getNumberOfFamilies(SALOME_MED:: + medEntityMesh entity) throw(SALOME::SALOME_Exception) { if (_creeFamily == false) createFamilies(); if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); return _families.size(); } + //============================================================================= /*! * CORBA: Returns number of groups within the mesh */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfGroups(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::getNumberOfGroups(SALOME_MED::medEntityMesh entity) + throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); MESSAGE(" Pas d implementation des groupes dans SMESH"); return 0; } + //============================================================================= /*! * CORBA: Returns references for families within the mesh */ //============================================================================= -SALOME_MED::Family_array * SMESH_MEDMesh_i::getFamilies(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) +SALOME_MED::Family_array * +SMESH_MEDMesh_i::getFamilies(SALOME_MED:: + medEntityMesh entity) throw(SALOME::SALOME_Exception) { if (_creeFamily == false) createFamilies(); if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); SALOME_MED::Family_array_var myseq = new SALOME_MED::Family_array; - int nbfam= _families.size(); + int nbfam = _families.size(); myseq->length(nbfam); int i = 0; - vector::iterator it; - for (it=_families.begin();it!=_families.end();it++) - { - myseq[i++]=*it; - }; + vector < SALOME_MED::FAMILY_ptr >::iterator it; + for (it = _families.begin(); it != _families.end(); it++) + { + myseq[i++] = *it; + }; return myseq._retn(); } + //============================================================================= /*! * CORBA: Returns references for family i within the mesh */ //============================================================================= -SALOME_MED::FAMILY_ptr SMESH_MEDMesh_i::getFamily(SALOME_MED::medEntityMesh entity, - CORBA::Long i) - throw (SALOME::SALOME_Exception) +SALOME_MED::FAMILY_ptr SMESH_MEDMesh_i::getFamily(SALOME_MED:: + medEntityMesh entity, CORBA::Long i) throw(SALOME::SALOME_Exception) { if (_creeFamily == false) createFamilies(); if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); SCRUTE(_families[i]->getName()); - MESSAGE ( " SMESH_MEDMesh_i::getFamily " << i ) - return _families[i]; + MESSAGE(" SMESH_MEDMesh_i::getFamily " << i) return _families[i]; } + //============================================================================= /*! * CORBA: Returns references for groups within the mesh */ //============================================================================= -SALOME_MED::Group_array * SMESH_MEDMesh_i::getGroups(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) +SALOME_MED::Group_array * +SMESH_MEDMesh_i::getGroups(SALOME_MED::medEntityMesh entity) throw(SALOME:: + SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); MESSAGE(" Pas d implementation des groupes dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("No group implementation"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("No group implementation", SALOME::BAD_PARAM); } + //============================================================================= /*! * CORBA: Returns references for group i within the mesh */ //============================================================================= -SALOME_MED::GROUP_ptr SMESH_MEDMesh_i::getGroup(SALOME_MED::medEntityMesh entity, - CORBA::Long i) - throw (SALOME::SALOME_Exception) +SALOME_MED::GROUP_ptr SMESH_MEDMesh_i::getGroup(SALOME_MED:: + medEntityMesh entity, CORBA::Long i) throw(SALOME::SALOME_Exception) { if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", \ - SALOME::INTERNAL_ERROR); + THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", + SALOME::INTERNAL_ERROR); MESSAGE(" Pas d implementation des groupes dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("No group implementation"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("No group implementation", SALOME::BAD_PARAM); } //============================================================================= /*! - * CORBA: + * CORBA: Returns references for the global numbering index + */ +//============================================================================= +SALOME_TYPES::ListOfLong* +SMESH_MEDMesh_i::getGlobalNumberingIndex(SALOME_MED::medEntityMesh entity) + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return NULL; +} +//============================================================================= +/*! + * CORBA: Returns references for the support of boundary elements of type + * entity + */ +//============================================================================= +SALOME_MED::SUPPORT_ptr +SMESH_MEDMesh_i::getBoundaryElements(SALOME_MED::medEntityMesh entity) + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return NULL; +} +//============================================================================= +/*! + * CORBA: Method return a reference on a support define on all the element of + * an entity. */ //============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getVolume(SALOME_MED::SUPPORT_ptr mySupport) +SALOME_MED::SUPPORT_ptr +SMESH_MEDMesh_i::getSupportOnAll(SALOME_MED::medEntityMesh entity) throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return NULL; +} +//============================================================================= +/*! + * CORBA: Returns references for the support of the skin of the support + * mySupport3D + */ +//============================================================================= +SALOME_MED::SUPPORT_ptr +SMESH_MEDMesh_i::getSkin(SALOME_MED::SUPPORT_ptr mySupport3D) + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return NULL; +} +//============================================================================= +/*! + * CORBA: + */ +//============================================================================= +SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getVolume(SALOME_MED:: + SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: */ //============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getArea(SALOME_MED::SUPPORT_ptr mySupport) - throw (SALOME::SALOME_Exception) +SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getArea(SALOME_MED:: + SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: */ //============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getLength(SALOME_MED::SUPPORT_ptr mySupport) - throw (SALOME::SALOME_Exception) +SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getLength(SALOME_MED:: + SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: */ //============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getNormal(SALOME_MED::SUPPORT_ptr mySupport) - throw (SALOME::SALOME_Exception) +SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getNormal(SALOME_MED:: + SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: */ //============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getBarycenter(SALOME_MED::SUPPORT_ptr mySupport) - throw (SALOME::SALOME_Exception) +SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getBarycenter(SALOME_MED:: + SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) { MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: */ //============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getNeighbourhood(SALOME_MED::SUPPORT_ptr mySupport) - throw (SALOME::SALOME_Exception) +SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getNeighbourhood(SALOME_MED:: + SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) { MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * CORBA: add the Mesh in the StudyManager @@ -706,313 +850,401 @@ SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getNeighbourhood(SALOME_MED::SUPPORT_ptr */ //============================================================================= void SMESH_MEDMesh_i::addInStudy(SALOMEDS::Study_ptr myStudy, - SALOME_MED::MESH_ptr myIor) - throw (SALOME::SALOME_Exception) + SALOME_MED::GMESH_ptr myIor) throw(SALOME::SALOME_Exception) { BEGIN_OF("MED_Mesh_i::addInStudy"); - if ( _meshId != "" ) - { - MESSAGE("Mesh already in Study"); - THROW_SALOME_CORBA_EXCEPTION("Mesh already in Study", \ - SALOME::BAD_PARAM); - }; + if (_meshId != "") + { + MESSAGE("Mesh already in Study"); + THROW_SALOME_CORBA_EXCEPTION("Mesh already in Study", + SALOME::BAD_PARAM); + }; /* - SALOMEDS::StudyBuilder_var myBuilder = myStudy->NewBuilder(); - - // Create SComponent labelled 'MED' if it doesn't already exit - SALOMEDS::SComponent_var medfather = myStudy->FindComponent("MED"); - if ( CORBA::is_nil(medfather) ) - { - MESSAGE("Add Component MED"); - medfather = myBuilder->NewComponent("MED"); - //myBuilder->AddAttribute (medfather,SALOMEDS::Name,"MED"); - SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow( - myBuilder->FindOrCreateAttribute(medfather, "AttributeName")); - aName->SetValue("MED"); - - myBuilder->DefineComponentInstance(medfather,myIor); - - } ; - - MESSAGE("Add a mesh Object under MED"); - myBuilder->NewCommand(); - SALOMEDS::SObject_var newObj = myBuilder->NewObject(medfather); - - ORB_INIT &init = *SINGLETON_::Instance() ; - ASSERT(SINGLETON_::IsAlreadyExisting()) ; - CORBA::ORB_var &orb = init(0,0); - string iorStr = orb->object_to_string(myIor); - //myBuilder->AddAttribute(newObj,SALOMEDS::IOR,iorStr.c_str()); - SALOMEDS::AttributeIOR_var aIOR = SALOMEDS::AttributeIOR::_narrow( - myBuilder->FindOrCreateAttribute(newObj, "AttributeIOR")); - aIOR->SetValue(iorStr.c_str()); - - //myBuilder->AddAttribute(newObj,SALOMEDS::Name,_mesh_i->getName().c_str()); - SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow( - myBuilder->FindOrCreateAttribute(newObj, "AttributeName")); - aName->SetValue(_mesh_i->getName().c_str()); - - _meshId = newObj->GetID(); - myBuilder->CommitCommand(); - - */ + * SALOMEDS::StudyBuilder_var myBuilder = myStudy->NewBuilder(); + * + * // Create SComponent labelled 'MED' if it doesn't already exit + * SALOMEDS::SComponent_var medfather = myStudy->FindComponent("MED"); + * if ( CORBA::is_nil(medfather) ) + * { + * MESSAGE("Add Component MED"); + * medfather = myBuilder->NewComponent("MED"); + * //myBuilder->AddAttribute (medfather,SALOMEDS::Name,"MED"); + * SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow( + * myBuilder->FindOrCreateAttribute(medfather, "AttributeName")); + * aName->SetValue("MED"); + * + * myBuilder->DefineComponentInstance(medfather,myIor); + * + * } ; + * + * MESSAGE("Add a mesh Object under MED"); + * myBuilder->NewCommand(); + * SALOMEDS::SObject_var newObj = myBuilder->NewObject(medfather); + * + * ORB_INIT &init = *SINGLETON_::Instance() ; + * ASSERT(SINGLETON_::IsAlreadyExisting()) ; + * CORBA::ORB_var &orb = init(0,0); + * CORBA::String_var iorStr = orb->object_to_string(myIor); + * //myBuilder->AddAttribute(newObj,SALOMEDS::IOR,iorStr.in()); + * SALOMEDS::AttributeIOR_var aIOR = SALOMEDS::AttributeIOR::_narrow( + * myBuilder->FindOrCreateAttribute(newObj, "AttributeIOR")); + * aIOR->SetValue(iorStr.c_str()); + * + * //myBuilder->AddAttribute(newObj,SALOMEDS::Name,_mesh_i->getName().c_str()); + * SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow( + * myBuilder->FindOrCreateAttribute(newObj, "AttributeName")); + * aName->SetValue(_mesh_i->getName().c_str()); + * + * _meshId = newObj->GetID(); + * myBuilder->CommitCommand(); + * + */ END_OF("Mesh_i::addInStudy(SALOMEDS::Study_ptr myStudy)"); } + //============================================================================= /*! * CORBA: write mesh in a med file */ //============================================================================= -void SMESH_MEDMesh_i::write(CORBA::Long i, const char* driverMeshName) - throw (SALOME::SALOME_Exception) +void SMESH_MEDMesh_i::write(CORBA::Long i, const char *driverMeshName) + throw(SALOME::SALOME_Exception) { MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); } + //============================================================================= /*! * CORBA: read mesh in a med file */ //============================================================================= -void SMESH_MEDMesh_i::read(CORBA::Long i) - throw (SALOME::SALOME_Exception) +void SMESH_MEDMesh_i::read(CORBA::Long i) throw(SALOME::SALOME_Exception) { MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); } + //============================================================================= /*! * CORBA : release driver */ //============================================================================= -void SMESH_MEDMesh_i::rmDriver(CORBA::Long i) - throw (SALOME::SALOME_Exception) +void SMESH_MEDMesh_i::rmDriver(CORBA::Long i) throw(SALOME::SALOME_Exception) { MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); } + //============================================================================= /*! * CORBA : attach driver */ //============================================================================= -CORBA::Long SMESH_MEDMesh_i::addDriver(SALOME_MED::medDriverTypes driverType, - const char* fileName, const char* meshName) - throw (SALOME::SALOME_Exception) +CORBA::Long SMESH_MEDMesh_i::addDriver(SALOME_MED::medDriverTypes driverType, + const char *fileName, const char *meshName) throw(SALOME::SALOME_Exception) { MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method"\ - ,SALOME::BAD_PARAM); + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); return 0; } + //============================================================================= /*! * Calcule le Nb d'elements par entite geometrique */ //============================================================================= -void SMESH_MEDMesh_i::calculeNbElts() - throw (SALOME::SALOME_Exception) +void SMESH_MEDMesh_i::calculeNbElts() throw(SALOME::SALOME_Exception) { - if (! _compte) + if (!_compte) + { + _compte = true; + + _mapNbTypes[SALOME_MED::MED_NODE] = 1; + // On compte les aretes MED_SEG2 ou MED_SEG3 + // On range les elements dans les vecteurs correspondants + + _mapIndToSeqElts[SALOME_MED::MED_SEG2] = _indexElts++; + _mapIndToSeqElts[SALOME_MED::MED_SEG3] = _indexElts++; + _mapIndToVectTypes[SALOME_MED::MED_EDGE] = _indexEnts++; + + int trouveSeg2 = 0; + int trouveSeg3 = 0; + SALOME_MED::medGeometryElement medElement; + + SMDS_EdgeIteratorPtr itEdges=_meshDS->edgesIterator(); + while(itEdges->more()) + { + const SMDS_MeshEdge* elem = itEdges->next(); + int nb_of_nodes = elem->NbNodes(); + + switch (nb_of_nodes) + { + case 2: + { + medElement = SALOME_MED::MED_SEG2; + if (trouveSeg2 == 0) + { + trouveSeg2 = 1; + _TypesId[SALOME_MED::MED_EDGE]. + push_back(SALOME_MED::MED_SEG2); + } + break; + } + case 3: + { + medElement = SALOME_MED::MED_SEG3; + if (trouveSeg3 == 0) + { + trouveSeg3 = 1; + _TypesId[SALOME_MED::MED_EDGE]. + push_back(SALOME_MED::MED_SEG3); + } + break; + } + } + int index = _mapIndToSeqElts[medElement]; + SCRUTE(index); + // Traitement de l arete + + int longueur = _seq_elemId[index]->length(); + _seq_elemId[index]->length(longueur + nb_of_nodes); + + SMDS_NodeIteratorPtr itn=_meshDS->nodesIterator(); + + for(int k=0; itn->more(); k++) + _seq_elemId[index][longueur + k] = itn->next()->GetID()+1; + } + + _mapNbTypes[SALOME_MED::MED_EDGE] = trouveSeg2 + trouveSeg3; + + // On compte les faces MED_TRIA3, MED_HEXA8, MED_TRIA6 + // On range les elements dans les vecteurs correspondants + int trouveTria3 = 0; + int trouveTria6 = 0; + int trouveQuad4 = 0; + + _mapIndToSeqElts[SALOME_MED::MED_TRIA3] = _indexElts++; + _mapIndToSeqElts[SALOME_MED::MED_TRIA6] = _indexElts++; + _mapIndToSeqElts[SALOME_MED::MED_QUAD4] = _indexElts++; + _mapIndToVectTypes[SALOME_MED::MED_FACE] = _indexEnts++; + + SMDS_FaceIteratorPtr itFaces=_meshDS->facesIterator(); + while(itFaces->more()) { - _compte=true; - - _mapNbTypes[SALOME_MED::MED_NODE]=1; - // On compte les aretes MED_SEG2 ou MED_SEG3 - // On range les elements dans les vecteurs correspondants - - _mapIndToSeqElts[SALOME_MED::MED_SEG2]=_indexElts++; - _mapIndToSeqElts[SALOME_MED::MED_SEG3]=_indexElts++; - _mapIndToVectTypes[SALOME_MED::MED_EDGE]=_indexEnts++; - - int trouveSeg2=0; - int trouveSeg3=0; - SALOME_MED::medGeometryElement medElement; - SMDS_MeshEdgesIterator itEdges(_meshDS); - for (;itEdges.More();itEdges.Next()) - { - const Handle(SMDS_MeshElement)& elem = itEdges.Value(); - int nb_of_nodes = elem->NbNodes(); - - switch (nb_of_nodes) - { - case 2 : - { - medElement=SALOME_MED::MED_SEG2; - if (trouveSeg2==0) - { - trouveSeg2=1; - _TypesId[SALOME_MED::MED_EDGE].push_back(SALOME_MED::MED_SEG2); - - } - break; - } - case 3 : - { - medElement=SALOME_MED::MED_SEG3; - if (trouveSeg3==0) - { - trouveSeg3=1; - _TypesId[SALOME_MED::MED_EDGE].push_back(SALOME_MED::MED_SEG3); - } - break; - } - } - int index=_mapIndToSeqElts[medElement]; - SCRUTE(index); - // Traitement de l arete - int longueur=_seq_elemId[index]->length(); - _seq_elemId[index]->length(longueur + nb_of_nodes); - - for (int k=0; kGetConnection(k+1) +1; - } - } - - _mapNbTypes[SALOME_MED::MED_EDGE]=trouveSeg2 + trouveSeg3; - - // On compte les faces MED_TRIA3, MED_HEXA8, MED_TRIA6 - // On range les elements dans les vecteurs correspondants - int trouveTria3=0; - int trouveTria6=0; - int trouveQuad4=0; - - _mapIndToSeqElts[SALOME_MED::MED_TRIA3]=_indexElts++; - _mapIndToSeqElts[SALOME_MED::MED_TRIA6]=_indexElts++; - _mapIndToSeqElts[SALOME_MED::MED_QUAD4]=_indexElts++; - _mapIndToVectTypes[SALOME_MED::MED_FACE]=_indexEnts++; - - SMDS_MeshFacesIterator itFaces(_meshDS); - for (;itFaces.More();itFaces.Next()) - { - - const Handle(SMDS_MeshElement)& elem = itFaces.Value(); - int nb_of_nodes = elem->NbNodes(); - - switch (nb_of_nodes) - { - case 3 : - { - medElement=SALOME_MED::MED_TRIA3; - if (trouveTria3==0) - { - trouveTria3=1; - _TypesId[SALOME_MED::MED_FACE].push_back(SALOME_MED::MED_TRIA3); - } - break; - } - case 4 : - { - medElement=SALOME_MED::MED_QUAD4; - if (trouveQuad4==0) - { - trouveQuad4=1; - _TypesId[SALOME_MED::MED_FACE].push_back(SALOME_MED::MED_QUAD4); - } - break; - } - case 6 : - { - medElement=SALOME_MED::MED_TRIA6; - if (trouveTria6==0) - { - trouveTria6=1; - _TypesId[SALOME_MED::MED_FACE].push_back(SALOME_MED::MED_TRIA6); - } - break; - } - } - int index=_mapIndToSeqElts[medElement]; - SCRUTE(index); - - // Traitement de la face - // Attention La numérotation des noeuds Med commence a 1 - - - int longueur = _seq_elemId[index]->length(); - _seq_elemId[index]->length(longueur+nb_of_nodes); - - for (int k=0; kGetConnection(k+1) +1; - } - - } - _mapNbTypes[SALOME_MED::MED_FACE]=trouveTria3 + trouveTria6 + trouveQuad4; - - _mapIndToSeqElts[SALOME_MED::MED_HEXA8]=_indexElts++; - _mapIndToVectTypes[SALOME_MED::MED_CELL]=_indexEnts++; - int index=_mapIndToSeqElts[medElement]; - - int trouveHexa8=0; - SMDS_MeshVolumesIterator itVolumes(_meshDS); - for (;itVolumes.More();itVolumes.Next()) - { - const Handle(SMDS_MeshElement)& elem = itVolumes.Value(); - - int nb_of_nodes = elem->NbNodes(); - medElement=SALOME_MED::MED_HEXA8; - ASSERT(nb_of_nodes=8); - - if (trouveHexa8 == 0) - { - trouveHexa8=1; - _TypesId[SALOME_MED::MED_CELL].push_back(SALOME_MED::MED_HEXA8); - }; - // Traitement de la maille - int longueur=_seq_elemId[index]->length(); - _seq_elemId[index]->length(longueur+nb_of_nodes); - - for (int k=0; kGetConnection(k+1) +1; - } + const SMDS_MeshFace * elem = itFaces->next(); + int nb_of_nodes = elem->NbNodes(); + switch (nb_of_nodes) + { + case 3: + { + medElement = SALOME_MED::MED_TRIA3; + if (trouveTria3 == 0) + { + trouveTria3 = 1; + _TypesId[SALOME_MED::MED_FACE]. + push_back(SALOME_MED::MED_TRIA3); + } + break; + } + case 4: + { + medElement = SALOME_MED::MED_QUAD4; + if (trouveQuad4 == 0) + { + trouveQuad4 = 1; + _TypesId[SALOME_MED::MED_FACE]. + push_back(SALOME_MED::MED_QUAD4); + } + break; } + case 6: + { + medElement = SALOME_MED::MED_TRIA6; + if (trouveTria6 == 0) + { + trouveTria6 = 1; + _TypesId[SALOME_MED::MED_FACE]. + push_back(SALOME_MED::MED_TRIA6); + } + break; + } + } + int index = _mapIndToSeqElts[medElement]; + SCRUTE(index); + + // Traitement de la face + // Attention La numérotation des noeuds Med commence a 1 + + int longueur = _seq_elemId[index]->length(); + _seq_elemId[index]->length(longueur + nb_of_nodes); + + SMDS_NodeIteratorPtr itn=_meshDS->nodesIterator(); + + for(int k=0; itn->more(); k++) + _seq_elemId[index][longueur + k] = itn->next()->GetID()+1; + } //itFaces + + _mapNbTypes[SALOME_MED::MED_FACE] = + trouveTria3 + trouveTria6 + trouveQuad4; + + _mapIndToSeqElts[SALOME_MED::MED_HEXA8] = _indexElts++; + _mapIndToVectTypes[SALOME_MED::MED_CELL] = _indexEnts++; + int index = _mapIndToSeqElts[medElement]; + + int trouveHexa8 = 0; - _mapNbTypes[SALOME_MED::MED_CELL]=trouveHexa8; - _mapNbTypes[SALOME_MED::MED_ALL_ENTITIES] - =trouveHexa8 + trouveTria3 + trouveTria6 + trouveQuad4 + trouveSeg2 + trouveSeg3 ; - } /* fin du _compte */ + SMDS_VolumeIteratorPtr itVolumes=_meshDS->volumesIterator(); + while(itVolumes->more()) + { + const SMDS_MeshVolume * elem = itVolumes->next(); + + int nb_of_nodes = elem->NbNodes(); + medElement = SALOME_MED::MED_HEXA8; + ASSERT(nb_of_nodes == 8); + + if (trouveHexa8 == 0) + { + trouveHexa8 = 1; + _TypesId[SALOME_MED::MED_CELL].push_back(SALOME_MED::MED_HEXA8); + }; + // Traitement de la maille + int longueur = _seq_elemId[index]->length(); + _seq_elemId[index]->length(longueur + nb_of_nodes); + + SMDS_NodeIteratorPtr itn=_meshDS->nodesIterator(); + for(int k=0; itn->more(); k++) + _seq_elemId[index][longueur + k] = itn->next()->GetID()+1; + } + + _mapNbTypes[SALOME_MED::MED_CELL] = trouveHexa8; + _mapNbTypes[SALOME_MED::MED_ALL_ENTITIES] + = + trouveHexa8 + trouveTria3 + trouveTria6 + trouveQuad4 + trouveSeg2 + + trouveSeg3; + }// fin du _compte }; + //============================================================================= /*! * Creation des familles */ //============================================================================= -void SMESH_MEDMesh_i::createFamilies() - throw (SALOME::SALOME_Exception) +void SMESH_MEDMesh_i::createFamilies() throw(SALOME::SALOME_Exception) { - string famDes=("Je ne sais pas"); - string famName0="Famille_"; + Unexpect aCatch(SALOME_SalomeException); + string famDes = ("Je ne sais pas"); + string famName0 = "Famille_"; string famName; char numero[10]; - if ( _creeFamily == false) + if (_creeFamily == false) + { + _creeFamily = true; + //SMESH_subMesh_i *subMeshServant; + + map < int, SMESH_subMesh_i * >::iterator it; + for (it = _mesh_i->_mapSubMesh_i.begin(); + it != _mesh_i->_mapSubMesh_i.end(); it++) { - _creeFamily = true; - SMESH_subMesh_i* subMeshServant; - - map::iterator it; - for (it = _mesh_i->_mapSubMesh_i.begin(); it != _mesh_i->_mapSubMesh_i.end(); it++) { - SMESH_subMesh_i* submesh_i = (*it).second; - int famIdent = (*it).first; - - ASSERT (famIdent<999999999); - sprintf(numero,"%d\n",famIdent); - famName=famName0 + numero; - - SMESH_MEDFamily_i * famservant= new SMESH_MEDFamily_i(famIdent, submesh_i, - famName, famDes, SALOME_MED::MED_NODE); - SALOME_MED::FAMILY_ptr famille = - SALOME_MED::FAMILY::_narrow(famservant->POA_SALOME_MED::FAMILY::_this()); - _families.push_back(famille); - } - } /* fin du _compte */ + SMESH_subMesh_i *submesh_i = (*it).second; + int famIdent = (*it).first; + + ASSERT(famIdent < 999999999); + sprintf(numero, "%d\n", famIdent); + famName = famName0 + numero; + + SMESH_MEDFamily_i *famservant = + new SMESH_MEDFamily_i(famIdent, submesh_i, + famName, famDes, SALOME_MED::MED_NODE); +#ifdef WNT + SALOME_MED::FAMILY_ptr famille = SALOME_MED::FAMILY::_nil(); + POA_SALOME_MED::FAMILY* servantbase = dynamic_cast(famservant); + if ( servantbase ) + famille = SALOME_MED::FAMILY::_narrow( servantbase->_this() ); +#else + SALOME_MED::FAMILY_ptr famille = + SALOME_MED::FAMILY::_narrow( famservant->POA_SALOME_MED::FAMILY::_this() ); +#endif + _families.push_back(famille); + } + } }; +//============================================================================= +/*! + * Gives informations of the considered mesh. + */ +//============================================================================= +SALOME_MED::GMESH::meshInfos * SMESH_MEDMesh_i::getMeshGlobal() + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + return NULL; +} + +//================================================================================ +/*! + * \brief Converts this GMESH into MESH + */ +//================================================================================ + +SALOME_MED::MESH_ptr SMESH_MEDMesh_i::convertInMESH() throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return NULL; +} + +//============================================================================= +/*! + * Gives informations on coordinates of the considered mesh. + */ +//============================================================================= +SALOME_MED::GMESH::coordinateInfos * SMESH_MEDMesh_i::getCoordGlobal() + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return NULL; +} +//============================================================================= +/*! + * Gives informations on connectivities of the considered mesh for the entity + * entity. + */ +//============================================================================= +SALOME_MED::MESH::connectivityInfos * +SMESH_MEDMesh_i::getConnectGlobal(SALOME_MED::medEntityMesh entity) + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return NULL; +} +//============================================================================= +/*! + * Gives the type of the element number of entity entity + */ +//============================================================================= +SALOME_MED::medGeometryElement +SMESH_MEDMesh_i::getElementType(SALOME_MED::medEntityMesh entity, + CORBA::Long number) + throw (SALOME::SALOME_Exception) +{ + MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); + + THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); + + return (SALOME_MED::medGeometryElement) 0; +}