+ gp_Pnt2d uv;
+ if ( faceProj && !curve.IsNull() )
+ {
+ uv = pcurve->Value( u );
+ gp_Vec tangent; gp_Pnt p; gp_Vec du, dv;
+ curve->D1( u, p, tangent );
+ if ( reverse )
+ tangent.Reverse();
+ _surface->D1( uv.X(), uv.Y(), p, du, dv );
+ gp_Vec faceNorm = du ^ dv;
+ gp_Vec normal = faceNorm ^ tangent;
+ normal.Normalize();
+ p = pOut.XYZ() + normal.XYZ() * /*1e-2 * */_hyp->GetTotalThickness() / _hyp->GetNumberLayers();
+ faceProj->Perform( p );
+ if ( !faceProj->IsDone() || faceProj->NbPoints() < 1 )
+ return setLayerEdgeData( lEdge, u, pcurve, curve, p, reverse, NULL );
+ Quantity_Parameter U,V;
+ faceProj->LowerDistanceParameters(U,V);
+ lEdge._normal2D.SetCoord( U - uv.X(), V - uv.Y() );
+ lEdge._normal2D.Normalize();
+ }
+ else
+ {
+ gp_Vec2d tangent;
+ pcurve->D1( u, uv, tangent );
+ tangent.Normalize();
+ if ( reverse )
+ tangent.Reverse();
+ lEdge._normal2D.SetCoord( -tangent.Y(), tangent.X() );
+ }