_isAutoColor = false;
_isModified = false;
_shapeDiagonal = 0.0;
+ _rmGroupCallUp = 0;
_myMeshDS->ShapeToMesh( PseudoShape() );
}
delete aGroup;
}
_mapGroup.clear();
+
+ if ( _rmGroupCallUp) delete _rmGroupCallUp;
+ _rmGroupCallUp = 0;
}
//=============================================================================
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;
}
}
}
- HasModificationsToDiscard(); // to reset _isModified flag if mesh become empty
+ HasModificationsToDiscard(); // to reset _isModified flag if mesh becomes empty
}
//=============================================================================
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;
+}
//=============================================================================
/*!
*/
//=============================================================================
-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;
}
//=======================================================================
void ClearLog() throw(SALOME_Exception);
- int GetId() { return _id; }
+ int GetId() const { return _id; }
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)
throw(SALOME_Exception);
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();
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
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&) {};