X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Prism_3D.hxx;h=48c75ba0e2026d5d205848ac3d2ba0688605861c;hp=546bf4950b92281680bbc424827bcb9da51339ba;hb=096485adbe5e66ace1182bf6c49dc6853f437d9c;hpb=52d825495306f72048c8754aa5c86c6a390f8262 diff --git a/src/StdMeshers/StdMeshers_Prism_3D.hxx b/src/StdMeshers/StdMeshers_Prism_3D.hxx index 546bf4950..48c75ba0e 100644 --- a/src/StdMeshers/StdMeshers_Prism_3D.hxx +++ b/src/StdMeshers/StdMeshers_Prism_3D.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -29,15 +29,12 @@ #include "SMESH_StdMeshers.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_TypeOfPosition.hxx" #include "SMESHDS_Mesh.hxx" -#include "SMESH_Algo.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 @@ -185,6 +182,16 @@ class STDMESHERS_EXPORT StdMeshers_PrismAsBlock: public SMESH_Block return col_frw.first; } + /*! + * \brief Return pointer to column of nodes + * \param node - bottom node from which the returned column goes up + * \retval const TNodeColumn* - the found column + */ + bool HasNodeColumn(const SMDS_MeshNode* node) const + { + return myShapeIndex2ColumnMap.count( node->getshapeId() ); + } + /*! * \brief Return transformations to get coordinates of nodes of each internal layer * by nodes of the bottom. Layer is a set of nodes at a certain step @@ -270,7 +277,7 @@ private: TParam2ColumnMap* myParamToColumnMap; PSurface mySurface; TopoDS_Edge myBaseEdge; - map< int, PSurface > myShapeID2Surf; + std::map< int, PSurface > myShapeID2Surf; // first and last normalized params and orientaion for each component or it-self std::vector< std::pair< double, double> > myParams; // select my columns in myParamToColumnMap bool myIsForward; @@ -411,10 +418,21 @@ struct StdMeshers_Sweeper 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 + bool ComputeNodes( SMESH_MesherHelper& helper, const double tol, const bool allowHighBndError ); + bool CheckSameZ(); + + bool ComputeNodesOnStraightSameZ( SMESH_MesherHelper& helper ); + + bool ComputeNodesOnStraight( SMESH_MesherHelper& helper, + const TopoDS_Face& bottom, + const TopoDS_Face& top); + private: gp_XYZ bndPoint( int iP, int z ) const @@ -436,6 +454,9 @@ private: const double r, std::vector< gp_XYZ >& toIntPoints, std::vector< double >& int2BndDist); + + static void fillZColumn( TZColumn& zColumn, + TNodeColumn& nodes ); }; // =============================================== @@ -472,7 +493,7 @@ public: * \param nodeColumns - columns of nodes generated from nodes of a mesh face * \param helper - helper initialized by mesh and shape to add prisms to */ - static void AddPrisms( std::vector & nodeColumns, + static bool AddPrisms( std::vector & nodeColumns, SMESH_MesherHelper* helper); static bool IsApplicable(const TopoDS_Shape & aShape, bool toCheckAll); @@ -535,6 +556,11 @@ public: */ bool isSimpleBottom( const Prism_3D::TPrismTopo& thePrism ); + /*! + * \brief Defines if all "vertical" EDGEs are straight + */ + bool allVerticalEdgesStraight( const Prism_3D::TPrismTopo& thePrism ); + /*! * \brief Project mesh faces from a source FACE of one prism to * a source FACE of another prism