X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_subMesh.hxx;h=576047f7d2e8c95a000f104581abd5a69c294c44;hp=24152268d2cf593e54c4cb9c5bba92b2ca39553b;hb=HEAD;hpb=25b7d7ffe76e153c93cb67055192b11b16c3d0e2 diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx index 24152268d..0358cc662 100644 --- a/src/SMESH/SMESH_subMesh.hxx +++ b/src/SMESH/SMESH_subMesh.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -29,26 +29,27 @@ #include "SMESH_SMESH.hxx" -#include "SMESHDS_Mesh.hxx" -#include "SMESHDS_SubMesh.hxx" -#include "SMESH_Hypothesis.hxx" +#include "SMDS_Iterator.hxx" #include "SMESH_ComputeError.hxx" #include "SMESH_Algo.hxx" #include "Utils_SALOME_Exception.hxx" #include +#include #include #include -class SMESH_Mesh; -class SMESH_Hypothesis; +class SMESHDS_Mesh; +class SMESHDS_SubMesh; class SMESH_Algo; class SMESH_Gen; -class SMESH_subMeshEventListener; -class SMESH_subMeshEventListenerData; +class SMESH_Hypothesis; +class SMESH_Mesh; class SMESH_subMesh; +class SMESH_subMeshEventListener; +struct SMESH_subMeshEventListenerData; typedef SMESH_subMeshEventListener EventListener; typedef SMESH_subMeshEventListenerData EventListenerData; @@ -68,7 +69,7 @@ class SMESH_EXPORT SMESH_subMesh int GetId() const; // == meshDS->ShapeToIndex( aSubShape ) SMESH_Mesh* GetFather() { return _father; } - + SMESHDS_SubMesh * GetSubMeshDS(); const SMESHDS_SubMesh * GetSubMeshDS() const; @@ -78,6 +79,7 @@ class SMESH_EXPORT SMESH_subMesh SMESH_subMesh *GetFirstToCompute(); SMESH_Algo* GetAlgo() const; + SMESH_Algo* CopyAlgo() const; const std::map < int, SMESH_subMesh * >& DependsOn(); bool DependsOn( const SMESH_subMesh* other ) const; @@ -96,8 +98,7 @@ class SMESH_EXPORT SMESH_subMesh enum compute_state { - NOT_READY, READY_TO_COMPUTE, - COMPUTE_OK, FAILED_TO_COMPUTE + NOT_READY, READY_TO_COMPUTE, COMPUTE_OK, FAILED_TO_COMPUTE }; enum algo_state { @@ -113,7 +114,7 @@ class SMESH_EXPORT SMESH_subMesh }; enum compute_event { - MODIF_ALGO_STATE, COMPUTE, COMPUTE_SUBMESH, COMPUTE_CANCELED, + MODIF_ALGO_STATE, COMPUTE, COMPUTE_SUBMESH, COMPUTE_NOGEOM, COMPUTE_CANCELED, CLEAN, SUBMESH_COMPUTED, SUBMESH_RESTORED, SUBMESH_LOADED, MESH_ENTITY_REMOVED, CHECK_COMPUTE_STATE }; @@ -123,15 +124,15 @@ class SMESH_EXPORT SMESH_subMesh }; // ================================================================== - // Members to track non hierarchical dependencies between submeshes + // Members to track non hierarchical dependencies between sub-meshes // ================================================================== /*! - * \brief Sets an event listener and its data to a submesh + * \brief Set an event listener and its data to a submesh * \param listener - the listener to store * \param data - the listener data to store * \param where - the submesh to store the listener and it's data - * + * * The method remembers the submesh \awhere it puts the listener in order to delete * it when HYP_OK algo_state is lost * After being set, event listener is notified on each event of \awhere submesh. @@ -185,13 +186,13 @@ protected: * \brief Sets an event listener and its data to a submesh * \param listener - the listener to store * \param data - the listener data to store - * + * * After being set, event listener is notified on each event of a submesh. */ void setEventListener(EventListener* listener, EventListenerData* data); /*! - * \brief Notify stored event listeners on the occured event + * \brief Notify stored event listeners on the occurred event * \param event - algo_event or compute_event itself * \param eventType - algo_event or compute_event * \param hyp - hypothesis, if eventType is algo_event @@ -216,10 +217,10 @@ protected: public: SMESH_Hypothesis::Hypothesis_Status - AlgoStateEngine(int event, SMESH_Hypothesis * anHyp); + AlgoStateEngine(algo_event event, SMESH_Hypothesis * anHyp); SMESH_Hypothesis::Hypothesis_Status - SubMeshesAlgoStateEngine(int event, SMESH_Hypothesis * anHyp, bool exitOnFatal=false); + SubMeshesAlgoStateEngine(algo_event event, SMESH_Hypothesis * anHyp, bool exitOnFatal=false); algo_state GetAlgoState() const { return _algoState; } compute_state GetComputeState() const { return _computeState; } @@ -227,8 +228,8 @@ public: void DumpAlgoState(bool isMain); - bool ComputeStateEngine(int event); - void ComputeSubMeshStateEngine(int event, const bool includeSelf=false); + bool ComputeStateEngine(compute_event event); + void ComputeSubMeshStateEngine(compute_event event, const bool includeSelf=false); bool Evaluate(MapShapeNbElems& aResMap); @@ -237,17 +238,16 @@ public: bool CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) const; // return true if theHypothesis can be attached to me: - // its dimention is checked + // its dimension is checked - static bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis, + static bool IsApplicableHypothesis(const SMESH_Hypothesis* theHypothesis, const TopAbs_ShapeEnum theShapeType); - bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis) const - { return IsApplicableHypotesis( theHypothesis, _subShape.ShapeType() ); } + bool IsApplicableHypothesis(const SMESH_Hypothesis* theHypothesis) const; // return true if theHypothesis can be used to mesh me: // its shape type is checked - - SMESH_Hypothesis::Hypothesis_Status CheckConcurentHypothesis (const int theHypType); + + SMESH_Hypothesis::Hypothesis_Status CheckConcurrentHypothesis (SMESH_Hypothesis* theHypothesis); // check if there are several applicable hypothesis on fathers /*! @@ -258,18 +258,27 @@ public: bool IsMeshComputed() const; // check if _subMeshDS contains mesh elements unless _alwaysComputed==true + bool IsComputedPartially() const; + // check if any upper level sub-shape is not computed + + /*! + * \brief Set sub-shapes that are allowed to compute at once by a multidimensional algo + */ + void SetAllowedSubShapes( const TopTools_IndexedMapOfShape* subShapes ) + { _allowedSubShapes = subShapes; } + /*! * \brief Allow algo->Compute() if a subshape of lower dim is meshed but * none mesh entity is bound to it */ void SetIsAlwaysComputed(bool isAlCo); - bool IsAlwaysComputed() { return _alwaysComputed; } + bool IsAlwaysComputed() const { return _alwaysComputed; } bool SubMeshesComputed(bool * isFailedToCompute=0) const; int GetComputeCost() const; // how costly is to compute this sub-mesh - + /*! * \brief Find common submeshes (based on shared subshapes with other * \param theOther submesh to check @@ -281,7 +290,9 @@ public: protected: // ================================================================== - void insertDependence(const TopoDS_Shape aShape, TopAbs_ShapeEnum aSubType ); + void insertDependence(const TopoDS_Shape aShape, + TopAbs_ShapeEnum aSubType, + TopAbs_ShapeEnum avoidType=TopAbs_SHAPE); void removeSubMeshElementsAndNodes(); void updateDependantsState(const compute_event theEvent); @@ -309,7 +320,7 @@ protected: /*! * \brief 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 @@ -317,7 +328,7 @@ protected: const SMESH_Hypothesis* getSimilarAttached(const TopoDS_Shape& theShape, const SMESH_Hypothesis * theHyp, const int theHypType = 0); - // + // int computeCost() const; protected: @@ -332,6 +343,7 @@ protected: std::vector< SMESH_subMesh * > _ancestors; SMESH_Algo * _algo; // the algorithm found by last *StateEngine() call + TopoDS_Shape _algoShape; // shape the algorithm is assigned to algo_state _algoState; compute_state _computeState; SMESH_ComputeErrorPtr _computeError; @@ -343,6 +355,8 @@ protected: // mesh several edges as a whole and leave some of them without mesh entities bool _alwaysComputed; + const TopTools_IndexedMapOfShape* _allowedSubShapes; // allowed to be returned by getCollection() + }; #endif