X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Prism_3D.hxx;h=129a6e3e3d202d06c360084352d1a65baebc5544;hb=24dd5df5f053455d186962be79786dc9237a1a0e;hp=ccdf5457f3b4bff3502c8a483a84f530a42c54ab;hpb=87a7f0d0495483874b3fb322ffef2866d6bd30c6;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_Prism_3D.hxx b/src/StdMeshers/StdMeshers_Prism_3D.hxx index ccdf5457f..129a6e3e3 100644 --- a/src/StdMeshers/StdMeshers_Prism_3D.hxx +++ b/src/StdMeshers/StdMeshers_Prism_3D.hxx @@ -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 // @@ -31,16 +31,18 @@ #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 #include #include #include +#include #include #include #include @@ -53,10 +55,6 @@ namespace Prism_3D struct TNode; struct TPrismTopo; } -namespace StdMeshers_ProjectionUtils -{ - class TrsfFinder3D; -} class SMESHDS_SubMesh; class TopoDS_Edge; @@ -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; }; // ===============================================