X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_FaceSide.hxx;h=37e025f824eeb94b8200f47280e4e0e6ab20762b;hp=b7d79b9929c46cabd9e59a148805c204e1c35928;hb=1cea00918546e5ab79c0d74d49d7820d431f3c85;hpb=6bac08c1a81f34d3f21c550bd92f83654b2546a5 diff --git a/src/StdMeshers/StdMeshers_FaceSide.hxx b/src/StdMeshers/StdMeshers_FaceSide.hxx index b7d79b992..37e025f82 100644 --- a/src/StdMeshers/StdMeshers_FaceSide.hxx +++ b/src/StdMeshers/StdMeshers_FaceSide.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 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 @@ -97,7 +97,9 @@ public: * \brief Create a side from an UVPtStructVec */ StdMeshers_FaceSide(UVPtStructVec& theSideNodes, - const TopoDS_Face& theFace = TopoDS_Face()); + 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, @@ -191,15 +193,36 @@ 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 */ inline double Parameter(double U, TopoDS_Edge & edge) const; + /* + * \brief Return edge ID and parameter on edge by normalized parameter + */ + inline double Parameter(double U, int & edgeID) const; /*! * \brief Return UV by normalized parameter */ @@ -229,13 +252,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 */ @@ -258,20 +289,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; @@ -289,6 +320,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; @@ -323,9 +355,11 @@ inline int StdMeshers_FaceSide::EdgeIndex( double U ) const //================================================================================ /*! - * \brief Return edge and parameter on edge by normalized parameter - * \param U - the parameter + * \brief Return an edge and parameter on the edge by a normalized parameter + * \param U - normalized parameter * \retval double - pameter on a curve + * \ warning The returned parameter can be inaccurate if the edge is non-uniformly + * parametrized. Use Value2d() to get a precise point on the edge */ //================================================================================ @@ -340,7 +374,26 @@ inline double StdMeshers_FaceSide::Parameter(double U, TopoDS_Edge & edge) const //================================================================================ /*! - * \brief Return first normalized parameter of the i-the edge + * \brief Return an edge ID and parameter on the edge by a normalized parameter + * \param U - normalized parameter + * \retval double - pameter on a curve + * \ warning The returned parameter can be inaccurate if the edge is non-uniformly + * parametrized. Use Value2d() to get a precise point on the edge + */ +//================================================================================ + +inline double StdMeshers_FaceSide::Parameter(double U, int & edgeID) const +{ + int i = EdgeIndex( U ); + edgeID = myEdgeID[ i ]; + double prevU = i ? myNormPar[ i-1 ] : 0; + double r = ( U - prevU )/ ( myNormPar[ i ] - prevU ); + return myFirst[i] * ( 1 - r ) + myLast[i] * r; +} + +//================================================================================ +/*! + * \brief Return first normalized parameter of the i-th edge */ //================================================================================ @@ -351,7 +404,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 */ //================================================================================ @@ -362,7 +415,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 */ //================================================================================ @@ -373,7 +426,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 */ //================================================================================