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=485081af0e6a2aacf7c0fd217c05b0dd57d996d1;hb=efbf393dc4a81161ddfeab879b2db6e17aeceb8b;hpb=0e017d4c87d670c01e72c0b4858ffcb9e47aa9ba diff --git a/src/StdMeshers/StdMeshers_FaceSide.hxx b/src/StdMeshers/StdMeshers_FaceSide.hxx index 485081af0..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, @@ -213,10 +215,14 @@ public: */ 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 */ @@ -245,6 +251,10 @@ public: * \brief Return all edges */ const std::vector& Edges() const { return myEdge; } + /*! + * \brief Return the FACE + */ + const TopoDS_Face& Face() const { return myFace; } /*! * \brief Return 1st vertex of the i-th edge (count starts from zero) */ @@ -345,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 */ //================================================================================ @@ -360,6 +372,25 @@ inline double StdMeshers_FaceSide::Parameter(double U, TopoDS_Edge & edge) const return myFirst[i] * ( 1 - r ) + myLast[i] * r; } +//================================================================================ +/*! + * \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