: SALOME::GenericObj_i( thePOA )
{
INFOS("SMESH_Mesh_i");
+ _impl = NULL;
_gen_i = gen_i;
_id = myIdGenerator++;
_studyId = studyId;
list<int> aGroupIds = _impl->GetGroupIds();
for ( list<int>::iterator it = aGroupIds.begin(); it != aGroupIds.end(); it++ ) {
SMESH_Group_i* aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, *it );
+
+ // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
+ SMESH_Gen_i::GetPOA()->activate_object( aGroupImpl );
+ aGroupImpl->Register();
+ // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
+
SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupImpl->_this() );
_mapGroups[*it] = SMESH::SMESH_Group::_duplicate( aGroup );
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);
}
_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);
}
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);
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;
+}
//=============================================================================
/*!
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();
}
*
*/
//=============================================================================
-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);
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();
}
+
//=============================================================================
/*!
*
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
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());
}
//=============================================================================
{
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();
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( ... )
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 ] );
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();
}
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 ] );
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();
}
aGroupImpl = new SMESH_GroupOnGeom_i( SMESH_Gen_i::GetPOA(), this, anId );
else
aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, anId );
+
+ // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
+ SMESH_Gen_i::GetPOA()->activate_object( aGroupImpl );
+ aGroupImpl->Register();
+ // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
+
aGroup = SMESH::SMESH_GroupBase::_narrow( aGroupImpl->_this() );
_mapGroups[anId] = SMESH::SMESH_GroupBase::_duplicate( aGroup );
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() ) {
_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);
}
return _impl->NbQuadrangles();
}
+CORBA::Long SMESH_Mesh_i::NbPolygons()throw(SALOME::SALOME_Exception)
+{
+ Unexpect aCatch(SALOME_SalomeException);
+ return _impl->NbPolygons();
+}
+
//=============================================================================
/*!
*
return _impl->NbPrisms();
}
+CORBA::Long SMESH_Mesh_i::NbPolyhedrons()throw(SALOME::SALOME_Exception)
+{
+ Unexpect aCatch(SALOME_SalomeException);
+ return _impl->NbPolyhedrons();
+}
+
//=============================================================================
/*!
*
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 );
+}