+ else
+ {
+ for ( ; u_node != u2node.end(); ++u_node, ++iPt )
+ {
+ if ( myNormPar[ iE ]-eps < u_node->first )
+ break; // u_node is at VERTEX of the next EDGE
+
+ UVPtStruct & uvPt = points[iPt];
+ uvPt.node = u_node->second;
+ // -- normParam, x, y --------------------------------
+ uvPt.normParam = u_node->first;
+ uvPt.x = uvPt.y = uvPt.normParam;
+ // -- U ----------------------------------------------
+ const SMDS_EdgePosition* epos =
+ dynamic_cast<const SMDS_EdgePosition*>(uvPt.node->GetPosition());
+ if ( epos ) {
+ uvPt.param = epos->GetUParameter();
+ }
+ else {
+ double r = ( uvPt.normParam - prevNormPar )/ paramSize;
+ uvPt.param = ( r > 0.5 ? myLast[iE] : myFirst[iE] );
+ }
+ // -- UV ---------------------------------------------
+ if ( !myC2d[ iE ].IsNull() ) {
+ gp_Pnt2d p = myC2d[ iE ]->Value( uvPt.param );
+ uvPt.u = p.X();
+ uvPt.v = p.Y();
+ }
+ else {
+ uvPt.u = uvPt.v = 1e+100;
+ }
+ }