* \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,
*/
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
*/
* \brief Return all edges
*/
const std::vector<TopoDS_Edge>& 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)
*/
//================================================================================
/*!
- * \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
*/
//================================================================================
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