Salome HOME
Typo-fix by Kunda
[modules/smesh.git] / src / StdMeshers / StdMeshers_Prism_3D.hxx
index ccdf5457f3b4bff3502c8a483a84f530a42c54ab..873f671c9f48219095adbf9bd956ca8c1f676c03 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Prism_3D.hxx
 //  Module : SMESH
 //
 
 #include "SMESHDS_Mesh.hxx"
 #include "SMESH_Block.hxx"
+#include "SMESH_Comment.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_TypeDefs.hxx"
-#include "SMESH_Comment.hxx"
 #include "SMESH_subMesh.hxx"
+#include "StdMeshers_ProjectionUtils.hxx"
 
 #include <Adaptor2d_Curve2d.hxx>
 #include <Adaptor3d_Curve.hxx>
 #include <Adaptor3d_Surface.hxx>
 #include <BRepAdaptor_Surface.hxx>
+#include <TColStd_DataMapOfIntegerInteger.hxx>
 #include <TopTools_IndexedMapOfOrientedShape.hxx>
 #include <TopoDS_Face.hxx>
 #include <gp_Trsf.hxx>
@@ -53,10 +55,6 @@ namespace Prism_3D
   struct TNode;
   struct TPrismTopo;
 }
-namespace StdMeshers_ProjectionUtils
-{
-  class TrsfFinder3D;
-}
 class SMESHDS_SubMesh;
 class TopoDS_Edge;
 
@@ -252,7 +250,7 @@ class STDMESHERS_EXPORT StdMeshers_PrismAsBlock: public SMESH_Block
    *  \param columnsMap - node columns map of side face
    *  \param bottomEdge - the bootom edge
    *  \param sideFaceID - side face in-block ID
-   *  \retval bool - true if orienation coinside with in-block froward orienation
+   *  \retval bool - true if orientation coincide with in-block forward orientation
    */
   static bool IsForwardEdge(SMESHDS_Mesh*           meshDS,
                             const TParam2ColumnMap& columnsMap,
@@ -280,7 +278,7 @@ private:
     PSurface                        mySurface;
     TopoDS_Edge                     myBaseEdge;
     std::map< int, PSurface >       myShapeID2Surf;
-    // first and last normalized params and orientaion for each component or it-self
+    // first and last normalized params and orientation for each component or it-self
     std::vector< std::pair< double, double> > myParams; // select my columns in myParamToColumnMap
     bool                            myIsForward;
     std::vector< TSideFace* >       myComponents;
@@ -417,23 +415,22 @@ private:
  */
 struct StdMeshers_Sweeper
 {
+  // input data
+  SMESH_MesherHelper*         myHelper;
+  TopoDS_Face                 myBotFace;
+  TopoDS_Face                 myTopFace;
   std::vector< TNodeColumn* > myBndColumns; // boundary nodes
+  // output data
   std::vector< TNodeColumn* > myIntColumns; // internal nodes
 
-  typedef std::vector< double > TZColumn;
-  std::vector< TZColumn > myZColumns; // Z distribution of boundary nodes
-
-  bool ComputeNodes( SMESH_MesherHelper& helper,
-                     const double        tol,
-                     const bool          allowHighBndError );
+  bool ComputeNodesByTrsf( const double tol,
+                           const bool   allowHighBndError );
 
   bool CheckSameZ();
 
-  bool ComputeNodesOnStraightSameZ( SMESH_MesherHelper& helper );
+  bool ComputeNodesOnStraightSameZ();
 
-  bool ComputeNodesOnStraight( SMESH_MesherHelper& helper,
-                               const TopoDS_Face&  bottom,
-                               const TopoDS_Face&  top);
+  bool ComputeNodesOnStraight();
 
 private:
 
@@ -443,22 +440,36 @@ private:
   gp_XYZ intPoint( int iP, int z ) const
   { return SMESH_TNodeXYZ( (*myIntColumns[ iP ])[ z ]); }
 
-  static bool projectIntPoints(const std::vector< gp_XYZ >& fromBndPoints,
-                               const std::vector< gp_XYZ >& toBndPoints,
-                               const std::vector< gp_XYZ >& fromIntPoints,
-                               std::vector< gp_XYZ >&       toIntPoints,
-                               StdMeshers_ProjectionUtils::TrsfFinder3D& trsf,
-                               std::vector< gp_XYZ > *      bndError);
-
-  static void applyBoundaryError(const std::vector< gp_XYZ >& bndPoints,
-                                 const std::vector< gp_XYZ >& bndError1,
-                                 const std::vector< gp_XYZ >& bndError2,
-                                 const double                 r,
-                                 std::vector< gp_XYZ >&       toIntPoints,
-                                 std::vector< double >&       int2BndDist);
+  bool projectIntPoints(const std::vector< gp_XYZ >& fromBndPoints,
+                        const std::vector< gp_XYZ >& toBndPoints,
+                        const std::vector< gp_XYZ >& fromIntPoints,
+                        std::vector< gp_XYZ >&       toIntPoints,
+                        const double                 r,
+                        StdMeshers_ProjectionUtils::TrsfFinder3D& trsf,
+                        std::vector< gp_XYZ > *      bndError);
 
+  typedef std::vector< double > TZColumn;
   static void fillZColumn( TZColumn&    zColumn,
                            TNodeColumn& nodes );
+
+  void prepareTopBotDelaunay();
+  bool findDelaunayTriangles();
+
+  std::vector< TZColumn >                 myZColumns; // Z distribution of boundary nodes
+
+  StdMeshers_ProjectionUtils::DelaunayPtr myTopDelaunay;
+  StdMeshers_ProjectionUtils::DelaunayPtr myBotDelaunay;
+  TColStd_DataMapOfIntegerInteger         myNodeID2ColID;
+
+  // top and bottom Delaulay triangles including an internal column
+  struct TopBotTriangles
+  {
+    double myBotBC[3], myTopBC[3]; // barycentric coordinates of a node within a triangle
+    int    myBotTriaNodes[3], myTopTriaNodes[3]; // indices of boundary columns
+    TopBotTriangles();
+    void SetTopByBottom();
+  };
+  std::vector< TopBotTriangles> myTopBotTriangles;
 };
 
 // ===============================================
@@ -468,7 +479,7 @@ private:
 class STDMESHERS_EXPORT StdMeshers_Prism_3D: public SMESH_3D_Algo
 {
 public:
-  StdMeshers_Prism_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Prism_3D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Prism_3D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,