X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH%2FSMESH_subMesh.hxx;h=8251c6b940a3918ab772e171eb675237c9e2e9d4;hb=3f8c64cc43fe7db2df20bdb83159761b6e5ddb51;hp=f72e4f65b32c09951c1d1d5bd32836b87f69d96f;hpb=bb2c60c2b654843ed9727afde458334b108a26f4;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx index f72e4f65b..8251c6b94 100644 --- a/src/SMESH/SMESH_subMesh.hxx +++ b/src/SMESH/SMESH_subMesh.hxx @@ -31,6 +31,7 @@ #include "SMESHDS_Mesh.hxx" #include "SMESHDS_SubMesh.hxx" +#include "SMESH_Hypothesis.hxx" #include "Utils_SALOME_Exception.hxx" #include #include @@ -42,90 +43,139 @@ class SMESH_Mesh; class SMESH_Hypothesis; +class SMESH_Algo; +class SMESH_Gen; class SMESH_subMesh { - public: - SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS, + public: + SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS, const TopoDS_Shape & aSubShape); - virtual ~ SMESH_subMesh(); + virtual ~ SMESH_subMesh(); - int GetId(); + int GetId() const; -// bool Contains(const TopoDS_Shape & aSubShape) -// throw (SALOME_Exception); + // bool Contains(const TopoDS_Shape & aSubShape) + // throw (SALOME_Exception); - SMESHDS_SubMesh * GetSubMeshDS() throw(SALOME_Exception); + SMESH_Mesh* GetFather() { return _father; } + + SMESHDS_SubMesh * GetSubMeshDS(); - SMESH_subMesh *GetFirstToCompute() throw(SALOME_Exception); - - const map < int, SMESH_subMesh * >&DependsOn(); - const map < int, SMESH_subMesh * >&Dependants(); - - const TopoDS_Shape & GetSubShape(); - - bool _vertexSet; // only for vertex subMesh, set to false for dim > 0 - - enum compute_state - { NOT_READY, READY_TO_COMPUTE, - COMPUTE_OK, FAILED_TO_COMPUTE - }; - enum algo_state - { NO_ALGO, MISSING_HYP, HYP_OK }; - enum algo_event - { ADD_HYP, ADD_ALGO, - REMOVE_HYP, REMOVE_ALGO, - ADD_FATHER_HYP, ADD_FATHER_ALGO, - REMOVE_FATHER_HYP, REMOVE_FATHER_ALGO - }; - enum compute_event - { MODIF_HYP, MODIF_ALGO_STATE, COMPUTE, - CLEAN, CLEANDEP, SUBMESH_COMPUTED - }; - - bool AlgoStateEngine(int event, SMESH_Hypothesis * anHyp) - throw(SALOME_Exception); - - void SubMeshesAlgoStateEngine(int event, SMESH_Hypothesis * anHyp) - throw(SALOME_Exception); - - void DumpAlgoState(bool isMain); - - bool ComputeStateEngine(int event) throw(SALOME_Exception); - - int GetComputeState() - { - return _computeState; - }; - - protected: - void InsertDependence(const TopoDS_Shape aSubShape); -// void FinalizeDependence(list& shapeList); - - bool SubMeshesComputed() throw(SALOME_Exception); - - bool SubMeshesReady(); - - void RemoveSubMeshElementsAndNodes(); - void UpdateDependantsState(); - void CleanDependants(); - void ExtractDependants(const TopTools_IndexedDataMapOfShapeListOfShape & M, - const TopAbs_ShapeEnum etype); - void SetAlgoState(int state); - - TopoDS_Shape _subShape; - SMESHDS_Mesh * _meshDS; - SMESHDS_SubMesh * _subMeshDS; - int _Id; - SMESH_Mesh *_father; - map < int, SMESH_subMesh * >_mapDepend; - map < int, SMESH_subMesh * >_mapDependants; - bool _dependenceAnalysed; - bool _dependantsFound; - - int _algoState; - int _oldAlgoState; - int _computeState; + SMESHDS_SubMesh* CreateSubMeshDS(); + // Explicit SMESHDS_SubMesh creation method, required for persistence mechanism + + SMESH_subMesh *GetFirstToCompute(); + + const map < int, SMESH_subMesh * >&DependsOn(); + //const map < int, SMESH_subMesh * >&Dependants(); + + const TopoDS_Shape & GetSubShape(); + +// bool _vertexSet; // only for vertex subMesh, set to false for dim > 0 + + enum compute_state + { + NOT_READY, READY_TO_COMPUTE, + COMPUTE_OK, FAILED_TO_COMPUTE + }; + enum algo_state + { + NO_ALGO, MISSING_HYP, HYP_OK + }; + enum algo_event + { + ADD_HYP, ADD_ALGO, + REMOVE_HYP, REMOVE_ALGO, + ADD_FATHER_HYP, ADD_FATHER_ALGO, + REMOVE_FATHER_HYP, REMOVE_FATHER_ALGO + }; + enum compute_event + { + MODIF_HYP, MODIF_ALGO_STATE, COMPUTE, + CLEAN, CLEANDEP, SUBMESH_COMPUTED, SUBMESH_RESTORED, + MESH_ENTITY_REMOVED, CHECK_COMPUTE_STATE + }; + + SMESH_Hypothesis::Hypothesis_Status + AlgoStateEngine(int event, SMESH_Hypothesis * anHyp); + + SMESH_Hypothesis::Hypothesis_Status + SubMeshesAlgoStateEngine(int event, SMESH_Hypothesis * anHyp); + + int GetAlgoState() { return _algoState; } + + void DumpAlgoState(bool isMain); + + bool ComputeStateEngine(int event); + + int GetComputeState() + { + return _computeState; + }; + + bool IsConform(const SMESH_Algo* theAlgo); + // check if a conform mesh will be produced by the Algo + + bool CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) const; + // return true if theHypothesis can be attached to me: + // its dimention is checked + + static bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis, + const TopAbs_ShapeEnum theShapeType); + + bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis) const + { return IsApplicableHypotesis( theHypothesis, _subShape.ShapeType() ); } + // return true if theHypothesis can be used to mesh me: + // its shape type is checked + + SMESH_Hypothesis::Hypothesis_Status CheckConcurentHypothesis (const int theHypType); + // check if there are several applicable hypothesis on fathers + + protected: + void InsertDependence(const TopoDS_Shape aSubShape); + + bool SubMeshesComputed(); + + bool SubMeshesReady(); + + void RemoveSubMeshElementsAndNodes(); + void UpdateDependantsState(const compute_event theEvent); + void UpdateSubMeshState(const compute_state theState); + void ComputeSubMeshStateEngine(int event); + void CleanDependants(); + void CleanDependsOn(); + void SetAlgoState(int state); + + bool IsMeshComputed() const; + // check if _subMeshDS contains mesh elements + + TopoDS_Shape GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo); + // return a shape containing all sub-shapes of the MainShape that can be + // meshed at once along with _subShape + + bool ApplyToCollection (SMESH_Algo* theAlgo, + const TopoDS_Shape& theCollection); + // Apply theAlgo to all subshapes in theCollection + + const SMESH_Hypothesis* GetSimilarAttached(const TopoDS_Shape& theShape, + const SMESH_Hypothesis * theHyp, + const int theHypType = 0); + // return a hypothesis attached to theShape. + // If theHyp is provided, similar but not same hypotheses + // is returned; else an applicable ones having theHypType + // is returned + + TopoDS_Shape _subShape; + SMESHDS_Mesh * _meshDS; + SMESHDS_SubMesh * _subMeshDS; + int _Id; + SMESH_Mesh *_father; + map < int, SMESH_subMesh * >_mapDepend; + bool _dependenceAnalysed; + + int _algoState; + int _computeState; };