Salome HOME
Typo-fix by Kunda
[modules/smesh.git] / src / StdMeshers / StdMeshers_Prism_3D.hxx
index 51a9c4e716fa480e33a35a5096ab619fca97fc1e..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
 //
@@ -250,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,
@@ -278,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;
@@ -415,20 +415,13 @@ private:
  */
 struct StdMeshers_Sweeper
 {
-  SMESH_MesherHelper*                     myHelper;
-  TopoDS_Face                             myBotFace;
-  TopoDS_Face                             myTopFace;
-
-  std::vector< TNodeColumn* >             myBndColumns; // boundary nodes
-  std::vector< TNodeColumn* >             myIntColumns; // internal nodes
-
-  typedef std::vector< double > TZColumn;
-  std::vector< TZColumn >                 myZColumns; // Z distribution of boundary nodes
-
-  StdMeshers_ProjectionUtils::DelaunayPtr myTopDelaunay;
-  StdMeshers_ProjectionUtils::DelaunayPtr myBotDelaunay;
-  TColStd_DataMapOfIntegerInteger         myNodeID2ColID;
-
+  // 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
 
   bool ComputeNodesByTrsf( const double tol,
                            const bool   allowHighBndError );
@@ -447,24 +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;
 };
 
 // ===============================================
@@ -474,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,