-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 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
// 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
//
std::list< int > myNbEdgesInWires;
bool myNotQuadOnTop;
+ mutable SMESH_subMesh* myAlgoSM; // sub-mesh with algo which computed myBottom
size_t NbWires() const { return myNbEdgesInWires.size(); }
{ return myShapeIDMap.FindIndex( shape ); }
/*!
- * \brief Check curve orientation of a bootom edge
+ * \brief Check curve orientation of a bottom edge
* \param meshDS - mesh DS
* \param columnsMap - node columns map of side face
- * \param bottomEdge - the bootom edge
+ * \param bottomEdge - the bottom 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,
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;
*/
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 );
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;
};
// ===============================================
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,