X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_FaceSide.hxx;h=eb42bee5dbe8f43d21cb82b0bdbde2724f0676ca;hb=004925bca40d46c25cf9cc837193335163c2d44f;hp=2a4e1786fd1c4bb1da426ceb1ee466fc87035174;hpb=73df78c0c4187c339ddc0a814f047ffa8bbb3373;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_FaceSide.hxx b/src/StdMeshers/StdMeshers_FaceSide.hxx index 2a4e1786f..eb42bee5d 100644 --- a/src/StdMeshers/StdMeshers_FaceSide.hxx +++ b/src/StdMeshers/StdMeshers_FaceSide.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 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 @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -47,7 +48,6 @@ class SMESH_Mesh; class Adaptor2d_Curve2d; class Adaptor3d_Curve; class BRepAdaptor_CompCurve; -class TopoDS_Face; struct SMESH_ComputeError; class StdMeshers_FaceSide; @@ -93,6 +93,49 @@ public: const Handle(Geom2d_Curve)& theC2d=NULL, const double theUFirst=0., const double theULast=1.); + /*! + * \brief Create a side from an UVPtStructVec + */ + StdMeshers_FaceSide(UVPtStructVec& theSideNodes, + const TopoDS_Face& theFace = TopoDS_Face(), + const TopoDS_Edge& theEdge = TopoDS_Edge(), + SMESH_Mesh* theMesh = 0); + + // static "consrtuctors" + static StdMeshers_FaceSidePtr New(const TopoDS_Face& Face, + const TopoDS_Edge& Edge, + SMESH_Mesh* Mesh, + const bool IsForward, + const bool IgnoreMediumNodes, + SMESH_ProxyMesh::Ptr ProxyMesh = SMESH_ProxyMesh::Ptr()) + { return StdMeshers_FaceSidePtr + ( new StdMeshers_FaceSide( Face,Edge,Mesh,IsForward,IgnoreMediumNodes,ProxyMesh )); + } + static StdMeshers_FaceSidePtr New (const TopoDS_Face& Face, + std::list& Edges, + SMESH_Mesh* Mesh, + const bool IsForward, + const bool IgnoreMediumNodes, + SMESH_ProxyMesh::Ptr ProxyMesh = SMESH_ProxyMesh::Ptr()) + { return StdMeshers_FaceSidePtr + ( new StdMeshers_FaceSide( Face,Edges,Mesh,IsForward,IgnoreMediumNodes,ProxyMesh )); + } + static StdMeshers_FaceSidePtr New (const StdMeshers_FaceSide* Side, + const SMDS_MeshNode* Node, + const gp_Pnt2d* Pnt2d1, + const gp_Pnt2d* Pnt2d2=NULL, + const Handle(Geom2d_Curve)& C2d=NULL, + const double UFirst=0., + const double ULast=1.) + { return StdMeshers_FaceSidePtr + ( new StdMeshers_FaceSide( Side,Node,Pnt2d1,Pnt2d2,C2d,UFirst,ULast )); + } + static StdMeshers_FaceSidePtr New (UVPtStructVec& theSideNodes, + const TopoDS_Face& theFace = TopoDS_Face()) + { + return StdMeshers_FaceSidePtr( new StdMeshers_FaceSide( theSideNodes, theFace )); + } + /*! * \brief Return wires of a face as StdMeshers_FaceSide's */ @@ -100,7 +143,8 @@ public: SMESH_Mesh & theMesh, const bool theIgnoreMediumNodes, TError & theError, - SMESH_ProxyMesh::Ptr theProxyMesh = SMESH_ProxyMesh::Ptr()); + SMESH_ProxyMesh::Ptr theProxyMesh = SMESH_ProxyMesh::Ptr(), + const bool theCheckVertexNodes=true); /*! * \brief Change orientation of side geometry */ @@ -149,10 +193,27 @@ public: bool isXConst = 0, double constValue = 0) const; /*! - * \brief Return nodes in the order they encounter while walking along the side. + * \brief Return nodes in the order they encounter while walking along + * the while side or a specified EDGE. * For a closed side, the 1st point repeats at end */ - std::vector GetOrderedNodes() const; + std::vector GetOrderedNodes(int iE=-1) const; + + /*! + * \brief Return nodes of the i-th EDGE. + * Nodes moved to other geometry by MergeNodes() are also returned. + * \retval bool - is OK + */ + bool GetEdgeNodes(const size_t i, + std::vector& nodes, + bool inlude1stVertex=true, + bool inludeLastVertex=true) const; + + /*! + * \brief Return a node from the i-th VERTEX (count starts from zero) + * Nodes moved to other geometry by MergeNodes() are also returned. + */ + const SMDS_MeshNode* VertexNode(std::size_t i, bool* isMoved = 0) const; /*! * \brief Return edge and parameter on edge by normalized parameter @@ -179,7 +240,7 @@ public: */ int NbEdges() const { return myEdge.size(); } /*! - * \brief Return i-th wrapped edge (count starts from zero) + * \brief Return i-th edge (count starts from zero) */ const TopoDS_Edge& Edge(int i) const { return myEdge[i]; } /*! @@ -187,13 +248,21 @@ public: */ const std::vector& Edges() const { return myEdge; } /*! - * \brief Return 1st vertex of the i-the edge (count starts from zero) + * \brief Return the FACE + */ + const TopoDS_Face& Face() const { return myFace; } + /*! + * \brief Return 1st vertex of the i-th edge (count starts from zero) */ TopoDS_Vertex FirstVertex(int i=0) const; /*! - * \brief Return last vertex of the i-the edge (count starts from zero) + * \brief Return last vertex of the i-th edge (count starts from zero) */ TopoDS_Vertex LastVertex(int i=-1) const; + /*! + * \brief Return \c true if the chain of EDGEs is closed + */ + bool IsClosed() const; /*! * \brief Return side length */ @@ -216,20 +285,20 @@ public: */ inline Handle(Geom2d_Curve) Curve2d(int i) const; /*! - * \brief Return first normalized parameter of the i-the edge (count starts from zero) + * \brief Return first normalized parameter of the i-th edge (count starts from zero) */ inline double FirstParameter(int i) const; /*! - * \brief Return last normalized parameter of the i-the edge (count starts from zero) + * \brief Return last normalized parameter of the i-th edge (count starts from zero) */ inline double LastParameter(int i) const; /*! - * \brief Return first parameter of the i-the edge (count starts from zero). + * \brief Return first parameter of the i-th edge (count starts from zero). * EDGE orientation is taken into account */ inline double FirstU(int i) const; /*! - * \brief Return last parameter of the i-the edge (count starts from zero). + * \brief Return last parameter of the i-th edge (count starts from zero). * EDGE orientation is taken into account */ inline double LastU(int i) const; @@ -247,6 +316,7 @@ protected: void reverseProxySubmesh( const TopoDS_Edge& E ); // DON't FORGET to update Reverse() when adding one more vector! + TopoDS_Face myFace; std::vector myPoints, myFalsePoints; std::vector myEdge; std::vector myEdgeID; @@ -298,7 +368,7 @@ inline double StdMeshers_FaceSide::Parameter(double U, TopoDS_Edge & edge) const //================================================================================ /*! - * \brief Return first normalized parameter of the i-the edge + * \brief Return first normalized parameter of the i-th edge */ //================================================================================ @@ -309,7 +379,7 @@ inline double StdMeshers_FaceSide::FirstParameter(int i) const //================================================================================ /*! - * \brief Return ast normalized parameter of the i-the edge + * \brief Return ast normalized parameter of the i-th edge */ //================================================================================ @@ -320,7 +390,7 @@ inline double StdMeshers_FaceSide::LastParameter(int i) const //================================================================================ /*! - * \brief Return first parameter of the i-the edge + * \brief Return first parameter of the i-th edge */ //================================================================================ @@ -331,7 +401,7 @@ inline double StdMeshers_FaceSide::FirstU(int i) const //================================================================================ /*! - * \brief Return last parameter of the i-the edge + * \brief Return last parameter of the i-th edge */ //================================================================================