Salome HOME
PR: synchro V6_main tag mergeto_V7_main_11Feb13
[modules/smesh.git] / src / SMESH / SMESH_subMesh.hxx
index 3e01fccb6611b8d351b25b76c832206a37a0e24a..0c956cea623af7fa8627fde9e16b659e71c95be7 100644 (file)
@@ -59,15 +59,18 @@ typedef boost::shared_ptr< SMDS_Iterator<SMESH_subMesh*> > 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,9 +209,9 @@ 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);
 
@@ -247,6 +253,8 @@ public:
   void SetIsAlwaysComputed(bool isAlCo);
   bool IsAlwaysComputed() { return _alwaysComputed; }
 
+  bool SubMeshesComputed() 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 setAlgoState(algo_state state);
 
   /*!
    * \brief Return a shape containing all sub-shapes of the MainShape that can be
@@ -282,7 +287,9 @@ protected:
    * \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,8 +313,8 @@ protected:
   std::map < int, SMESH_subMesh * >_mapDepend;
   bool                  _dependenceAnalysed;
 
-  int                   _algoState;
-  int                   _computeState;
+  algo_state            _algoState;
+  compute_state         _computeState;
   SMESH_ComputeErrorPtr _computeError;
 
   // allow algo->Compute() if a subshape of lower dim is meshed but