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=22bde5e382bbfc837bd79dfa91f64ad505f019cf;hp=0fa06e0406a730b5d69f0abafefbbff655b074ea;hb=1bf6ddbe2fe6f21e8c1ca914be6e423e402894f1;hpb=83f19818fce494a77ddf10b70493abdd9f73e4e0 diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 0fa06e040..22bde5e38 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -76,7 +76,7 @@ SMESH_Mesh_i::SMESH_Mesh_i( PortableServer::POA_ptr thePOA, CORBA::Long studyId ) : SALOME::GenericObj_i( thePOA ) { - INFOS("SMESH_Mesh_i; this = "<::iterator it; for ( it = _mapGroups.begin(); it != _mapGroups.end(); it++ ) { SMESH_GroupBase_i* aGroup = dynamic_cast( SMESH_Gen_i::GetServant( it->second ).in() ); @@ -337,6 +337,14 @@ 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); + return ConvertHypothesisStatus(status); } @@ -401,6 +409,14 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Object_ptr aS _gen_i->RemoveHypothesisFromShape(_gen_i->GetCurrentStudy(), _this(), 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); + return ConvertHypothesisStatus(status); } @@ -509,9 +525,22 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShap if ( subMesh->_is_nil() ) subMesh = createSubMesh( aSubShapeObject ); - if ( _gen_i->CanPublishInStudy( subMesh )) - _gen_i->PublishSubMesh (_gen_i->GetCurrentStudy(), aMesh, - subMesh, aSubShapeObject, theName ); + if ( _gen_i->CanPublishInStudy( subMesh )) { + SALOMEDS::SObject_var aSO = + _gen_i->PublishSubMesh(_gen_i->GetCurrentStudy(), aMesh, + 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); + } + } } catch(SALOME_Exception & S_ex) { THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); @@ -544,12 +573,49 @@ void SMESH_Mesh_i::RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ) aSubShapeObject = GEOM::GEOM_Object::_narrow( aRef->GetObject() ); 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); } } removeSubMesh( theSubMesh, aSubShapeObject.in() ); } +//============================================================================= +/*! + * ElementTypeString + */ +//============================================================================= +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; + } + return aStr; +} //============================================================================= /*! @@ -565,8 +631,20 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CreateGroup( SMESH::ElementType theElemType SMESH::SMESH_Group_var aNewGroup = SMESH::SMESH_Group::_narrow( createGroup( theElemType, theName )); - _gen_i->PublishGroup( _gen_i->GetCurrentStudy(), _this(), - aNewGroup, GEOM::GEOM_Object::_nil(), theName); + if ( _gen_i->CanPublishInStudy( aNewGroup ) ) { + SALOMEDS::SObject_var aSO = + _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(), + 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); + } + } return aNewGroup._retn(); } @@ -577,9 +655,9 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CreateGroup( SMESH::ElementType theElemType * */ //============================================================================= -SMESH::SMESH_GroupOnGeom_ptr SMESH_Mesh_i::CreateGroupFromGEOM( SMESH::ElementType theElemType, - const char* theName, - GEOM::GEOM_Object_ptr theGeomObj) +SMESH::SMESH_GroupOnGeom_ptr SMESH_Mesh_i::CreateGroupFromGEOM (SMESH::ElementType theElemType, + const char* theName, + GEOM::GEOM_Object_ptr theGeomObj) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); @@ -589,13 +667,26 @@ SMESH::SMESH_GroupOnGeom_ptr SMESH_Mesh_i::CreateGroupFromGEOM( SMESH::ElementTy if ( !aShape.IsNull() ) { aNewGroup = SMESH::SMESH_GroupOnGeom::_narrow ( createGroup( theElemType, theName, aShape )); - if ( _gen_i->CanPublishInStudy( aNewGroup ) ) - _gen_i->PublishGroup( _gen_i->GetCurrentStudy(), _this(), - aNewGroup, theGeomObj, theName ); + if ( _gen_i->CanPublishInStudy( aNewGroup ) ) { + SALOMEDS::SObject_var aSO = + _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); + } + } } return aNewGroup._retn(); } + //============================================================================= /*! * @@ -615,10 +706,20 @@ void SMESH_Mesh_i::RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup ) SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); if ( !aStudy->_is_nil() ) { - // Remove group's SObject SALOMEDS::SObject_var aGroupSO = _gen_i->ObjectToSObject( aStudy, theGroup ); - if ( !aGroupSO->_is_nil() ) + + 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); + + // Remove group's SObject aStudy->NewBuilder()->RemoveObject( aGroupSO ); + } } // Remove the group from SMESH data structures @@ -643,13 +744,26 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup 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); + + // Remove contents if ( aGroup->GetType() == SMESH::NODE ) aMeshEditor->RemoveNodes( anIds ); else aMeshEditor->RemoveElements( anIds ); - + + // Remove group RemoveGroup( theGroup ); + + // Clear python lines, created by RemoveNodes/Elements() and RemoveGroup() + _gen_i->RemoveLastFromPythonScript(_gen_i->GetCurrentStudy()->StudyId()); + _gen_i->RemoveLastFromPythonScript(_gen_i->GetCurrentStudy()->StudyId()); } //============================================================================= @@ -665,13 +779,12 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr the { try { - SMESH::SMESH_Group_var aResGrp; - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || theGroup1->GetType() != theGroup2->GetType() ) return SMESH::SMESH_Group::_nil(); - aResGrp = CreateGroup( theGroup1->GetType(), theName ); + // Create Union + SMESH::SMESH_Group_var aResGrp = CreateGroup( theGroup1->GetType(), theName ); if ( aResGrp->_is_nil() ) return SMESH::SMESH_Group::_nil(); @@ -696,6 +809,21 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr the aResGrp->Add( aResIds ); + // Clear python lines, created by CreateGroup() and Add() + SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); + _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); + _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); + return aResGrp._retn(); } catch( ... ) @@ -715,21 +843,20 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr const char* theName ) throw (SALOME::SALOME_Exception) { - SMESH::SMESH_Group_var aResGrp; - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || theGroup1->GetType() != theGroup2->GetType() ) - return aResGrp; - - aResGrp = CreateGroup( theGroup1->GetType(), theName ); + return SMESH::SMESH_Group::_nil(); + + // Create Intersection + SMESH::SMESH_Group_var aResGrp = CreateGroup( theGroup1->GetType(), theName ); if ( aResGrp->_is_nil() ) return aResGrp; - + SMESH::long_array_var anIds1 = theGroup1->GetListOfID(); SMESH::long_array_var anIds2 = theGroup2->GetListOfID(); - + TColStd_MapOfInteger aMap1; - + for ( int i1 = 0, n1 = anIds1->length(); i1 < n1; i1++ ) aMap1.Add( anIds1[ i1 ] ); @@ -738,15 +865,30 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ ) if ( aMap1.Contains( anIds2[ i2 ] ) ) aSeq.Append( anIds2[ i2 ] ); - + SMESH::long_array_var aResIds = new SMESH::long_array; aResIds->length( aSeq.Length() ); - + for ( int resI = 0, resN = aSeq.Length(); resI < resN; resI++ ) aResIds[ resI ] = aSeq( resI + 1 ); - + aResGrp->Add( aResIds ); - + + // Clear python lines, created by CreateGroup() and Add() + SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); + _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); + _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); + return aResGrp._retn(); } @@ -761,21 +903,20 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr const char* theName ) throw (SALOME::SALOME_Exception) { - SMESH::SMESH_Group_var aResGrp; - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || theGroup1->GetType() != theGroup2->GetType() ) - return aResGrp; - - aResGrp = CreateGroup( theGroup1->GetType(), theName ); + return SMESH::SMESH_Group::_nil(); + + // Perform Cutting + SMESH::SMESH_Group_var aResGrp = CreateGroup( theGroup1->GetType(), theName ); if ( aResGrp->_is_nil() ) return aResGrp; - + SMESH::long_array_var anIds1 = theGroup1->GetListOfID(); SMESH::long_array_var anIds2 = theGroup2->GetListOfID(); - + TColStd_MapOfInteger aMap2; - + for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ ) aMap2.Add( anIds2[ i2 ] ); @@ -790,9 +931,24 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr for ( int resI = 0, resN = aSeq.Length(); resI < resN; resI++ ) aResIds[ resI ] = aSeq( resI + 1 ); - + aResGrp->Add( aResIds ); - + + // Clear python lines, created by CreateGroup() and Add() + SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); + _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); + _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); + return aResGrp._retn(); } @@ -1051,24 +1207,51 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl) SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor() { - SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl ); - SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this(); - return aMesh._retn(); + // 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(); + return aMesh._retn(); } //============================================================================= /*! - * + * Export in different formats */ //============================================================================= -void SMESH_Mesh_i::ExportToMED( const char* file, +void SMESH_Mesh_i::ExportToMED (const char* file, CORBA::Boolean auto_groups, - SMESH::MED_VERSION theVersion ) + 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); + + // Perform Export char* aMeshName = "Mesh"; SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); if ( !aStudy->_is_nil() ) { @@ -1100,27 +1283,59 @@ 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) { ExportToMED(file,auto_groups,SMESH::MED_V2_1); } -void SMESH_Mesh_i::ExportDAT(const char *file) throw(SALOME::SALOME_Exception) +void SMESH_Mesh_i::ExportDAT (const char *file) + throw(SALOME::SALOME_Exception) { 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); + + // Perform Export _impl->ExportDAT(file); } -void SMESH_Mesh_i::ExportUNV(const char *file) throw(SALOME::SALOME_Exception) + +void SMESH_Mesh_i::ExportUNV (const char *file) + throw(SALOME::SALOME_Exception) { 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); + + // Perform Export _impl->ExportUNV(file); } -void SMESH_Mesh_i::ExportSTL(const char *file, const bool isascii) throw(SALOME::SALOME_Exception) +void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii) + 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)isascii) + ")"; + + SMESH_Gen_i::AddToCurrentPyScript(aStr); + + // Perform Export _impl->ExportSTL(file, isascii); } @@ -1194,6 +1409,12 @@ CORBA::Long SMESH_Mesh_i::NbQuadrangles()throw(SALOME::SALOME_Exception) return _impl->NbQuadrangles(); } +CORBA::Long SMESH_Mesh_i::NbPolygons()throw(SALOME::SALOME_Exception) +{ + Unexpect aCatch(SALOME_SalomeException); + return _impl->NbPolygons(); +} + //============================================================================= /*! * @@ -1229,6 +1450,12 @@ CORBA::Long SMESH_Mesh_i::NbPrisms()throw(SALOME::SALOME_Exception) return _impl->NbPrisms(); } +CORBA::Long SMESH_Mesh_i::NbPolyhedrons()throw(SALOME::SALOME_Exception) +{ + Unexpect aCatch(SALOME_SalomeException); + return _impl->NbPolyhedrons(); +} + //============================================================================= /*! * @@ -1366,3 +1593,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 ); +}