Salome HOME
23368: [CEA 1865] Possibility to define faces to mesh as a single one: transpatch...
[modules/smesh.git] / src / SMESH / SMESH_Algo.hxx
index 5c4b46cecb9b186cb2c881312fbde39ab1e80f54..e51b2329c32f7422f5b1a38f6a85b8b84f19ff22 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  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
@@ -35,8 +35,6 @@
 #include "SMESH_ComputeError.hxx"
 #include "SMESH_Hypothesis.hxx"
 
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Edge.hxx>
 #include <GeomAbs_Shape.hxx>
 
 #include <string>
@@ -54,6 +52,7 @@ class SMESH_Mesh;
 class SMESH_MesherHelper;
 class SMESH_ProxyMesh;
 class SMESH_subMesh;
+class TopoDS_Edge;
 class TopoDS_Face;
 class TopoDS_Shape;
 class TopoDS_Vertex;
@@ -179,10 +178,10 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
 
   /*!
    * \brief evaluates size of prospective mesh on a shape
-    * \param aMesh - the mesh
-    * \param aShape - the shape
-    * \param aNbElems - prospective number of elements by types
-    * \retval bool - is a success
+    \param aMesh - the mesh
+    \param aShape - the shape
+   *  \param aResMap - prospective number of elements by SMDSAbs_ElementType by a sub-mesh
+    \retval bool - is a success
    */
   virtual bool Evaluate(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape,
                         MapShapeNbElems& aResMap) = 0;
@@ -215,7 +214,7 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
    *  have a name (type) listed in the algorithm. Hypothesis associated to
    *  father shape -are not- taken into account (see GetUsedHypothesis)
    */
-  const list <const SMESHDS_Hypothesis *> &
+  const std::list <const SMESHDS_Hypothesis *> &
   GetAppliedHypothesis(SMESH_Mesh &         aMesh,
                        const TopoDS_Shape & aShape,
                        const bool           ignoreAuxiliary=true) const;
@@ -313,6 +312,7 @@ public:
    * \param theEdge - The geometrical edge of interest
    * \param theParams - The resulting vector of sorted node parameters
    * \retval bool - false if not all parameters are OK
+   * \warning Nodes moved to other geometry by MergeNodes() are NOT returned.
    */
   static bool GetNodeParamOnEdge(const SMESHDS_Mesh*     theMesh,
                                  const TopoDS_Edge&      theEdge,
@@ -325,17 +325,14 @@ public:
    * \param ignoreMediumNodes - to store medium nodes of quadratic elements or not
    * \param typeToCheck - type of elements to check for medium nodes
    * \retval bool - false if not all parameters are OK
+   * \warning Nodes moved to other geometry by MergeNodes() are NOT returned.
    */
   static bool GetSortedNodesOnEdge(const SMESHDS_Mesh*                        theMesh,
                                    const TopoDS_Edge&                         theEdge,
                                    const bool                                 ignoreMediumNodes,
                                    std::map< double, const SMDS_MeshNode* > & theNodes,
                                    const SMDSAbs_ElementType                  typeToCheck = SMDSAbs_All);
-  /*!
-   * Moved to SMESH_MesherHelper
-   */
-  // static bool IsReversedSubMesh (const TopoDS_Face&  theFace,
-  //                                SMESHDS_Mesh*       theMeshDS);
+
   /*!
    * \brief Compute length of an edge
     * \param E - the edge
@@ -343,7 +340,6 @@ public:
    */
   static double EdgeLength(const TopoDS_Edge & E);
 
-  //static int NumberOfWires(const TopoDS_Shape& S);
   int NumberOfPoints(SMESH_Mesh& aMesh,const TopoDS_Wire& W);
 
   /*!
@@ -352,7 +348,7 @@ public:
     * \param E2 - the 2nd edge
     * \retval GeomAbs_Shape - regularity at the junction between E1 and E2
    */
-  static GeomAbs_Shape Continuity(TopoDS_Edge E1, TopoDS_Edge E2);
+  static GeomAbs_Shape Continuity(const TopoDS_Edge& E1, const TopoDS_Edge& E2);
 
   /*!
    * \brief Return true if an edge can be considered as a continuation of another
@@ -367,16 +363,39 @@ public:
   /*!
    * \brief Return true if an edge has no 3D curve
    */
-  static bool isDegenerated( const TopoDS_Edge & E );
+  static bool isDegenerated( const TopoDS_Edge & E, const bool checkLength=false );
 
   /*!
    * \brief Return the node built on a vertex
     * \param V - the vertex
-    * \param meshDS - mesh
+    * \param meshDS - mesh data structure
     * \retval const SMDS_MeshNode* - found node or NULL
    */
   static const SMDS_MeshNode* VertexNode(const TopoDS_Vertex& V, const SMESHDS_Mesh* meshDS);
 
+  /*!
+   * \brief Return the node built on a vertex.
+   *        A node moved to other geometry by MergeNodes() is also returned.
+    * \param V - the vertex
+    * \param mesh - mesh
+    * \retval const SMDS_MeshNode* - found node or NULL
+   */
+  static const SMDS_MeshNode* VertexNode(const TopoDS_Vertex& V, const SMESH_Mesh* mesh);
+
+  /*!
+   * \brief Return the node built on a vertex.
+   *        A node moved to other geometry by MergeNodes() is also returned.
+    * \param V - the vertex
+    * \param edgeSM - sub-mesh of a meshed EDGE sharing the vertex
+    * \param mesh - the mesh
+    * \param checkV - if \c true, presence of a node on the vertex is checked
+    * \retval const SMDS_MeshNode* - found node or NULL
+   */
+  static const SMDS_MeshNode* VertexNode(const TopoDS_Vertex&   V,
+                                         const SMESHDS_SubMesh* edgeSM,
+                                         const SMESH_Mesh*      mesh,
+                                         const bool             checkV=true);
+
   enum EMeshError { MEr_OK = 0, MEr_HOLES, MEr_BAD_ORI, MEr_EMPTY };
 
   /*!
@@ -425,7 +444,7 @@ protected:
   bool _requireDiscreteBoundary;// GetDim()-1 mesh must be present. Default TRUE
   bool _requireShape;           // work with GetDim()-1 mesh bound to geom only. Default TRUE
   bool _supportSubmeshes;       // if !_requireDiscreteBoundary. Default FALSE
-  bool _neededLowerHyps[4];     // hyp dims needed by algo that !NeedDiscreteBoundary(). Df. FALSE
+  bool _neededLowerHyps[4];     // hyp dims needed by algo that !_requireDiscreteBoundary. Df. FALSE
 
   // indicates if quadratic mesh creation is required,
   // is usually set like this: _quadraticMesh = SMESH_MesherHelper::IsQuadraticSubMesh(shape)