mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-02-22 17:15:37 +05:00
0020918: EDF 1447 SMESH: Mesh common borders
Add means to notify CORBA API implementation level on group removal caused by hypotheses events (maybe in other mesh) - void RemoveGroup (const int theGroupID); + bool RemoveGroup (const int theGroupID); + struct TRmGroupCallUp + { + virtual void RemoveGroup (const int theGroupID)=0; + virtual ~TRmGroupCallUp() {} + }; + void SetRemoveGroupCallUp( TRmGroupCallUp * upCaller ); + +
This commit is contained in:
parent
232594508e
commit
e5dab7ea91
@ -101,6 +101,7 @@ SMESH_Mesh::SMESH_Mesh(int theLocalId,
|
||||
_isAutoColor = false;
|
||||
_isModified = false;
|
||||
_shapeDiagonal = 0.0;
|
||||
_rmGroupCallUp = 0;
|
||||
_myMeshDS->ShapeToMesh( PseudoShape() );
|
||||
}
|
||||
|
||||
@ -126,6 +127,9 @@ SMESH_Mesh::~SMESH_Mesh()
|
||||
delete aGroup;
|
||||
}
|
||||
_mapGroup.clear();
|
||||
|
||||
if ( _rmGroupCallUp) delete _rmGroupCallUp;
|
||||
_rmGroupCallUp = 0;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
@ -267,6 +271,7 @@ void SMESH_Mesh::Clear()
|
||||
while ( smIt->more() ) {
|
||||
sm = smIt->next();
|
||||
sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
|
||||
sm->ComputeStateEngine( SMESH_subMesh::CLEAN ); // for event listeners (issue 0020918)
|
||||
}
|
||||
}
|
||||
_isModified = false;
|
||||
@ -973,7 +978,7 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h
|
||||
}
|
||||
}
|
||||
}
|
||||
HasModificationsToDiscard(); // to reset _isModified flag if mesh become empty
|
||||
HasModificationsToDiscard(); // to reset _isModified flag if mesh becomes empty
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
@ -1413,6 +1418,18 @@ list<int> SMESH_Mesh::GetGroupIds() const
|
||||
return anIds;
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Set a caller of RemoveGroup() at level of CORBA API implementation.
|
||||
* The set upCaller will be deleted by SMESH_Mesh
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESH_Mesh::SetRemoveGroupCallUp( TRmGroupCallUp* upCaller )
|
||||
{
|
||||
if ( _rmGroupCallUp ) delete _rmGroupCallUp;
|
||||
_rmGroupCallUp = upCaller;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
@ -1420,13 +1437,16 @@ list<int> SMESH_Mesh::GetGroupIds() const
|
||||
*/
|
||||
//=============================================================================
|
||||
|
||||
void SMESH_Mesh::RemoveGroup (const int theGroupID)
|
||||
bool SMESH_Mesh::RemoveGroup (const int theGroupID)
|
||||
{
|
||||
if (_mapGroup.find(theGroupID) == _mapGroup.end())
|
||||
return;
|
||||
return false;
|
||||
GetMeshDS()->RemoveGroup( _mapGroup[theGroupID]->GetGroupDS() );
|
||||
delete _mapGroup[theGroupID];
|
||||
_mapGroup.erase (theGroupID);
|
||||
if (_rmGroupCallUp)
|
||||
_rmGroupCallUp->RemoveGroup( theGroupID );
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@ -141,10 +141,12 @@ public:
|
||||
|
||||
void ClearLog() throw(SALOME_Exception);
|
||||
|
||||
int GetId() { return _id; }
|
||||
int GetId() const { return _id; }
|
||||
|
||||
SMESHDS_Mesh * GetMeshDS() { return _myMeshDS; }
|
||||
|
||||
const SMESHDS_Mesh * GetMeshDS() const { return _myMeshDS; }
|
||||
|
||||
SMESH_Gen *GetGen() { return _gen; }
|
||||
|
||||
SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
|
||||
@ -266,10 +268,18 @@ public:
|
||||
|
||||
SMESH_Group* GetGroup (const int theGroupID);
|
||||
|
||||
void RemoveGroup (const int theGroupID);
|
||||
bool RemoveGroup (const int theGroupID);
|
||||
|
||||
SMESH_Group* ConvertToStandalone ( int theGroupID );
|
||||
|
||||
struct TRmGroupCallUp
|
||||
{
|
||||
virtual void RemoveGroup (const int theGroupID)=0;
|
||||
virtual ~TRmGroupCallUp() {}
|
||||
};
|
||||
void SetRemoveGroupCallUp( TRmGroupCallUp * upCaller );
|
||||
|
||||
|
||||
SMDSAbs_ElementType GetElementType( const int id, const bool iselem );
|
||||
|
||||
void ClearMeshOrder();
|
||||
@ -303,9 +313,9 @@ protected:
|
||||
std::list <SMESH_subMesh*> _subMeshesUsingHypothesisList;
|
||||
SMESHDS_Document * _myDocument;
|
||||
SMESHDS_Mesh * _myMeshDS;
|
||||
SMESH_Gen * _gen;
|
||||
std::map <int, SMESH_subMesh*> _mapSubMesh;
|
||||
std::map <int, SMESH_Group*> _mapGroup;
|
||||
SMESH_Gen * _gen;
|
||||
|
||||
bool _isAutoColor;
|
||||
bool _isModified; //!< modified since last total re-compute, issue 0020693
|
||||
@ -316,6 +326,11 @@ protected:
|
||||
|
||||
TListOfListOfInt _mySubMeshOrder;
|
||||
|
||||
// Struct calling RemoveGroup at CORBA API implementation level, used
|
||||
// to make an upper level be consistent with a lower one when group removal
|
||||
// is invoked by hyp modification
|
||||
TRmGroupCallUp* _rmGroupCallUp;
|
||||
|
||||
protected:
|
||||
SMESH_Mesh() {};
|
||||
SMESH_Mesh(const SMESH_Mesh&) {};
|
||||
|
Loading…
Reference in New Issue
Block a user