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;
|
_isAutoColor = false;
|
||||||
_isModified = false;
|
_isModified = false;
|
||||||
_shapeDiagonal = 0.0;
|
_shapeDiagonal = 0.0;
|
||||||
|
_rmGroupCallUp = 0;
|
||||||
_myMeshDS->ShapeToMesh( PseudoShape() );
|
_myMeshDS->ShapeToMesh( PseudoShape() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,6 +127,9 @@ SMESH_Mesh::~SMESH_Mesh()
|
|||||||
delete aGroup;
|
delete aGroup;
|
||||||
}
|
}
|
||||||
_mapGroup.clear();
|
_mapGroup.clear();
|
||||||
|
|
||||||
|
if ( _rmGroupCallUp) delete _rmGroupCallUp;
|
||||||
|
_rmGroupCallUp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -267,6 +271,7 @@ void SMESH_Mesh::Clear()
|
|||||||
while ( smIt->more() ) {
|
while ( smIt->more() ) {
|
||||||
sm = smIt->next();
|
sm = smIt->next();
|
||||||
sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
|
sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
|
||||||
|
sm->ComputeStateEngine( SMESH_subMesh::CLEAN ); // for event listeners (issue 0020918)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_isModified = false;
|
_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;
|
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())
|
if (_mapGroup.find(theGroupID) == _mapGroup.end())
|
||||||
return;
|
return false;
|
||||||
GetMeshDS()->RemoveGroup( _mapGroup[theGroupID]->GetGroupDS() );
|
GetMeshDS()->RemoveGroup( _mapGroup[theGroupID]->GetGroupDS() );
|
||||||
delete _mapGroup[theGroupID];
|
delete _mapGroup[theGroupID];
|
||||||
_mapGroup.erase (theGroupID);
|
_mapGroup.erase (theGroupID);
|
||||||
|
if (_rmGroupCallUp)
|
||||||
|
_rmGroupCallUp->RemoveGroup( theGroupID );
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@ -141,12 +141,14 @@ public:
|
|||||||
|
|
||||||
void ClearLog() throw(SALOME_Exception);
|
void ClearLog() throw(SALOME_Exception);
|
||||||
|
|
||||||
int GetId() { return _id; }
|
int GetId() const { return _id; }
|
||||||
|
|
||||||
SMESHDS_Mesh * GetMeshDS() { return _myMeshDS; }
|
SMESHDS_Mesh * GetMeshDS() { return _myMeshDS; }
|
||||||
|
|
||||||
SMESH_Gen *GetGen() { return _gen; }
|
const SMESHDS_Mesh * GetMeshDS() const { return _myMeshDS; }
|
||||||
|
|
||||||
|
SMESH_Gen *GetGen() { return _gen; }
|
||||||
|
|
||||||
SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
|
SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
|
||||||
throw(SALOME_Exception);
|
throw(SALOME_Exception);
|
||||||
|
|
||||||
@ -266,10 +268,18 @@ public:
|
|||||||
|
|
||||||
SMESH_Group* GetGroup (const int theGroupID);
|
SMESH_Group* GetGroup (const int theGroupID);
|
||||||
|
|
||||||
void RemoveGroup (const int theGroupID);
|
bool RemoveGroup (const int theGroupID);
|
||||||
|
|
||||||
SMESH_Group* ConvertToStandalone ( 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 );
|
SMDSAbs_ElementType GetElementType( const int id, const bool iselem );
|
||||||
|
|
||||||
void ClearMeshOrder();
|
void ClearMeshOrder();
|
||||||
@ -303,9 +313,9 @@ protected:
|
|||||||
std::list <SMESH_subMesh*> _subMeshesUsingHypothesisList;
|
std::list <SMESH_subMesh*> _subMeshesUsingHypothesisList;
|
||||||
SMESHDS_Document * _myDocument;
|
SMESHDS_Document * _myDocument;
|
||||||
SMESHDS_Mesh * _myMeshDS;
|
SMESHDS_Mesh * _myMeshDS;
|
||||||
|
SMESH_Gen * _gen;
|
||||||
std::map <int, SMESH_subMesh*> _mapSubMesh;
|
std::map <int, SMESH_subMesh*> _mapSubMesh;
|
||||||
std::map <int, SMESH_Group*> _mapGroup;
|
std::map <int, SMESH_Group*> _mapGroup;
|
||||||
SMESH_Gen * _gen;
|
|
||||||
|
|
||||||
bool _isAutoColor;
|
bool _isAutoColor;
|
||||||
bool _isModified; //!< modified since last total re-compute, issue 0020693
|
bool _isModified; //!< modified since last total re-compute, issue 0020693
|
||||||
@ -316,6 +326,11 @@ protected:
|
|||||||
|
|
||||||
TListOfListOfInt _mySubMeshOrder;
|
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:
|
protected:
|
||||||
SMESH_Mesh() {};
|
SMESH_Mesh() {};
|
||||||
SMESH_Mesh(const SMESH_Mesh&) {};
|
SMESH_Mesh(const SMESH_Mesh&) {};
|
||||||
|
Loading…
Reference in New Issue
Block a user