Salome HOME
IMP19942 - Convert group on geometry into group of elements
[modules/smesh.git] / src / SMESH / SMESH_Mesh.hxx
index d9538fe86d4ee26719b3e2fbcd0b9916c560dd31..8ba8f082cfe5977fce80c97afea904a983d1497c 100644 (file)
 #include "SMESH_SMESH.hxx"
 
 #include "SMESH_Hypothesis.hxx"
-//#include "SMESH_subMesh.hxx"
 
-#include "SMESHDS_Document.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Command.hxx"
 #include "SMDSAbs_ElementType.hxx"
 
-//#include "NMTTools_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
-#include "SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
-
 #include "Utils_SALOME_Exception.hxx"
 
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Iterator.hxx>
-#include <TopoDS_Compound.hxx>
-#include <TopoDS_CompSolid.hxx>
-#include <TopoDS_Solid.hxx>
-#include <TopoDS_Shell.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Wire.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Vertex.hxx>
 #include <TopoDS_Shape.hxx>
-#include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 
-#include <vector>
 #include <list>
 #include <map>
 
-#include <string>
-#include <iostream>
-
 class SMESH_Gen;
+class SMESHDS_Document;
 class SMESH_Group;
 class TopTools_ListOfShape;
 class SMESH_subMesh;
 class SMESH_HypoFilter;
 class TopoDS_Solid;
 
-typedef SMESH_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain;
-
 class SMESH_EXPORT SMESH_Mesh
 {
 public:
@@ -105,6 +82,15 @@ public:
    */
   static const TopoDS_Solid& PseudoShape();
 
+  /*!
+   * \brief Remove all nodes and elements
+   */
+  void Clear();
+
+  /*!
+   * \brief Remove all nodes and elements of indicated shape
+   */
+  void ClearSubMesh(const int theShapeId);
 
   int UNVToMesh(const char* theFileName);
   /*!
@@ -122,20 +108,21 @@ public:
   RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId)
     throw(SALOME_Exception);
   
-  const list <const SMESHDS_Hypothesis * >&
+  const std::list <const SMESHDS_Hypothesis * >&
   GetHypothesisList(const TopoDS_Shape & aSubShape) const
     throw(SALOME_Exception);
 
   const SMESH_Hypothesis * GetHypothesis(const TopoDS_Shape &    aSubShape,
                                          const SMESH_HypoFilter& aFilter,
-                                         const bool              andAncestors) const;
+                                         const bool              andAncestors,
+                                         TopoDS_Shape*           assignedTo=0) const;
   
-  int GetHypotheses(const TopoDS_Shape &                aSubShape,
-                    const SMESH_HypoFilter&             aFilter,
-                    list <const SMESHDS_Hypothesis * >& aHypList,
-                    const bool                          andAncestors) const;
+  int GetHypotheses(const TopoDS_Shape &                     aSubShape,
+                    const SMESH_HypoFilter&                  aFilter,
+                    std::list <const SMESHDS_Hypothesis * >& aHypList,
+                    const bool                               andAncestors) const;
 
-  const list<SMESHDS_Command*> & GetLog() throw(SALOME_Exception);
+  const std::list<SMESHDS_Command*> & GetLog() throw(SALOME_Exception);
   
   void ClearLog() throw(SALOME_Exception);
   
@@ -148,34 +135,52 @@ public:
   SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
     throw(SALOME_Exception);
   
-  SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape)
+  SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape) const
     throw(SALOME_Exception);
   
-  SMESH_subMesh *GetSubMeshContaining(const int aShapeID)
+  SMESH_subMesh *GetSubMeshContaining(const int aShapeID) const
     throw(SALOME_Exception);
-  
+  /*!
+   * \brief Return submeshes of groups containing the given subshape
+   */
+  std::list<SMESH_subMesh*> GetGroupSubMeshesContaining(const TopoDS_Shape & shape) const
+    throw(SALOME_Exception);
+  /*!
+   * \brief Say all submeshes that theChangedHyp has been modified
+   */
   void NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* theChangedHyp);
-  // Say all submeshes that theChangedHyp has been modified
 
-  const list < SMESH_subMesh * >&
-  GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp)
-    throw(SALOME_Exception);
-  
+  const std::list < SMESH_subMesh * >&
+  GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) throw(SALOME_Exception);
+  /*!
+   * \brief Return True if anHyp is used to mesh aSubShape
+   */
   bool IsUsedHypothesis(SMESHDS_Hypothesis *  anHyp,
                        const SMESH_subMesh * aSubMesh);
-  // Return True if anHyp is used to mesh aSubShape
-  
+  /*!
+   * \brief check if a hypothesis alowing notconform mesh is present
+   */
   bool IsNotConformAllowed() const;
-  // check if a hypothesis alowing notconform mesh is present
   
   bool IsMainShape(const TopoDS_Shape& theShape) const;
