Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / StdMeshers / StdMeshers_QuadToTriaAdaptor.hxx
index 3f7f273c1d2291c44be43dca8767480efd42836c..19a6527a40eddb880c0abded1cc14dd44324ccab 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -44,6 +44,7 @@ class gp_Vec;
 #include <vector>
 
 #include <TopoDS_Shape.hxx>
+#include <NCollection_DataMap.hxx>
 
 /*!
  * \brief "Transforms" quadrilateral faces into triangular ones by creation of pyramids
@@ -72,13 +73,14 @@ protected:
                   gp_Pnt& PC, gp_Vec& VNorm,
                   const SMDS_MeshElement** volumes=0);
 
-  void LimitHeight (gp_Pnt&                                  Papex,
+  bool LimitHeight (gp_Pnt&                                  Papex,
                     const gp_Pnt&                            PC,
                     const TColgp_Array1OfPnt&                PN,
                     const std::vector<const SMDS_MeshNode*>& FNodes,
                     SMESH_Mesh&                              aMesh,
                     const SMDS_MeshElement*                  NotCheckedFace,
-                    const bool                               UseApexRay);
+                    const bool                               UseApexRay,
+                    const TopoDS_Shape&                      Shape = TopoDS_Shape());
 
   bool Compute2ndPart(SMESH_Mesh&                                 aMesh,
                       const std::vector<const SMDS_MeshElement*>& pyramids);
@@ -92,11 +94,19 @@ protected:
                      std::set<const SMDS_MeshNode*>& nodesToMove,
                      const bool                      isRecursion = false);
 
+  bool DecreaseHeightDifference( const SMDS_MeshElement* pyram,
+                                 const double            h2 );
 
   TopoDS_Shape                      myShape;
   std::set<const SMDS_MeshElement*> myRemovedTrias;
   std::list< const SMDS_MeshNode* > myDegNodes;
   const SMESH_ElementSearcher*      myElemSearcher;
+
+  NCollection_DataMap< const SMDS_MeshElement*, double > myPyramHeight2;
+
+  // work buffers of DecreaseHeightDifference()
+  std::vector< const SMDS_MeshElement* > myAdjPyrams;
+  std::vector<const SMDS_MeshNode *>     myNodes;
 };
 
 #endif