X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH%2FSMESH_subMesh.hxx;h=a1b3a8568e1e6530dbe21699ecdbed5fa0a43969;hb=refs%2Ftags%2FdistribGeom_28Feb13;hp=781e555a997f56b16f3e26e3277e81b7bf8b70e3;hpb=d5a3c3b28a0fb00764647c068791f585bf6f1b37;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx index 781e555a9..a1b3a8568 100644 --- a/src/SMESH/SMESH_subMesh.hxx +++ b/src/SMESH/SMESH_subMesh.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 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 @@ -59,15 +59,18 @@ typedef boost::shared_ptr< SMDS_Iterator > SMESH_subMeshIterator class SMESH_EXPORT SMESH_subMesh { public: - SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS, + SMESH_subMesh(int Id, + SMESH_Mesh * father, + SMESHDS_Mesh * meshDS, const TopoDS_Shape & aSubShape); virtual ~ SMESH_subMesh(); - int GetId() const; + int GetId() const; // == meshDS->ShapeToIndex( aSubShape ) SMESH_Mesh* GetFather() { return _father; } - SMESHDS_SubMesh * GetSubMeshDS(); + SMESHDS_SubMesh * GetSubMeshDS(); + const SMESHDS_SubMesh * GetSubMeshDS() const; SMESHDS_SubMesh* CreateSubMeshDS(); // Explicit SMESHDS_SubMesh creation method, required for persistence mechanism @@ -77,12 +80,11 @@ class SMESH_EXPORT SMESH_subMesh SMESH_Algo* GetAlgo() const; const std::map < int, SMESH_subMesh * >& DependsOn(); - //const map < int, SMESH_subMesh * >&Dependants(); /*! * \brief Return iterator on the submeshes this one depends on */ SMESH_subMeshIteratorPtr getDependsOnIterator(const bool includeSelf, - const bool complexShapeFirst); + const bool complexShapeFirst) const; const TopoDS_Shape & GetSubShape() const; @@ -90,11 +92,11 @@ class SMESH_EXPORT SMESH_subMesh { 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, @@ -102,16 +104,13 @@ class SMESH_EXPORT SMESH_subMesh ADD_FATHER_HYP , ADD_FATHER_ALGO, REMOVE_FATHER_HYP, REMOVE_FATHER_ALGO, MODIF_HYP - }; + }; enum compute_event { - MODIF_ALGO_STATE, COMPUTE, -#ifdef WITH_SMESH_CANCEL_COMPUTE - COMPUTE_CANCELED, -#endif + MODIF_ALGO_STATE, COMPUTE, COMPUTE_CANCELED, CLEAN, SUBMESH_COMPUTED, SUBMESH_RESTORED, SUBMESH_LOADED, MESH_ENTITY_REMOVED, CHECK_COMPUTE_STATE - }; + }; enum event_type { ALGO_EVENT, COMPUTE_EVENT @@ -142,6 +141,13 @@ class SMESH_EXPORT SMESH_subMesh */ EventListenerData* GetEventListenerData(EventListener* listener) const; + /*! + * \brief Return an event listener data + * \param listenerName - the listener name + * \retval EventListenerData* - found data, maybe NULL + */ + EventListenerData* GetEventListenerData(const std::string& listenerName) const; + /*! * \brief Unregister the listener and delete it and it's data * \param listener - the event listener to delete @@ -203,14 +209,14 @@ public: SMESH_Hypothesis::Hypothesis_Status SubMeshesAlgoStateEngine(int event, SMESH_Hypothesis * anHyp); - int GetAlgoState() const { return _algoState; } - int GetComputeState() const { return _computeState; }; - SMESH_ComputeErrorPtr& GetComputeError() { return _computeError; } + algo_state GetAlgoState() const { return _algoState; } + compute_state GetComputeState() const { return _computeState; }; + SMESH_ComputeErrorPtr& GetComputeError() { return _computeError; } void DumpAlgoState(bool isMain); bool ComputeStateEngine(int event); - void ComputeSubMeshStateEngine(int event); + void ComputeSubMeshStateEngine(int event, const bool includeSelf=false); bool Evaluate(MapShapeNbElems& aResMap); @@ -247,6 +253,8 @@ public: void SetIsAlwaysComputed(bool isAlCo); bool IsAlwaysComputed() { return _alwaysComputed; } + bool SubMeshesComputed(bool * isFailedToCompute=0) const; + /*! * \brief Find common submeshes (based on shared subshapes with other @@ -261,15 +269,12 @@ 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 cleanDependants(); - void cleanDependsOn(); - void setAlgoState(int state); + void cleanDependsOn( bool keepSupportedsubMeshes = false ); + void setAlgoState(algo_state state); /*! * \brief Return a shape containing all sub-shapes of the MainShape that can be @@ -277,12 +282,15 @@ protected: */ TopoDS_Shape getCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo, - bool & theSubComputed); + bool & theSubComputed, + bool & theSubFailed); /*! * \brief Update compute_state by _computeError * \retval bool - false if there are errors */ - bool checkComputeError(SMESH_Algo* theAlgo, const TopoDS_Shape& theShape=TopoDS_Shape()); + bool checkComputeError(SMESH_Algo* theAlgo, + const bool theComputeOK, + const TopoDS_Shape& theShape=TopoDS_Shape()); /*! * \brief Return a hypothesis attached to theShape. @@ -306,11 +314,12 @@ protected: std::map < int, SMESH_subMesh * >_mapDepend; bool _dependenceAnalysed; - int _algoState; - int _computeState; + SMESH_Algo * _algo; // the algorithm found by last *StateEngine() call + algo_state _algoState; + compute_state _computeState; SMESH_ComputeErrorPtr _computeError; - // allow algo->Compute() if a subshape of lower dim is meshed but + // 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 // mesh several edges as a whole and leave some of them without mesh entities bool _alwaysComputed;