Salome HOME
Bug PAL7222( DEVELOPMENT : Info on mesh and export MED File ).
[modules/smesh.git] / src / SMESH / SMESH_Mesh.hxx
index d594b7115933e2dc4618ab41c788484a742003b9..a28a67ea5eb7232056768eea7346c9584c2019ae 100644 (file)
 #ifndef _SMESH_MESH_HXX_
 #define _SMESH_MESH_HXX_
 
+#include "SMESH_Hypothesis.hxx"
+//#include "SMESH_subMesh.hxx"
+
 #include "SMESHDS_Document.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Command.hxx"
-#include "SMESH_Hypothesis.hxx"
-#include "SMESH_subMesh.hxx"
 #include "SMDSAbs_ElementType.hxx"
 
+#include "NMTTools_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
+
+#include "Utils_SALOME_Exception.hxx"
+
 #include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopoDS.hxx>
@@ -62,6 +67,9 @@
 class SMESH_Gen;
 class SMESH_Group;
 class TopTools_ListOfShape;
+class SMESH_subMesh;
+
+typedef NMTTools_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain;
 
 class SMESH_Mesh
 {
@@ -128,8 +136,13 @@ public:
   // return list of ancestors of theSubShape in the order
   // that lower dimention shapes come first.
   
+  void ExportMED(const char *file, 
+                const char* theMeshName = NULL, 
+                bool theAutoGroups = true, 
+                int theVersion = 0) 
+    throw(SALOME_Exception);
+
   void ExportDAT(const char *file) throw(SALOME_Exception);
-  void ExportMED(const char *file, const char* theMeshName = NULL, bool theAutoGroups = true) throw(SALOME_Exception);
   void ExportUNV(const char *file) throw(SALOME_Exception);
   void ExportSTL(const char *file, const bool isascii) throw(SALOME_Exception);
   
@@ -167,9 +180,40 @@ public:
   list<int> GetGroupIds();
   
   void RemoveGroup (const int theGroupID);
+
+  // Propagation hypothesis management
+
+  bool IsLocal1DHypothesis (const TopoDS_Shape& theEdge);
+  // Returns true, if a local 1D hypothesis is set directly on <theEdge>
+
+  bool IsPropagationHypothesis (const TopoDS_Shape& theEdge);
+  // Returns true, if a local Propagation hypothesis is set directly on <theEdge>
+
+  bool IsPropagatedHypothesis (const TopoDS_Shape& theEdge,
+                               TopoDS_Shape&       theMainEdge);
+  // Returns true, if a local 1D hypothesis is
+  // propagated on <theEdge> from some other edge.
+  // Returns through <theMainEdge> the edge, from
+  // which the 1D hypothesis is propagated on <theEdge>
+
+  bool IsReversedInChain (const TopoDS_Shape& theEdge,
+                          const TopoDS_Shape& theMainEdge);
+  // Returns true if theEdge should be reversed to be
+  // co-directed with theMainEdge
+
+  bool RebuildPropagationChains();
+  bool RemovePropagationChain (const TopoDS_Shape& theMainEdge);
+  bool BuildPropagationChain (const TopoDS_Shape& theMainEdge);
+
+  //
   
   ostream& Dump(ostream & save);
   
+private:
+  // Propagation hypothesis management
+  void CleanMeshOnPropagationChain(const TopoDS_Shape& theMainEdge);
+  //
+  
 private:
   int _id;                                     // id given by creator (unique within the creator instance)
   int _studyId;
@@ -186,6 +230,8 @@ private:
   SMESH_Gen *_gen;
   
   TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors;
+
+  IndexedMapOfChain _mapPropagationChains; // Propagation hypothesis management
 };
 
 #endif