Salome HOME
[bos #40653][CEA] New mesh import export formats with meshio.
[modules/smesh.git] / src / SMESHUtils / SMESH_MeshAlgos.hxx
index beebbe79687b7ab7ab047216dac7c5d4d1f01f41..564ab11fe22cf5ee1fbeb05e9b7ec0a28fada2fc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -168,6 +168,13 @@ namespace SMESH_MeshAlgos
                              const gp_XY& t0, const gp_XY& t1, const gp_XY& t2,
                              double &    bc0, double &    bc1);
 
+  /*!
+   * \brief Intersect volume by a ray
+   */
+  bool IntersectRayVolume( const gp_Ax1& ray, const double rayLen,
+                           const SMDS_MeshElement* vol,
+                           double & tMin, double & tMax,
+                           int & iFacetMin, int & iFacetMax);
   /*!
    * Return a face having linked nodes n1 and n2 and which is
    * - not in avoidSet,
@@ -187,12 +194,24 @@ namespace SMESH_MeshAlgos
   SMESHUtils_EXPORT
   bool FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool normalized=true);
 
+  /*!
+   * \brief Return number of nodes common to two elements
+   */
+  SMESHUtils_EXPORT
+  int NbCommonNodes(const SMDS_MeshElement* e1,
+                    const SMDS_MeshElement* e2);
   /*!
    * \brief Return nodes common to two elements
    */
   SMESHUtils_EXPORT
   std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1,
                                                     const SMDS_MeshElement* e2);
+  /*!
+   * \brief Return true if a node is on a boundary of 2D mesh.
+   *        Optionally returns two neighboring boundary nodes (or more in non-manifold mesh)
+   */
+  SMESHUtils_EXPORT bool IsOn2DBoundary( const SMDS_MeshNode* node,
+                                         std::vector< const SMDS_MeshNode*> * neibors = nullptr );
   /*!
    * \brief Return true if node1 encounters first in the face and node2, after.
    *        The nodes are supposed to be neighbor nodes in the face.
@@ -219,6 +238,7 @@ namespace SMESH_MeshAlgos
 
   /*!
    * \brief Mark elements given by SMDS_Iterator
+   * \sa SMDS_Mesh::SetAllNodesNotMarked() and SMDS_Mesh::SetAllCellsNotMarked()
    */
   template< class ElemIter >
   void MarkElems( ElemIter it, const bool isMarked )
@@ -500,14 +520,15 @@ namespace SMESH_MeshAlgos
 
   /*!
    * Create a slot of given width around given 1D elements lying on a triangle mesh.
-   * The slot is consrtucted by cutting faces by cylindrical surfaces made around each segment.
+   * The slot is constructed by cutting faces by cylindrical surfaces made around each segment.
    * \return Edges located at the slot boundary
    */
   // Implemented in ./SMESH_Slot.cxx
   SMESHUtils_EXPORT
-  std::vector< Edge > MakeSlot( SMDS_ElemIteratorPtr segmentIt,
-                                double               width,
-                                SMDS_Mesh*           mesh);
+  std::vector< Edge > MakeSlot( SMDS_ElemIteratorPtr             segmentIt,
+                                double                           width,
+                                SMDS_Mesh*                       mesh,
+                                std::vector< SMDS_MeshGroup* > & groupsToUpdate);
 
 } // namespace SMESH_MeshAlgos