-
+  /*!
+   * \brief Return list of ancestors of theSubShape in the order
+   *        that lower dimention shapes come first
+   */
   const TopTools_ListOfShape& GetAncestors(const TopoDS_Shape& theSubShape) const;
-  // return list of ancestors of theSubShape in the order
-  // that lower dimention shapes come first.
 
-  /*! Check group names for duplications.
-   *  Consider maximum group name length stored in MED file.
+  void SetAutoColor(bool theAutoColor) throw(SALOME_Exception);
+
+  bool GetAutoColor() throw(SALOME_Exception);
+
+  /*!
+   * \brief Return data map of descendant to ancestor shapes
+   */
+  typedef TopTools_IndexedDataMapOfShapeListOfShape TAncestorMap;
+  const TAncestorMap& GetAncestorMap() const { return _mapAncestors; }
+  /*!
+   * \brief Check group names for duplications.
+   *  Consider maximum group name length stored in MED file
    */
   bool HasDuplicatedGroupNamesMED();
 
@@ -191,34 +196,25 @@ public:
   
   int NbNodes() throw(SALOME_Exception);
   
-  /*!
-   * ElementOrder points out entities of what order are requested
-   */
-  enum ElementOrder {
-    ORDER_ANY,          /*! entities of any order */
-    ORDER_LINEAR,       /*! entities of 1st order */
-    ORDER_QUADRATIC     /*! entities of 2nd order */
-  };
-
-  int NbEdges(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbEdges(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
-  int NbFaces(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbFaces(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
-  int NbTriangles(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbTriangles(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
-  int NbQuadrangles(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
 
   int NbPolygons() throw(SALOME_Exception);
   
-  int NbVolumes(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbVolumes(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
-  int NbTetras(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbTetras(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
-  int NbHexas(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbHexas(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
-  int NbPyramids(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
 
-  int NbPrisms(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   int NbPolyhedrons() throw(SALOME_Exception);
   
@@ -231,36 +227,17 @@ public:
                         int&                      theId,
                          const TopoDS_Shape&       theShape=TopoDS_Shape());
   
-  SMESH_Group* GetGroup (const int theGroupID);
+  typedef boost::shared_ptr< SMDS_Iterator<SMESH_Group*> > GroupIteratorPtr;
+  GroupIteratorPtr GetGroups() const;
   
-  list<int> GetGroupIds();
+  std::list<int> GetGroupIds() const;
   
-  void RemoveGroup (const int theGroupID);
-
-  // Propagation hypothesis management
-
-  const SMESH_Hypothesis* IsLocal1DHypothesis (const TopoDS_Shape& theEdge);
-  // Returns a local 1D hypothesis used for theEdge.
-
-  bool IsPropagationHypothesis (const TopoDS_Shape& theEdge);
-  // Returns true, if a local Propagation hypothesis is set directly on <theEdge>
+  SMESH_Group* GetGroup (const int theGroupID);
 
-  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>
+  void RemoveGroup (const int theGroupID);
 
-  bool IsReversedInChain (const TopoDS_Shape& theEdge,
-                          const TopoDS_Shape& theMainEdge);
-  // Returns true if theEdge should be reversed to be
-  // co-directed with theMainEdge
+  SMESH_Group* ConvertToStandalone ( int theGroupID );
 
-  bool RebuildPropagationChains();
-  bool RemovePropagationChain (const TopoDS_Shape& theMainEdge);
-  bool BuildPropagationChain (const TopoDS_Shape& theMainEdge);
-  
   SMDSAbs_ElementType GetElementType( const int id, const bool iselem );
 
   //
@@ -268,9 +245,6 @@ public:
   ostream& Dump(ostream & save);
   
 private:
-  // Propagation hypothesis management
-  void CleanMeshOnPropagationChain(const TopoDS_Shape& theMainEdge);
-  //
   
 protected:
   int                        _id;           // id given by creator (unique within the creator instance)
@@ -278,17 +252,17 @@ protected:
   int                        _idDoc;        // id given by SMESHDS_Document
   int                        _groupId;      // id generator for group objects
   bool                       _isShapeToMesh;// set to true when a shape is given (only once)
-  list <SMESH_subMesh *>     _subMeshesUsingHypothesisList;
+  std::list <SMESH_subMesh*> _subMeshesUsingHypothesisList;
   SMESHDS_Document *         _myDocument;
   SMESHDS_Mesh *             _myMeshDS;
-  map <int, SMESH_subMesh *> _mapSubMesh;
-  map <int, SMESH_Group *>   _mapGroup;
+  std::map <int, SMESH_subMesh*> _mapSubMesh;
+  std::map <int, SMESH_Group*>   _mapGroup;
   SMESH_Gen *                _gen;
+
+  bool                       _isAutoColor;
   
   TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors;
 
-  IndexedMapOfChain _mapPropagationChains; // Propagation hypothesis management
-
 protected:
   SMESH_Mesh() {};
   SMESH_Mesh(const SMESH_Mesh&) {};