X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_subMesh.hxx;h=24152268d2cf593e54c4cb9c5bba92b2ca39553b;hp=669ef7164ac479b08b09674c97c5fb6c8485b48c;hb=25b7d7ffe76e153c93cb67055192b11b16c3d0e2;hpb=7aebb99e42c6b0c3c056a5eecb0f29033db2231a diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx index 669ef7164..24152268d 100644 --- a/src/SMESH/SMESH_subMesh.hxx +++ b/src/SMESH/SMESH_subMesh.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -80,11 +80,17 @@ class SMESH_EXPORT SMESH_subMesh SMESH_Algo* GetAlgo() const; const std::map < int, SMESH_subMesh * >& DependsOn(); + bool DependsOn( const SMESH_subMesh* other ) const; + bool DependsOn( const int shapeID ) const; /*! - * \brief Return iterator on the submeshes this one depends on + * \brief Return iterator on the sub-meshes this one depends on. By default + * most simple sub-meshes go first. */ SMESH_subMeshIteratorPtr getDependsOnIterator(const bool includeSelf, - const bool complexShapeFirst) const; + const bool complexShapeFirst=false) const; + + const std::vector< SMESH_subMesh * > & GetAncestors() const; + void ClearAncestors(); const TopoDS_Shape & GetSubShape() const; @@ -107,7 +113,7 @@ class SMESH_EXPORT SMESH_subMesh }; enum compute_event { - MODIF_ALGO_STATE, COMPUTE, COMPUTE_CANCELED, + MODIF_ALGO_STATE, COMPUTE, COMPUTE_SUBMESH, COMPUTE_CANCELED, CLEAN, SUBMESH_COMPUTED, SUBMESH_RESTORED, SUBMESH_LOADED, MESH_ENTITY_REMOVED, CHECK_COMPUTE_STATE }; @@ -137,16 +143,22 @@ class SMESH_EXPORT SMESH_subMesh /*! * \brief Return an event listener data * \param listener - the listener whose data is + * \param myOwn - if \c true, returns a listener set by this sub-mesh, + * else returns a listener listening to events of this sub-mesh * \retval EventListenerData* - found data, maybe NULL */ - EventListenerData* GetEventListenerData(EventListener* listener) const; + EventListenerData* GetEventListenerData(EventListener* listener, + const bool myOwn=false) const; /*! * \brief Return an event listener data * \param listenerName - the listener name + * \param myOwn - if \c true, returns a listener set by this sub-mesh, + * else returns a listener listening to events of this sub-mesh * \retval EventListenerData* - found data, maybe NULL */ - EventListenerData* GetEventListenerData(const std::string& listenerName) const; + EventListenerData* GetEventListenerData(const std::string& listenerName, + const bool myOwn=false) const; /*! * \brief Unregister the listener and delete it and it's data @@ -207,10 +219,10 @@ public: AlgoStateEngine(int event, SMESH_Hypothesis * anHyp); SMESH_Hypothesis::Hypothesis_Status - SubMeshesAlgoStateEngine(int event, SMESH_Hypothesis * anHyp); + SubMeshesAlgoStateEngine(int event, SMESH_Hypothesis * anHyp, bool exitOnFatal=false); algo_state GetAlgoState() const { return _algoState; } - compute_state GetComputeState() const { return _computeState; }; + compute_state GetComputeState() const { return _computeState; } SMESH_ComputeErrorPtr& GetComputeError() { return _computeError; } void DumpAlgoState(bool isMain); @@ -244,7 +256,7 @@ public: bool IsEmpty() const; bool IsMeshComputed() const; - // check if _subMeshDS contains mesh elements + // check if _subMeshDS contains mesh elements unless _alwaysComputed==true /*! * \brief Allow algo->Compute() if a subshape of lower dim is meshed but @@ -255,6 +267,8 @@ public: 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 @@ -267,7 +281,7 @@ public: protected: // ================================================================== - void insertDependence(const TopoDS_Shape aSubShape); + void insertDependence(const TopoDS_Shape aShape, TopAbs_ShapeEnum aSubType ); void removeSubMeshElementsAndNodes(); void updateDependantsState(const compute_event theEvent); @@ -283,7 +297,8 @@ protected: TopoDS_Shape getCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo, bool & theSubComputed, - bool & theSubFailed); + bool & theSubFailed, + std::vector& theSubs); /*! * \brief Update compute_state by _computeError * \retval bool - false if there are errors @@ -303,6 +318,7 @@ protected: const SMESH_Hypothesis * theHyp, const int theHypType = 0); // + int computeCost() const; protected: @@ -312,12 +328,15 @@ protected: int _Id; std::map < int, SMESH_subMesh * >_mapDepend; - bool _dependenceAnalysed; + bool _dependenceAnalysed; + std::vector< SMESH_subMesh * > _ancestors; SMESH_Algo * _algo; // the algorithm found by last *StateEngine() call algo_state _algoState; compute_state _computeState; SMESH_ComputeErrorPtr _computeError; + int _computeCost; // how costly is to compute this sub-mesh + int _realComputeCost; // _computeCost depending on presence of needed hypotheses // allow algo->Compute() if a sub-shape of lower dim is meshed but // none mesh entity is bound to it. Eg StdMeshers_CompositeSegment_1D can