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:
eap 2010-11-12 14:39:34 +00:00
parent 232594508e
commit e5dab7ea91
2 changed files with 42 additions and 7 deletions

View File

@ -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;
} }
//======================================================================= //=======================================================================

View File

@ -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&) {};