]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/SMESH/SMESH_subMesh.hxx
Salome HOME
NRI : First integration.
[modules/smesh.git] / src / SMESH / SMESH_subMesh.hxx
diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx
new file mode 100644 (file)
index 0000000..ab53a11
--- /dev/null
@@ -0,0 +1,109 @@
+//=============================================================================
+// File      : SMESH_subMesh.hxx
+// Created   : jeu mai 30 13:28:36 CEST 2002
+// Author    : Paul RASCLE, EDF
+// Project   : SALOME
+// Copyright : EDF 2002
+// $Header$
+//=============================================================================
+
+#ifndef _SMESH_SUBMESH_HXX_
+#define _SMESH_SUBMESH_HXX_
+
+#include "SMESHDS_Mesh.hxx"
+#include "SMESHDS_SubMesh.hxx"
+#include "Utils_SALOME_Exception.hxx"
+#include <TopoDS_Shape.hxx>
+#include <TColStd_IndexedMapOfTransient.hxx>
+#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
+
+#include <set>
+#include <list>
+#include <map>
+
+class SMESH_Mesh;
+class SMESH_Hypothesis;
+
+class SMESH_subMesh
+{
+public:
+  SMESH_subMesh(int Id,
+               SMESH_Mesh* father,
+               const Handle(SMESHDS_Mesh)& meshDS,
+               const TopoDS_Shape & aSubShape);
+  virtual ~SMESH_subMesh();
+
+  int GetId();
+
+//   bool Contains(const TopoDS_Shape & aSubShape)
+//     throw (SALOME_Exception);
+
+  const Handle(SMESHDS_SubMesh)& GetSubMeshDS()
+    throw (SALOME_Exception);
+
+  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<TopoDS_Shape>& 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;
+  Handle (SMESHDS_Mesh) _meshDS;
+  Handle (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;
+
+};
+
+#endif