X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Mesh_i.cxx;h=d8445554f8678f0294de357f9589877ffeccfb6a;hp=d41a1f4f29c140e17df9be51790db37a26d55f68;hb=5c933ecde0251d3c4894d0cdeab8dc67b6c4c3a5;hpb=c38c10811a065cf5b13e8807ed71864d92ca7d80 diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index d41a1f4f2..d8445554f 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -1,23 +1,23 @@ // SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses // // Copyright (C) 2003 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // // @@ -31,6 +31,7 @@ #include "SMESH_MEDMesh_i.hxx" #include "SMESH_Group_i.hxx" #include "SMESH_Filter_i.hxx" +#include "SMESH_PythonDump.hxx" #include "Utils_CorbaException.hxx" #include "Utils_ExceptHandlers.hxx" @@ -40,17 +41,23 @@ #include "Utils_SINGLETON.hxx" #include "OpUtil.hxx" -#include "TCollection_AsciiString.hxx" #include "SMESHDS_Command.hxx" #include "SMESHDS_CommandType.hxx" #include "SMESH_MeshEditor_i.hxx" #include "SMESH_Gen_i.hxx" #include "DriverMED_R_SMESHDS_Mesh.h" +// OCCT Includes +#include +#include +#include +#include #include #include #include +#include "TCollection_AsciiString.hxx" +// STL Includes #include #include #include @@ -62,6 +69,7 @@ static int MYDEBUG = 0; #endif using namespace std; +using SMESH::TPythonDump; int SMESH_Mesh_i::myIdGenerator = 0; @@ -100,7 +108,7 @@ SMESH_Mesh_i::~SMESH_Mesh_i() // this method is colled from destructor of group (PAL6331) //_impl->RemoveGroup( aGroup->GetLocalID() ); - + aGroup->Destroy(); } } @@ -111,8 +119,8 @@ SMESH_Mesh_i::~SMESH_Mesh_i() /*! * SetShape * - * Associates mesh with and puts a reference - * to into the current study; + * Associates mesh with and puts a reference + * to into the current study; * the previous shape is substituted by the new one. */ //============================================================================= @@ -131,7 +139,7 @@ void SMESH_Mesh_i::SetShape( GEOM::GEOM_Object_ptr theShapeObject ) //======================================================================= //function : GetShapeToMesh -//purpose : +//purpose : //======================================================================= GEOM::GEOM_Object_ptr SMESH_Mesh_i::GetShapeToMesh() @@ -152,7 +160,7 @@ GEOM::GEOM_Object_ptr SMESH_Mesh_i::GetShapeToMesh() //============================================================================= /*! - * + * */ //============================================================================= @@ -195,7 +203,7 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName ) } catch( SALOME_Exception& S_ex ) { THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } + } catch ( ... ) { THROW_SALOME_CORBA_EXCEPTION("ImportMEDFile(): unknown exception", SALOME::BAD_PARAM); } @@ -282,7 +290,7 @@ int SMESH_Mesh_i::importMEDFile( const char* theFileName, const char* theMeshNam //============================================================================= /*! - * + * */ //============================================================================= @@ -318,7 +326,7 @@ static SMESH::Hypothesis_Status ConvertHypothesisStatus /*! * AddHypothesis * - * calls internal addHypothesis() and then adds a reference to under + * calls internal addHypothesis() and then adds a reference to under * the SObject actually having a reference to . * NB: For this method to work, it is necessary to add a reference to sub-shape first. */ @@ -338,19 +346,15 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Object_ptr aSubS if(MYDEBUG) MESSAGE( " AddHypothesis(): status = " << status ); // Update Python script - TCollection_AsciiString aStr ("status = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".AddHypothesis("; - SMESH_Gen_i::AddObject(aStr, aSubShapeObject) += ", "; - SMESH_Gen_i::AddObject(aStr, anHyp) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << "status = " << _this() << ".AddHypothesis( " + << aSubShapeObject << ", " << anHyp << " )"; return ConvertHypothesisStatus(status); } //============================================================================= /*! - * + * */ //============================================================================= @@ -394,7 +398,7 @@ SMESH_Hypothesis::Hypothesis_Status //============================================================================= /*! - * + * */ //============================================================================= @@ -410,19 +414,15 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Object_ptr aS aSubShapeObject, anHyp ); // Update Python script - TCollection_AsciiString aStr ("status = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveHypothesis("; - SMESH_Gen_i::AddObject(aStr, aSubShapeObject) += ", "; - SMESH_Gen_i::AddObject(aStr, anHyp) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << "status = " << _this() << ".RemoveHypothesis( " + << aSubShapeObject << ", " << anHyp << " )"; return ConvertHypothesisStatus(status); } //============================================================================= /*! - * + * */ //============================================================================= @@ -459,7 +459,7 @@ SMESH_Hypothesis::Hypothesis_Status SMESH_Mesh_i::removeHypothesis(GEOM::GEOM_Ob //============================================================================= /*! - * + * */ //============================================================================= @@ -472,7 +472,7 @@ throw(SALOME::SALOME_Exception) if (CORBA::is_nil(aSubShapeObject)) THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", SALOME::BAD_PARAM); - + SMESH::ListOfHypothesis_var aList = new SMESH::ListOfHypothesis(); try { @@ -492,17 +492,17 @@ throw(SALOME::SALOME_Exception) catch(SALOME_Exception & S_ex) { THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); } - + return aList._retn(); } //============================================================================= /*! - * + * */ //============================================================================= SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShapeObject, - const char* theName ) + const char* theName ) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); @@ -510,14 +510,14 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShap if (CORBA::is_nil(aSubShapeObject)) THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", SALOME::BAD_PARAM); - + SMESH::SMESH_subMesh_var subMesh; SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(_this()); try { TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(aSubShapeObject); - + //Get or Create the SMESH_subMesh object implementation - + int subMeshId = _impl->GetMeshDS()->ShapeToIndex( myLocSubShape ); subMesh = getSubMesh( subMeshId ); @@ -531,14 +531,8 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShap subMesh, aSubShapeObject, theName ); if ( !aSO->_is_nil()) { // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".GetSubMesh("; - SMESH_Gen_i::AddObject(aStr, aSubShapeObject) += ", \""; - aStr += (char*)theName; - aStr += "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << aSO << " = " << _this() << ".GetSubMesh( " + << aSubShapeObject << ", '" << theName << "' )"; } } } @@ -550,7 +544,7 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShap //============================================================================= /*! - * + * */ //============================================================================= @@ -567,7 +561,7 @@ void SMESH_Mesh_i::RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ) // Remove submesh's SObject SALOMEDS::SObject_var anSO = _gen_i->ObjectToSObject( aStudy, theSubMesh ); if ( !anSO->_is_nil() ) { - long aTag = SMESH_Gen_i::GetRefOnShapeTag(); + long aTag = SMESH_Gen_i::GetRefOnShapeTag(); SALOMEDS::SObject_var anObj, aRef; if ( anSO->FindSubObject( aTag, anObj ) && anObj->ReferencedObject( aRef ) ) aSubShapeObject = GEOM::GEOM_Object::_narrow( aRef->GetObject() ); @@ -575,12 +569,7 @@ void SMESH_Mesh_i::RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ) aStudy->NewBuilder()->RemoveObjectWithChildren( anSO ); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveSubMesh("; - aStr += anSO->GetID(); - aStr += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << _this() << ".RemoveSubMesh( " << anSO << " )"; } } @@ -592,34 +581,23 @@ void SMESH_Mesh_i::RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ) * ElementTypeString */ //============================================================================= +#define CASE2STRING(enum) case SMESH::enum: return "SMESH."#enum; inline TCollection_AsciiString ElementTypeString (SMESH::ElementType theElemType) { - TCollection_AsciiString aStr; switch (theElemType) { - case SMESH::ALL: - aStr = "SMESH.ALL"; - break; - case SMESH::NODE: - aStr = "SMESH.NODE"; - break; - case SMESH::EDGE: - aStr = "SMESH.EDGE"; - break; - case SMESH::FACE: - aStr = "SMESH.FACE"; - break; - case SMESH::VOLUME: - aStr = "SMESH.VOLUME"; - break; - default: - break; + CASE2STRING( ALL ); + CASE2STRING( NODE ); + CASE2STRING( EDGE ); + CASE2STRING( FACE ); + CASE2STRING( VOLUME ); + default:; } - return aStr; + return ""; } //============================================================================= /*! - * + * */ //============================================================================= @@ -637,22 +615,17 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CreateGroup( SMESH::ElementType theElemType aNewGroup, GEOM::GEOM_Object::_nil(), theName); if ( !aSO->_is_nil()) { // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".CreateGroup("; - aStr += ElementTypeString(theElemType) + ", \"" + (char*)theName + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << aSO << " = " << _this() << ".CreateGroup( " + << ElementTypeString(theElemType) << ", '" << theName << "' )"; } } - return aNewGroup._retn(); } //============================================================================= /*! - * + * */ //============================================================================= SMESH::SMESH_GroupOnGeom_ptr SMESH_Mesh_i::CreateGroupFromGEOM (SMESH::ElementType theElemType, @@ -669,17 +642,13 @@ SMESH::SMESH_GroupOnGeom_ptr SMESH_Mesh_i::CreateGroupFromGEOM (SMESH::ElementTy ( createGroup( theElemType, theName, aShape )); if ( _gen_i->CanPublishInStudy( aNewGroup ) ) { SALOMEDS::SObject_var aSO = - _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(), + _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(), aNewGroup, theGeomObj, theName); if ( !aSO->_is_nil()) { // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".CreateGroupFromGEOM("; - aStr += ElementTypeString(theElemType) + ", \"" + (char*)theName + "\", "; - SMESH_Gen_i::AddObject(aStr, theGeomObj) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << aSO << " = " << _this() << ".CreateGroupFromGEOM(" + << ElementTypeString(theElemType) << ", '" << theName << "', " + << theGeomObj << " )"; } } } @@ -689,7 +658,7 @@ SMESH::SMESH_GroupOnGeom_ptr SMESH_Mesh_i::CreateGroupFromGEOM (SMESH::ElementTy //============================================================================= /*! - * + * */ //============================================================================= @@ -710,12 +679,7 @@ void SMESH_Mesh_i::RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup ) if ( !aGroupSO->_is_nil() ) { // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveGroup("; - aStr += aGroupSO->GetID(); - aStr += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << _this() << ".RemoveGroup( " << aGroupSO << " )"; // Remove group's SObject aStudy->NewBuilder()->RemoveObject( aGroupSO ); @@ -729,7 +693,7 @@ void SMESH_Mesh_i::RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup ) //============================================================================= /*! RemoveGroupWithContents * Remove group with its contents - */ + */ //============================================================================= void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup ) throw (SALOME::SALOME_Exception) @@ -741,16 +705,12 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup dynamic_cast( SMESH_Gen_i::GetServant( theGroup ).in() ); if ( !aGroup ) return; - + SMESH::long_array_var anIds = aGroup->GetListOfID(); SMESH::SMESH_MeshEditor_var aMeshEditor = SMESH_Mesh_i::GetMeshEditor(); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveGroupWithContents("; - SMESH_Gen_i::AddObject(aStr, theGroup) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << _this() << ".RemoveGroupWithContents( " << theGroup << " )"; // Remove contents if ( aGroup->GetType() == SMESH::NODE ) @@ -768,12 +728,12 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup //============================================================================= /*! UnionGroups - * New group is created. All mesh elements that are + * New group is created. All mesh elements that are * present in initial groups are added to the new one */ //============================================================================= -SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, +SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1, + SMESH::SMESH_GroupBase_ptr theGroup2, const char* theName ) throw (SALOME::SALOME_Exception) { @@ -815,14 +775,9 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr the _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, aResGrp) += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".UnionGroups("; - SMESH_Gen_i::AddObject(aStr, theGroup1) += ", "; - SMESH_Gen_i::AddObject(aStr, theGroup2) += ", \""; - aStr += TCollection_AsciiString((char*)theName) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << aResGrp << " = " << _this() << ".UnionGroups( " + << theGroup1 << ", " << theGroup2 << ", '" + << theName << "' )"; return aResGrp._retn(); } @@ -831,19 +786,19 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr the return SMESH::SMESH_Group::_nil(); } } - + //============================================================================= /*! IntersectGroups - * New group is created. All mesh elements that are + * New group is created. All mesh elements that are * present in both initial groups are added to the new one. */ //============================================================================= -SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, +SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr theGroup1, + SMESH::SMESH_GroupBase_ptr theGroup2, const char* theName ) throw (SALOME::SALOME_Exception) { - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || + if ( theGroup1->_is_nil() || theGroup2->_is_nil() || theGroup1->GetType() != theGroup2->GetType() ) return SMESH::SMESH_Group::_nil(); @@ -880,30 +835,24 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, aResGrp) += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".IntersectGroups("; - SMESH_Gen_i::AddObject(aStr, theGroup1) += ", "; - SMESH_Gen_i::AddObject(aStr, theGroup2) += ", \""; - aStr += TCollection_AsciiString((char*)theName) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << aResGrp << " = " << _this() << ".IntersectGroups( " + << theGroup1 << ", " << theGroup2 << ", '" << theName << "')"; return aResGrp._retn(); } //============================================================================= /*! CutGroups - * New group is created. All mesh elements that are present in - * main group but do not present in tool group are added to the new one + * New group is created. All mesh elements that are present in + * main group but do not present in tool group are added to the new one */ //============================================================================= -SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, +SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGroup1, + SMESH::SMESH_GroupBase_ptr theGroup2, const char* theName ) throw (SALOME::SALOME_Exception) { - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || + if ( theGroup1->_is_nil() || theGroup2->_is_nil() || theGroup1->GetType() != theGroup2->GetType() ) return SMESH::SMESH_Group::_nil(); @@ -930,7 +879,7 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr aResIds->length( aSeq.Length() ); for ( int resI = 0, resN = aSeq.Length(); resI < resN; resI++ ) - aResIds[ resI ] = aSeq( resI + 1 ); + aResIds[ resI ] = aSeq( resI + 1 ); aResGrp->Add( aResIds ); @@ -940,21 +889,16 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, aResGrp) += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".CutGroups("; - SMESH_Gen_i::AddObject(aStr, theGroup1) += ", "; - SMESH_Gen_i::AddObject(aStr, theGroup2) += ", \""; - aStr += TCollection_AsciiString((char*)theName) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << aResGrp << " = " << _this() << ".CutGroups( " + << theGroup1 << ", " << theGroup2 << ", '" + << theName << "' )"; return aResGrp._retn(); } //============================================================================= /*! - * + * */ //============================================================================= @@ -977,12 +921,12 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::createSubMesh( GEOM::GEOM_Object_ptr theS int nextId = _gen_i->RegisterObject( subMesh ); if(MYDEBUG) MESSAGE( "Add submesh to map with id = "<< nextId); - return subMesh._retn(); + return subMesh._retn(); } //======================================================================= //function : getSubMesh -//purpose : +//purpose : //======================================================================= SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::getSubMesh(int shapeID) @@ -997,7 +941,7 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::getSubMesh(int shapeID) //============================================================================= /*! - * + * */ //============================================================================= @@ -1028,7 +972,7 @@ void SMESH_Mesh_i::removeSubMesh (SMESH::SMESH_subMesh_ptr theSubMesh, //============================================================================= /*! - * + * */ //============================================================================= @@ -1064,13 +1008,13 @@ SMESH::SMESH_GroupBase_ptr SMESH_Mesh_i::createGroup (SMESH::ElementType theElem /*! * SMESH_Mesh_i::removeGroup * - * Should be called by ~SMESH_Group_i() + * Should be called by ~SMESH_Group_i() */ //============================================================================= void SMESH_Mesh_i::removeGroup( const int theId ) { - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::removeGroup()" ); + if(MYDEBUG) MESSAGE("SMESH_Mesh_i::removeGroup()" ); if ( _mapGroups.find( theId ) != _mapGroups.end() ) { _mapGroups.erase( theId ); _impl->RemoveGroup( theId ); @@ -1080,7 +1024,7 @@ void SMESH_Mesh_i::removeGroup( const int theId ) //============================================================================= /*! - * + * */ //============================================================================= @@ -1088,7 +1032,7 @@ SMESH::log_array * SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet) throw(SALOME::SALOME_Exception) { if(MYDEBUG) MESSAGE("SMESH_Mesh_i::GetLog"); - + SMESH::log_array_var aLog; try{ list < SMESHDS_Command * >logDS = _impl->GetLog(); @@ -1141,7 +1085,7 @@ throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= @@ -1153,7 +1097,7 @@ void SMESH_Mesh_i::ClearLog() throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= @@ -1165,7 +1109,7 @@ CORBA::Long SMESH_Mesh_i::GetId()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= @@ -1176,7 +1120,7 @@ CORBA::Long SMESH_Mesh_i::GetStudyId()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= @@ -1188,7 +1132,7 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl) //============================================================================= /*! - * + * */ //============================================================================= @@ -1201,21 +1145,19 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl) //============================================================================= /*! - * + * */ //============================================================================= SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor() { - // Update Python script - TCollection_AsciiString aStr ("mesh_editor = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".GetMeshEditor()"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - // Create MeshEditor SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl ); SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this(); + + // Update Python script + TPythonDump() << aMeshEditor << " = " << _this() << ".GetMeshEditor()"; + return aMesh._retn(); } @@ -1225,33 +1167,73 @@ SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor() */ //============================================================================= -void SMESH_Mesh_i::ExportToMED (const char* file, - CORBA::Boolean auto_groups, +static void PrepareForWriting (const char* file) +{ + TCollection_AsciiString aFullName ((char*)file); + OSD_Path aPath (aFullName); + OSD_File aFile (aPath); + if (aFile.Exists()) { + // existing filesystem node + if (aFile.KindOfFile() == OSD_FILE) { + if (aFile.IsWriteable()) { + aFile.Reset(); + aFile.Remove(); + if (aFile.Failed()) { + TCollection_AsciiString msg ("File "); + msg += aFullName + " cannot be replaced."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } + } else { + TCollection_AsciiString msg ("File "); + msg += aFullName + " cannot be overwritten."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } + } else { + TCollection_AsciiString msg ("Location "); + msg += aFullName + " is not a file."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } + } else { + // nonexisting file + TCollection_AsciiString aDirName = aPath.TrekValue(aPath.TrekLength()); + aPath.UpTrek(); + aPath.SetName(aDirName); + aPath.SetExtension(""); + OSD_Directory aDir (aPath); + TCollection_AsciiString aFullDirName; + aPath.SystemName(aFullDirName); + if (aDir.Exists()) { + aFile.Reset(); + aFile.Build(OSD_WriteOnly, OSD_Protection()); + if (aFile.Failed()) { + TCollection_AsciiString msg ("You cannot write to directory "); + msg += aFullDirName + "."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } else { + aFile.Close(); + aFile.Remove(); + } + } else { + TCollection_AsciiString msg ("Directory "); + msg += aFullDirName + " does not exist."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } + } +} + +void SMESH_Mesh_i::ExportToMED (const char* file, + CORBA::Boolean auto_groups, SMESH::MED_VERSION theVersion) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportToMED(\""; - aStr += TCollection_AsciiString((char*)file) + "\", "; - aStr += TCollection_AsciiString((int)auto_groups) + ", "; - switch (theVersion) { - case SMESH::MED_V2_1: - aStr += "SMESH.MED_V2_1)"; - break; - case SMESH::MED_V2_2: - aStr += "SMESH.MED_V2_2)"; - break; - default: - aStr += TCollection_AsciiString(theVersion) + ")"; - break; - } - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << _this() << ".ExportToMED( '" + << file << "', " << auto_groups << ", " << theVersion << " )"; // Perform Export + PrepareForWriting(file); char* aMeshName = "Mesh"; SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); if ( !aStudy->_is_nil() ) { @@ -1261,9 +1243,9 @@ void SMESH_Mesh_i::ExportToMED (const char* file, //SCRUTE(file); //SCRUTE(aMeshName); //SCRUTE(aMeshSO->GetID()); - - // asv : 27.10.04 : fix of 6903: check for StudyLocked before adding attributes - if ( !aStudy->GetProperties()->IsLocked() ) + + // asv : 27.10.04 : fix of 6903: check for StudyLocked before adding attributes + if ( !aStudy->GetProperties()->IsLocked() ) { SALOMEDS::GenericAttribute_var anAttr; SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); @@ -1283,7 +1265,7 @@ void SMESH_Mesh_i::ExportToMED (const char* file, _impl->ExportMED( file, aMeshName, auto_groups, theVersion ); } -void SMESH_Mesh_i::ExportMED (const char* file, +void SMESH_Mesh_i::ExportMED (const char* file, CORBA::Boolean auto_groups) throw(SALOME::SALOME_Exception) { @@ -1296,13 +1278,10 @@ void SMESH_Mesh_i::ExportDAT (const char *file) Unexpect aCatch(SALOME_SalomeException); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportDAT(\""; - aStr += TCollection_AsciiString((char*)file) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << _this() << ".ExportDAT( '" << file << "' )"; // Perform Export + PrepareForWriting(file); _impl->ExportDAT(file); } @@ -1312,13 +1291,10 @@ void SMESH_Mesh_i::ExportUNV (const char *file) Unexpect aCatch(SALOME_SalomeException); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportUNV(\""; - aStr += TCollection_AsciiString((char*)file) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << _this() << ".ExportUNV( '" << file << "' )"; // Perform Export + PrepareForWriting(file); _impl->ExportUNV(file); } @@ -1328,20 +1304,16 @@ void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii) Unexpect aCatch(SALOME_SalomeException); // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportToMED(\""; - aStr += TCollection_AsciiString((char*)file) + "\", "; - aStr += TCollection_AsciiString((int)isascii) + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); + TPythonDump() << _this() << ".ExportSTL( '" << file << "', " << isascii << " )"; // Perform Export + PrepareForWriting(file); _impl->ExportSTL(file, isascii); } //============================================================================= /*! - * + * */ //============================================================================= @@ -1355,7 +1327,7 @@ SALOME_MED::MESH_ptr SMESH_Mesh_i::GetMEDMesh()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= CORBA::Long SMESH_Mesh_i::NbNodes()throw(SALOME::SALOME_Exception) @@ -1366,7 +1338,7 @@ CORBA::Long SMESH_Mesh_i::NbNodes()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= CORBA::Long SMESH_Mesh_i::NbElements()throw (SALOME::SALOME_Exception) @@ -1374,10 +1346,10 @@ CORBA::Long SMESH_Mesh_i::NbElements()throw (SALOME::SALOME_Exception) Unexpect aCatch(SALOME_SalomeException); return NbEdges() + NbFaces() + NbVolumes(); } - + //============================================================================= /*! - * + * */ //============================================================================= CORBA::Long SMESH_Mesh_i::NbEdges()throw(SALOME::SALOME_Exception) @@ -1388,7 +1360,7 @@ CORBA::Long SMESH_Mesh_i::NbEdges()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= CORBA::Long SMESH_Mesh_i::NbFaces()throw(SALOME::SALOME_Exception) @@ -1417,7 +1389,7 @@ CORBA::Long SMESH_Mesh_i::NbPolygons()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= CORBA::Long SMESH_Mesh_i::NbVolumes()throw(SALOME::SALOME_Exception) @@ -1458,7 +1430,7 @@ CORBA::Long SMESH_Mesh_i::NbPolyhedrons()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= CORBA::Long SMESH_Mesh_i::NbSubMesh()throw(SALOME::SALOME_Exception) @@ -1469,7 +1441,7 @@ CORBA::Long SMESH_Mesh_i::NbSubMesh()throw(SALOME::SALOME_Exception) //============================================================================= /*! - * + * */ //============================================================================= char* SMESH_Mesh_i::Dump() @@ -1481,7 +1453,7 @@ char* SMESH_Mesh_i::Dump() //============================================================================= /*! - * + * */ //============================================================================= SMESH::long_array* SMESH_Mesh_i::GetIDs() @@ -1492,19 +1464,19 @@ SMESH::long_array* SMESH_Mesh_i::GetIDs() int aMaxId = aSMESHDS_Mesh->MaxElementID(); aResult->length(aMaxId - aMinId + 1); - + for (int i = 0, id = aMinId; id <= aMaxId; id++ ) aResult[i++] = id; - + return aResult._retn(); } //============================================================================= /*! - * + * */ //============================================================================= - + SMESH::long_array* SMESH_Mesh_i::GetElementsId() throw (SALOME::SALOME_Exception) { @@ -1528,7 +1500,7 @@ SMESH::long_array* SMESH_Mesh_i::GetElementsId() //============================================================================= /*! - * + * */ //============================================================================= @@ -1569,10 +1541,10 @@ SMESH::long_array* SMESH_Mesh_i::GetElementsByType( SMESH::ElementType theElemTy //============================================================================= /*! - * + * */ //============================================================================= - + SMESH::long_array* SMESH_Mesh_i::GetNodesId() throw (SALOME::SALOME_Exception) { @@ -1593,3 +1565,14 @@ SMESH::long_array* SMESH_Mesh_i::GetNodesId() return aResult._retn(); } +//============================================================================= +/*! + * + */ +//============================================================================= + +SMESH::ElementType SMESH_Mesh_i::GetElementType( const CORBA::Long id, const bool iselem ) + throw (SALOME::SALOME_Exception) +{ + return ( SMESH::ElementType )_impl->GetElementType( id, iselem ); +}