0024023: Revamp the OCCT Handle -- downcast (automatic)
[occt.git] / src / ChFi3d / ChFi3d_Builder_0.cxx
old mode 100755 (executable)
new mode 100644 (file)
index c32b57d..445f22a
@@ -1,7 +1,18 @@
-// File:      ChFi3d_Builder_0.cxx
-// Created:   Thu Dec 16 15:54:39 1993
-// Author:    Isabelle GRIGNON
-// Copyright: OPEN CASCADE 1993
+// Created on: 1993-12-16
+// Created by: Isabelle GRIGNON
+// Copyright (c) 1993-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
 
 //  modified by ofv - Thu Feb 26 11:18:16 2004 OCC5246
 //  Modified by skv - Fri Oct 24 14:24:47 2003 OCC4077
 #include <IntAna_QuadQuadGeo.hxx>
 #include <IntAna2d_AnaIntersection.hxx>
 #include <IntRes2d_IntersectionPoint.hxx>
-#include <IntPatch_ThePWalkingInter.hxx>
+#include <IntWalk_PWalking.hxx>
 #include <IntPatch_WLine.hxx>
 #include <Geom2dInt_GInter.hxx>
 #include <GeomInt_WLApprox.hxx>
 
 #include <ChFi3d_Builder_0.hxx>
 
-#ifdef DEB
+#ifdef OCCT_DEBUG
 #include <OSD_Chronometer.hxx>
 extern Standard_Boolean ChFi3d_GetcontextFORCEBLEND(); 
 extern Standard_Boolean ChFi3d_GettraceDRAWINT();
@@ -163,15 +174,16 @@ extern void ChFi3d_ResultChron(OSD_Chronometer & ch,Standard_Real& time);
 
 #include <GeomAdaptor_HCurve.hxx>
 #include <BRepAdaptor_HSurface.hxx>
+#include <TopOpeBRepDS_SurfaceCurveInterference.hxx>
 
 //=======================================================================
 //function : ChFi3d_InPeriod
 //purpose  : 
 //=======================================================================
 Standard_Real ChFi3d_InPeriod(const Standard_Real U, 
-                              const Standard_Real UFirst, 
-                              const Standard_Real ULast,
-                              const Standard_Real Eps)
+  const Standard_Real UFirst, 
+  const Standard_Real ULast,
+  const Standard_Real Eps)
 {
   const Standard_Real period = ULast - UFirst;
   Standard_Real u = U;
@@ -181,25 +193,25 @@ Standard_Real ChFi3d_InPeriod(const Standard_Real U,
   return u;
 }
 //=======================================================================
-//function : Boite 
-//purpose  : Calcul des min/max uv du conge a intersecter.
+//function : Box 
+//purpose  : Calculation of min/max uv of the fillet to intersect.
 //=======================================================================
 void ChFi3d_Boite(const gp_Pnt2d& p1,const gp_Pnt2d& p2,
-                  Standard_Real& mu,Standard_Real& Mu,
-                  Standard_Real& mv,Standard_Real& Mv)
+  Standard_Real& mu,Standard_Real& Mu,
+  Standard_Real& mv,Standard_Real& Mv)
 {
   mu = Min(p1.X(),p2.X()); Mu = Max(p1.X(),p2.X());
   mv = Min(p1.Y(),p2.Y()); Mv = Max(p1.Y(),p2.Y());
 }
 //=======================================================================
-//function : Boite 
-//purpose  : Calcul des min/max uv du conge a intersecter.
+//function : Box
+//purpose  : Calculation of min/max uv of the fillet to intersect.
 //=======================================================================
 void ChFi3d_Boite(const gp_Pnt2d& p1,const gp_Pnt2d& p2,
-                  const gp_Pnt2d& p3,const gp_Pnt2d& p4,
-                  Standard_Real& Du,Standard_Real& Dv,
-                  Standard_Real& mu,Standard_Real& Mu,
-                  Standard_Real& mv,Standard_Real& Mv)
+  const gp_Pnt2d& p3,const gp_Pnt2d& p4,
+  Standard_Real& Du,Standard_Real& Dv,
+  Standard_Real& mu,Standard_Real& Mu,
+  Standard_Real& mv,Standard_Real& Mv)
 {
   Standard_Real a,b;
   a = Min(p1.X(),p2.X());  b = Min(p3.X(),p4.X()); mu = Min(a,b);
@@ -210,11 +222,11 @@ void ChFi3d_Boite(const gp_Pnt2d& p1,const gp_Pnt2d& p2,
   Dv = Mv - mv;
 }
 //=======================================================================
-//function : EnlargeBox et ses amis.
+//function : EnlargeBox and its friends.
 //purpose  : 
 //=======================================================================
 static Handle(Adaptor3d_HSurface) Geometry(TopOpeBRepDS_DataStructure& DStr,
-                                           const Standard_Integer      ind)
+  const Standard_Integer      ind)
 {
   if(ind == 0) return Handle(Adaptor3d_HSurface)();
   if(ind > 0) {
@@ -235,8 +247,8 @@ static Handle(Adaptor3d_HSurface) Geometry(TopOpeBRepDS_DataStructure& DStr,
 //purpose  : 
 //=======================================================================
 void ChFi3d_SetPointTolerance(TopOpeBRepDS_DataStructure& DStr,
-                              const Bnd_Box&              box,
-                              const Standard_Integer      IP)
+  const Bnd_Box&              box,
+  const Standard_Integer      IP)
 {
   Standard_Real a,b,c,d,e,f,vtol;
   box.Get(a,b,c,d,e,f); 
@@ -250,10 +262,10 @@ void ChFi3d_SetPointTolerance(TopOpeBRepDS_DataStructure& DStr,
 //purpose  : 
 //=======================================================================
 void ChFi3d_EnlargeBox(const Handle(Geom_Curve)& C,
-                       const Standard_Real       wd,
-                       const Standard_Real       wf,
-                       Bnd_Box&                  box1,
-                       Bnd_Box&                  box2)
+  const Standard_Real       wd,
+  const Standard_Real       wf,
+  Bnd_Box&                  box1,
+  Bnd_Box&                  box2)
 {
   box1.Add(C->Value(wd));
   box2.Add(C->Value(wf));
@@ -263,11 +275,11 @@ void ChFi3d_EnlargeBox(const Handle(Geom_Curve)& C,
 //purpose  : 
 //=======================================================================
 void ChFi3d_EnlargeBox(const Handle(Adaptor3d_HSurface)& S,
-                       const Handle(Geom2d_Curve)&     PC,
-                       const Standard_Real             wd,
-                       const Standard_Real             wf,
-                       Bnd_Box&                        box1,
-                       Bnd_Box&                        box2)
+  const Handle(Geom2d_Curve)&     PC,
+  const Standard_Real             wd,
+  const Standard_Real             wf,
+  Bnd_Box&                        box1,
+  Bnd_Box&                        box2)
 {
   Standard_Real u,v;
   PC->Value(wd).Coord(u,v);
@@ -280,9 +292,9 @@ void ChFi3d_EnlargeBox(const Handle(Adaptor3d_HSurface)& S,
 //purpose  : 
 //=======================================================================
 void ChFi3d_EnlargeBox(const TopoDS_Edge&           E,
-                       const TopTools_ListOfShape&  LF,
-                       const Standard_Real          w,
-                       Bnd_Box&                     box)
+  const TopTools_ListOfShape&  LF,
+  const Standard_Real          w,
+  Bnd_Box&                     box)
 
 {
   BRepAdaptor_Curve BC(E);
@@ -301,11 +313,11 @@ void ChFi3d_EnlargeBox(const TopoDS_Edge&           E,
 //purpose  : 
 //=======================================================================
 void ChFi3d_EnlargeBox(TopOpeBRepDS_DataStructure&    DStr,
-                       const Handle(ChFiDS_Stripe)&   st, 
-                       const Handle(ChFiDS_SurfData)& sd,
-                       Bnd_Box&                       b1,
-                       Bnd_Box&                       b2,
-                       const Standard_Boolean         isfirst)
+  const Handle(ChFiDS_Stripe)&   st, 
+  const Handle(ChFiDS_SurfData)& sd,
+  Bnd_Box&                       b1,
+  Bnd_Box&                       b2,
+  const Standard_Boolean         isfirst)
 {
   Standard_Real u,v;
   const ChFiDS_CommonPoint& cp1 = sd->Vertex(isfirst,1);
@@ -369,9 +381,9 @@ void ChFi3d_EnlargeBox(TopOpeBRepDS_DataStructure&    DStr,
 //purpose  : 
 //=======================================================================
 void ChFi3d_conexfaces(const TopoDS_Edge& E,
-                       TopoDS_Face&       F1,
-                       TopoDS_Face&       F2,
-                       const ChFiDS_Map&  EFMap)
+  TopoDS_Face&       F1,
+  TopoDS_Face&       F2,
+  const ChFiDS_Map&  EFMap)
 {
   TopTools_ListIteratorOfListOfShape It;
   F1.Nullify();
@@ -383,7 +395,7 @@ void ChFi3d_conexfaces(const TopoDS_Edge& E,
     else {
       F2 = TopoDS::Face(It.Value());
       if(!F2.IsSame(F1) || BRep_Tool::IsClosed(E,F1)) {
-       break;
+        break;
       }
       else F2.Nullify();
     }
@@ -391,10 +403,10 @@ void ChFi3d_conexfaces(const TopoDS_Edge& E,
 }
 //=======================================================================
 //function : EdgeState
-//purpose  : examun des concavites pour les sommets a 3 aretes.
+//purpose  : check concavities for the tops with 3 edges.
 //=======================================================================
 ChFiDS_State ChFi3d_EdgeState(TopoDS_Edge* E,
-                              const ChFiDS_Map&  EFMap)
+  const ChFiDS_Map&  EFMap)
 {
   ChFiDS_State sst;
   Standard_Integer i,j;
@@ -425,9 +437,9 @@ ChFiDS_State ChFi3d_EdgeState(TopoDS_Edge* E,
     else F[2] = F3;
     if(F5.IsSame(F[2])) F[1] = F6;
     else F[1] = F5;
-    
+
   }
-  
+
   if(F[0].IsNull() || F[1].IsNull() || F[2].IsNull()) sst = ChFiDS_FreeBoundary;
   else{
     TopAbs_Orientation o01,o02,o11,o12,o21,o22;
@@ -442,13 +454,12 @@ ChFiDS_State ChFi3d_EdgeState(TopoDS_Edge* E,
 }
 //=======================================================================
 //function : evalconti
-//purpose  : Methode tres rapide, a la limite de l imposture pour
-//           coder les regularites CN. Il faudra affiner le traitement
-//           quand le bug reviendra.
+//purpose  : Method very fast to code regularities CN. It is necessary to 
+//           refine the processing.
 //=======================================================================
 GeomAbs_Shape ChFi3d_evalconti(const TopoDS_Edge& /*E*/,
-                               const TopoDS_Face& F1,
-                               const TopoDS_Face& F2)
+  const TopoDS_Face& F1,
+  const TopoDS_Face& F2)
 {
   GeomAbs_Shape cont = GeomAbs_G1;
   if(!F1.IsSame(F2)) return cont;
@@ -457,8 +468,8 @@ GeomAbs_Shape ChFi3d_evalconti(const TopoDS_Edge& /*E*/,
   BRepAdaptor_Surface S(F,Standard_False);
   GeomAbs_SurfaceType typ = S.GetType();
   if(typ != GeomAbs_Cone && 
-     typ != GeomAbs_Sphere && 
-     typ != GeomAbs_Torus) return cont;
+    typ != GeomAbs_Sphere && 
+    typ != GeomAbs_Torus) return cont;
   return GeomAbs_CN;
 }
 //modified by NIZNHY-PKV Wed Dec 15 11:22:35 2010f
@@ -467,9 +478,9 @@ GeomAbs_Shape ChFi3d_evalconti(const TopoDS_Edge& /*E*/,
 //purpose  : 
 //=======================================================================
 Standard_Boolean ChFi3d_KParticular (const Handle(ChFiDS_Spine)& Spine,
-                                    const Standard_Integer      IE,
-                                    const BRepAdaptor_Surface&  S1,
-                                    const BRepAdaptor_Surface&  S2)
+  const Standard_Integer      IE,
+  const BRepAdaptor_Surface&  S1,
+  const BRepAdaptor_Surface&  S2)
 {
   Standard_Boolean bRet;
   //
@@ -538,31 +549,29 @@ Standard_Boolean ChFi3d_KParticular (const Handle(ChFiDS_Spine)& Spine,
 //modified by NIZNHY-PKV Wed Dec 15 11:22:43 2010t
 //=======================================================================
 //function : BoundFac
-//purpose  : Resize les bornes d une surface au voisinage de la boite 
-//           donnee. Utile pour les intersections dont on connait les
-//           extremites. 
+//purpose  : Resize the limits of surface adjacent to the given box 
+//           Useful for intersections with known extremities. 
 //=======================================================================
 void ChFi3d_BoundFac(BRepAdaptor_Surface& S,
-                     const Standard_Real uumin,
-                     const Standard_Real uumax,
-                     const Standard_Real vvmin,
-                     const Standard_Real vvmax,
-                     const Standard_Boolean checknaturalbounds)
+  const Standard_Real uumin,
+  const Standard_Real uumax,
+  const Standard_Real vvmin,
+  const Standard_Real vvmax,
+  const Standard_Boolean checknaturalbounds)
 {
   ChFi3d_BoundSrf(S.ChangeSurface(), uumin,uumax,vvmin,vvmax,checknaturalbounds);
 }
 //=======================================================================
 //function : ChFi3d_BoundSrf
-//purpose  : Resize les bornes d une surface au voisinage de la boite 
-//           donnee. Utile pour les intersections dont on connait les
-//           extremites. 
+//purpose  : Resize the limits of surface adjacent to the given box 
+//           Useful for intersections with known extremities.
 //=======================================================================
 void ChFi3d_BoundSrf(GeomAdaptor_Surface& S,
-                     const Standard_Real uumin,
-                     const Standard_Real uumax,
-                     const Standard_Real vvmin,
-                     const Standard_Real vvmax,
-                     const Standard_Boolean checknaturalbounds)
+  const Standard_Real uumin,
+  const Standard_Real uumax,
+  const Standard_Real vvmin,
+  const Standard_Real vvmax,
+  const Standard_Boolean checknaturalbounds)
 {
   Standard_Real umin = uumin, umax = uumax, vmin = vvmin, vmax = vvmax; 
   Handle(Geom_Surface) surface = S.Surface();
@@ -581,14 +590,14 @@ void ChFi3d_BoundSrf(GeomAdaptor_Surface& S,
   Standard_Real Stepu = umax - umin;
   Standard_Real Stepv = vmax - vmin;
 
-  //On table sur le fait que la boite uv est non nulle dans
-  //une des directions au moins.
+  //It is supposed that box uv is not null in at least 
+  //one direction.
   Standard_Real scalu = S.UResolution(1.);
   Standard_Real scalv = S.VResolution(1.);
 
   Standard_Real step3du = Stepu/scalu; 
   Standard_Real step3dv = Stepv/scalv;
-  
+
   if(step3du > step3dv) Stepv = step3du*scalv;
   if(step3dv > step3du) Stepu = step3dv*scalu;
 
@@ -610,36 +619,36 @@ void ChFi3d_BoundSrf(GeomAdaptor_Surface& S,
 //purpose  : 
 //=======================================================================
 Standard_Boolean  ChFi3d_InterPlaneEdge (Handle(Adaptor3d_HSurface)& Plan,
-                                         Handle(Adaptor3d_HCurve)&  C,
-                                         Standard_Real& W,
-                                         const Standard_Boolean Sens,
-                                         const Standard_Real tolc)
+  Handle(Adaptor3d_HCurve)&  C,
+  Standard_Real& W,
+  const Standard_Boolean Sens,
+  const Standard_Real tolc)
 { 
   IntCurveSurface_HInter Intersection;
   Standard_Integer isol = 0, nbp ,iip;
   Standard_Real uf = C->FirstParameter(),ul = C->LastParameter();
   Standard_Real CW;
-  
+
   Intersection.Perform(C,Plan);
-  
+
   if(Intersection.IsDone()) {
     nbp = Intersection.NbPoints();
     for (iip = 1; iip <= nbp; iip++) {
       CW = Intersection.Point(iip).W();
       if(C->IsPeriodic())
-       CW = ElCLib::InPeriod(CW,uf-tolc,uf-tolc+C->Period());
+        CW = ElCLib::InPeriod(CW,uf-tolc,uf-tolc+C->Period());
       if(uf - tolc <= CW && ul + tolc >= CW) {
-       if (isol == 0) {
-         isol = iip; W = CW;
-       }
-       else {
-         if      ( Sens && CW < W) {
-           W = CW; isol = iip;
-         }
-         else if (!Sens && CW > W) {
-           W = CW; isol = iip;
-         }
-       }
+        if (isol == 0) {
+          isol = iip; W = CW;
+        }
+        else {
+          if      ( Sens && CW < W) {
+            W = CW; isol = iip;
+          }
+          else if (!Sens && CW > W) {
+            W = CW; isol = iip;
+          }
+        }
       }
     }
   }
@@ -651,19 +660,18 @@ Standard_Boolean  ChFi3d_InterPlaneEdge (Handle(Adaptor3d_HSurface)& Plan,
 //purpose  : 
 //=======================================================================
 void ChFi3d_ExtrSpineCarac(const TopOpeBRepDS_DataStructure& DStr,
-                          const Handle(ChFiDS_Stripe)& cd,
-                          const Standard_Integer i,
-                          const Standard_Real p,
-                          const Standard_Integer jf,
-                          const Standard_Integer sens,
-                          gp_Pnt& P,
-                          gp_Vec& V,
-                          Standard_Real& R) 
-     //voir s il ne faudrait pas rajouter D1,D2 et DR
+  const Handle(ChFiDS_Stripe)& cd,
+  const Standard_Integer i,
+  const Standard_Real p,
+  const Standard_Integer jf,
+  const Standard_Integer sens,
+  gp_Pnt& P,
+  gp_Vec& V,
+  Standard_Real& R) //check if it is necessary to add D1,D2 and DR
 {
-  // Attention pour les surfaces approximees on assume que
-  // le parametrage de la pcurve est le meme que celui de 
-  // l elspine qui a servi a la construction.
+  // Attention for approximated surfaces it is assumed that e
+  // the parameters of the pcurve are the same as of  
+  // elspine used for its construction.
   const Handle(Geom_Surface)& fffil = 
     DStr.Surface(cd->SetOfSurfData()->Value(i)->Surf()).Surface();
   gp_Pnt2d pp = cd->SetOfSurfData()->Value(i)->Interference(jf).
@@ -688,15 +696,15 @@ void ChFi3d_ExtrSpineCarac(const TopOpeBRepDS_DataStructure& DStr,
     break;
   default:
     { Standard_Integer nbelspine;
-      const Handle(ChFiDS_Spine)& sp = cd->Spine();
-      Handle(ChFiDS_FilSpine) fsp = Handle(ChFiDS_FilSpine)::DownCast(sp);
-      nbelspine=sp->NbEdges();
-      Handle(ChFiDS_HElSpine) hels;
-      if   (nbelspine==1) hels = sp->ElSpine(1);
-      else hels = sp->ElSpine(p);
-      if(fsp->IsConstant()) { R = fsp->Radius(); }
-      else { R = fsp->Law(hels)->Value(p); }
-      hels->D1(p,Pbid,V);
+    const Handle(ChFiDS_Spine)& sp = cd->Spine();
+    Handle(ChFiDS_FilSpine) fsp = Handle(ChFiDS_FilSpine)::DownCast(sp);
+    nbelspine=sp->NbEdges();
+    Handle(ChFiDS_HElSpine) hels;
+    if   (nbelspine==1) hels = sp->ElSpine(1);
+    else hels = sp->ElSpine(p);
+    if(fsp->IsConstant()) { R = fsp->Radius(); }
+    else { R = fsp->Law(hels)->Value(p); }
+    hels->D1(p,Pbid,V);
     }
     break;
   }
@@ -705,22 +713,22 @@ void ChFi3d_ExtrSpineCarac(const TopOpeBRepDS_DataStructure& DStr,
 }
 //=======================================================================
 //function : ChFi3d_CircularSpine
-//purpose  : Calcule une ligne guide ciculaire pour le du coin a partir 
-//           des points et vecteurs tangents calcules aux extremites des
-//           lignes guides des conges deb et fin.
+//purpose  : Calculate a cicular guideline for the corner created from  
+//           tangent points and vectors calculated at the extremities 
+//           of guidelines of start and end fillets.
 //=======================================================================
 Handle(Geom_Circle) ChFi3d_CircularSpine(Standard_Real&      WFirst,
-                                        Standard_Real&      WLast,
-                                        const gp_Pnt&       Pdeb,
-                                        const gp_Vec&       Vdeb,
-                                        const gp_Pnt&       Pfin,
-                                        const gp_Vec&       Vfin,
-                                        const Standard_Real rad)
+  Standard_Real&      WLast,
+  const gp_Pnt&       Pdeb,
+  const gp_Vec&       Vdeb,
+  const gp_Pnt&       Pfin,
+  const gp_Vec&       Vfin,
+  const Standard_Real rad)
 {
   gp_Circ ccc;
   gp_Pln Pl1(Pdeb,gp_Dir(Vdeb)),Pl2(Pfin,gp_Dir(Vfin));
   IntAna_QuadQuadGeo LInt (Pl1,Pl2,Precision::Angular(),
-                          Precision::Confusion());
+    Precision::Confusion());
   gp_Lin li;
   if (LInt.IsDone()) {
     li = LInt.Line(1);
@@ -745,18 +753,18 @@ Handle(Geom_Circle) ChFi3d_CircularSpine(Standard_Real&      WFirst,
 }
 //=======================================================================
 //function : ChFi3d_Spine
-//purpose  : Calcule les poles de la ligne guide du coin a partir des
-//           points et vecteurs tangents calcules aux extremites des
-//           lignes guides des conges deb et fin.
+//purpose  : Calculates the poles of the guideline for the corner from
+//           tangent points and vectors calculated at the extremities of
+//           guidelines of start and end fillets.
 //=======================================================================
 Handle(Geom_BezierCurve) ChFi3d_Spine(const gp_Pnt&       pd,
-                                      gp_Vec&             vd,
-                                      const gp_Pnt&       pf,
-                                      gp_Vec&             vf,
-                                      const Standard_Real R)
+  gp_Vec&             vd,
+  const gp_Pnt&       pf,
+  gp_Vec&             vf,
+  const Standard_Real R)
 {     
   TColgp_Array1OfPnt pol(1,4);
-  const Standard_Real fac = 0.5 * tan((PI-vd.Angle(vf)) * 0.5);
+  const Standard_Real fac = 0.5 * tan((M_PI-vd.Angle(vf)) * 0.5);
   pol(1) = pd;
   vd.Multiply(fac*R);
   pol(2).SetCoord(pd.X()+vd.X(),pd.Y()+vd.Y(),pd.Z()+vd.Z());
@@ -767,25 +775,25 @@ Handle(Geom_BezierCurve) ChFi3d_Spine(const gp_Pnt&       pd,
 }
 //=======================================================================
 //function : IsInFront
-//purpose  : regarde si les surfdata i1 et i2 sont en vis a vis
+//purpose  : Checks if surfdata i1 and i2 are face to face
 //=======================================================================
 Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
-                                  const Handle(ChFiDS_Stripe)& cd1, 
-                                  const Handle(ChFiDS_Stripe)& cd2,
-                                  const Standard_Integer i1,
-                                  const Standard_Integer i2,
-                                  const Standard_Integer sens1,
-                                  const Standard_Integer sens2,
-                                  Standard_Real& p1,
-                                  Standard_Real& p2,
-                                  TopoDS_Face& face,
-                                  Standard_Boolean& sameside,
-                                  Standard_Integer& jf1,
-                                  Standard_Integer& jf2,
-                                  Standard_Boolean& visavis,
-                                  const TopoDS_Vertex& Vtx,
-                                  const Standard_Boolean Check2dDistance,
-                                  const Standard_Boolean enlarge)
+  const Handle(ChFiDS_Stripe)& cd1, 
+  const Handle(ChFiDS_Stripe)& cd2,
+  const Standard_Integer i1,
+  const Standard_Integer i2,
+  const Standard_Integer sens1,
+  const Standard_Integer sens2,
+  Standard_Real& p1,
+  Standard_Real& p2,
+  TopoDS_Face& face,
+  Standard_Boolean& sameside,
+  Standard_Integer& jf1,
+  Standard_Integer& jf2,
+  Standard_Boolean& visavis,
+  const TopoDS_Vertex& Vtx,
+  const Standard_Boolean Check2dDistance,
+  const Standard_Boolean enlarge)
 {
   Standard_Boolean isf1 = (sens1 == 1), isf2 = (sens2 == 1);
   const Handle(ChFiDS_SurfData)& fd1 = cd1->SetOfSurfData()->Value(i1);
@@ -806,7 +814,7 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
     OrFace2 = DStr.Shape(fd2->Index(jf2)).Orientation();
     visavis = Standard_True;
     sameside = ChFi3d::SameSide(Or,OrSave1,OrSave2,OrFace1,OrFace2);
-    // On ne detrompe plus a l'aide des parametres de l'autre cote ca posait des problemes.
+    // The parameters of the other side are not used for orientation. This would raise problems
     Standard_Integer kf1 = jf1, kf2 = jf2;
     Standard_Real pref1 = fd1->Interference(kf1).Parameter(isf1);
     Standard_Real pref2 = fd2->Interference(kf2).Parameter(isf2);
@@ -827,7 +835,7 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
     OrFace2 = DStr.Shape(fd2->Index(jf2)).Orientation();
     visavis = Standard_True;
     sameside = ChFi3d::SameSide(Or,OrSave1,OrSave2,OrFace1,OrFace2);
-    // On ne detrompe plus a l'aide des parametres de l'autre cote ca posait des problemes.
+    // The parameters of the other side are not used for orientation. This would raise problems
     Standard_Integer kf1 = jf1, kf2 = jf2;
     Standard_Real pref1 = fd1->Interference(kf1).Parameter(isf1);
     Standard_Real pref2 = fd2->Interference(kf2).Parameter(isf2);
@@ -836,17 +844,17 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
       P2d = BRep_Tool::Parameters( Vtx, face );
     if(ChFi3d_IntTraces(fd1,pref1,p1,jf1,sens1,fd2,pref2,p2,jf2,sens2,P2d,Check2dDistance,enlarge)) {
       Standard_Boolean restore = 
-       ok && ((j1 == jf1 && sens1*(p1 - u1) > 0.) || 
-              (j2 == jf2 && sens2*(p2 - u2) > 0.));
+        ok && ((j1 == jf1 && sens1*(p1 - u1) > 0.) || 
+        (j2 == jf2 && sens2*(p2 - u2) > 0.));
       ok = 1;
       if(restore) {
-       p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
+        p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
       }
       else {
-       u1 = p1; u2 = p2; ss = sameside; j1 = jf1; j2 = jf2; ff = face;
+        u1 = p1; u2 = p2; ss = sameside; j1 = jf1; j2 = jf2; ff = face;
       }
     }
-    //on rajoute ces re-initialisations au cas ou p1,... auraient pris des valeurs fausses
+    //the re-initialization is added in case p1,... take wrong values
     else if (ok) {
       p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
     }
@@ -860,7 +868,7 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
     OrFace2 = DStr.Shape(fd2->Index(jf2)).Orientation();
     visavis = Standard_True;
     sameside = ChFi3d::SameSide(Or,OrSave1,OrSave2,OrFace1,OrFace2);
-    // On ne detrompe plus a l'aide des parametres de l'autre cote.
+    // The parameters of the other side are not used for orientation.
     Standard_Integer kf1 = jf1, kf2 = jf2;
     Standard_Real pref1 = fd1->Interference(kf1).Parameter(isf1);
     Standard_Real pref2 = fd2->Interference(kf2).Parameter(isf2);
@@ -869,17 +877,17 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
       P2d = BRep_Tool::Parameters( Vtx, face );
     if(ChFi3d_IntTraces(fd1,pref1,p1,jf1,sens1,fd2,pref2,p2,jf2,sens2,P2d,Check2dDistance,enlarge)) {
       Standard_Boolean restore = 
-       ok && ((j1 == jf1 && sens1*(p1 - u1) > 0.) || 
-              (j2 == jf2 && sens2*(p2 - u2) > 0.));
+        ok && ((j1 == jf1 && sens1*(p1 - u1) > 0.) || 
+        (j2 == jf2 && sens2*(p2 - u2) > 0.));
       ok = 1;
       if(restore) {
-       p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
+        p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
       }
       else {
-       u1 = p1; u2 = p2; ss = sameside; j1 = jf1; j2 = jf2; ff = face;
+        u1 = p1; u2 = p2; ss = sameside; j1 = jf1; j2 = jf2; ff = face;
       }
     }
-    //on rajoute ces re-initialisations au cas ou p1,... auraient pris des valeurs fausses
+    //the re-initialization is added in case p1,... take wrong values
     else if (ok) {
       p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
     }
@@ -893,7 +901,7 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
     OrFace2 = DStr.Shape(fd2->Index(jf2)).Orientation();
     visavis = Standard_True;
     sameside = ChFi3d::SameSide(Or,OrSave1,OrSave2,OrFace1,OrFace2);
-    // On ne detrompe plus a l'aide des parametres de l'autre cote.
+    // The parameters of the other side are not used for orientation.
     Standard_Integer kf1 = jf1, kf2 = jf2;
     Standard_Real pref1 = fd1->Interference(kf1).Parameter(isf1);
     Standard_Real pref2 = fd2->Interference(kf2).Parameter(isf2);
@@ -902,17 +910,17 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
       P2d = BRep_Tool::Parameters( Vtx, face );
     if(ChFi3d_IntTraces(fd1,pref1,p1,jf1,sens1,fd2,pref2,p2,jf2,sens2,P2d,Check2dDistance,enlarge)) {
       Standard_Boolean restore = 
-       ok && ((j1 == jf1 && sens1*(p1 - u1) > 0.) || 
-              (j2 == jf2 && sens2*(p2 - u2) > 0.));
+        ok && ((j1 == jf1 && sens1*(p1 - u1) > 0.) || 
+        (j2 == jf2 && sens2*(p2 - u2) > 0.));
       ok = 1;
       if(restore) {
-       p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
+        p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
       }
       else {
-       u1 = p1; u2 = p2; ss = sameside; j1 = jf1; j2 = jf2; ff = face;
+        u1 = p1; u2 = p2; ss = sameside; j1 = jf1; j2 = jf2; ff = face;
       }
     }
-    //on rajoute ces re-initialisations au cas ou p1,... auraient pris des valeurs fausses
+    //the re-initialization is added in case p1,... take wrong values
     else if (ok) {
       p1 = u1; p2 = u2; sameside = ss; jf1 = j1; jf2 = j2; face = ff;
     }
@@ -924,10 +932,10 @@ Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
 //purpose  : 
 //=======================================================================
 static Standard_Real recadre(const Standard_Real p,
-                             const Standard_Real ref,
-                             const Standard_Integer sens,
-                             const Standard_Real first,
-                             const Standard_Real last)
+  const Standard_Real ref,
+  const Standard_Integer sens,
+  const Standard_Real first,
+  const Standard_Real last)
 {
   const Standard_Real pp = p + (sens > 0 ? (first - last) : (last - first));
   return ((Abs(pp - ref) < Abs(p - ref))? pp : p);
@@ -937,24 +945,24 @@ static Standard_Real recadre(const Standard_Real p,
 //purpose  : 
 //=======================================================================
 Standard_Boolean ChFi3d_IntTraces(const Handle(ChFiDS_SurfData)& fd1,
-                                 const Standard_Real            pref1,
-                                 Standard_Real&                 p1,
-                                 const Standard_Integer         jf1,
-                                 const Standard_Integer         sens1,
-                                 const Handle(ChFiDS_SurfData)& fd2,
-                                 const Standard_Real            pref2,
-                                 Standard_Real&                 p2,
-                                 const Standard_Integer         jf2,
-                                 const Standard_Integer         sens2,
-                                 const gp_Pnt2d&                RefP2d,
-                                 const Standard_Boolean         Check2dDistance,
-                                 const Standard_Boolean         enlarge)
+  const Standard_Real            pref1,
+  Standard_Real&                 p1,
+  const Standard_Integer         jf1,
+  const Standard_Integer         sens1,
+  const Handle(ChFiDS_SurfData)& fd2,
+  const Standard_Real            pref2,
+  Standard_Real&                 p2,
+  const Standard_Integer         jf2,
+  const Standard_Integer         sens2,
+  const gp_Pnt2d&                RefP2d,
+  const Standard_Boolean         Check2dDistance,
+  const Standard_Boolean         enlarge)
 {
   Geom2dAdaptor_Curve C1;
   Geom2dAdaptor_Curve C2;
-  // on aggrandit les pcurves pour etre sur qu'il y a intersection
-  // par ailleurs on prend la totalite des courbes periodiques, on
-  // triera les points sur celles-ci avec un critere specifique.
+  // pcurves are enlarged to be sure that there is intersection
+  // additionally all periodic curves are taken and points on 
+  // them are filtered using a specific criterion.
 
   Standard_Real first,last,delta = 0.;
   first = fd1->Interference(jf1).FirstParameter();
@@ -972,7 +980,7 @@ Standard_Boolean ChFi3d_IntTraces(const Handle(ChFiDS_SurfData)& fd1,
   }
   else C1.Load(pcf1,first-delta,last+delta);
   Standard_Real first1 = pcf1->FirstParameter(), last1 = pcf1->LastParameter();
-  
+
   first = fd2->Interference(jf2).FirstParameter();
   last = fd2->Interference(jf2).LastParameter();
   if ((last-first) < Precision::PConfusion())
@@ -988,20 +996,20 @@ Standard_Boolean ChFi3d_IntTraces(const Handle(ChFiDS_SurfData)& fd1,
   }
   else C2.Load(fd2->Interference(jf2).PCurveOnFace(),first-delta,last+delta);
   Standard_Real first2 = pcf2->FirstParameter(), last2 = pcf2->LastParameter();
-    
+
   IntRes2d_IntersectionPoint int2d;
   Geom2dInt_GInter Intersection;
   Standard_Integer nbpt,nbseg;
   gp_Pnt2d p2d;
   if(fd1->Interference(jf1).PCurveOnFace() == fd2->Interference(jf2).PCurveOnFace()) {
     Intersection.Perform(C1,
-                        Precision::PIntersection(),
-                        Precision::PIntersection());
+      Precision::PIntersection(),
+      Precision::PIntersection());
   }
   else{
     Intersection.Perform(C1,C2,
-                        Precision::PIntersection(),
-                        Precision::PIntersection());
+      Precision::PIntersection(),
+      Precision::PIntersection());
   }
   if (Intersection.IsDone()) {
     if (!Intersection.IsEmpty()) {
@@ -1010,84 +1018,84 @@ Standard_Boolean ChFi3d_IntTraces(const Handle(ChFiDS_SurfData)& fd1,
       }
       nbpt = Intersection.NbPoints();
       if ( nbpt >= 1 ) {
-       // On manque de billes pour trier les points trouves de facon
-        // rigoureuse. On adopte donc deux criteres differents un peu
-        // arbitraires :
-       // - courbes periodiques : le plus proche de la borne.
-       // - courbes non periodiques : le plus a gauche sur les 2 courbes
-       //                             modulo sens1 et sens2
-       int2d = Intersection.Point(1);
-       p2d = int2d.Value();
-       p1 = int2d.ParamOnFirst();
-       p2 = int2d.ParamOnSecond();
-       if(isper1) p1 = recadre(p1,pref1,sens1,first1,last1);
-       if(isper2) p2 = recadre(p2,pref2,sens2,first2,last2);
-       for(Standard_Integer i = 2; i<=nbpt; i++) {
-         int2d = Intersection.Point(i);
-         if(isper1) {
-           Standard_Real pp1 = int2d.ParamOnFirst();
-           pp1 = recadre(pp1,pref1,sens1,first1,last1);
-           if((Abs(pp1 - pref1) < Abs(p1 - pref1))) {
-             p1 = pp1;
-             p2 = int2d.ParamOnSecond();
-             p2d = int2d.Value();
-           }
-           //  Modified by skv - Mon Jun 16 15:51:21 2003 OCC615 Begin
-           else if (Check2dDistance &&
-                    RefP2d.Distance(int2d.Value()) < RefP2d.Distance(p2d)) {
-             Standard_Real pp2 = int2d.ParamOnSecond();
-
-             if(isper2)
-               pp2 = recadre(pp2,pref2,sens2,first2,last2);
-
-             p1  = pp1;
-             p2  = pp2;
-             p2d = int2d.Value();
-           }
-           //  Modified by skv - Mon Jun 16 15:51:22 2003 OCC615 End
-         }
-         else if(isper2) {
-           Standard_Real pp2 = int2d.ParamOnSecond();
-           pp2 = recadre(pp2,pref2,sens2,first2,last2);
-           if((Abs(pp2 - pref2) < Abs(p2 - pref2))) {
-             p2 = pp2;
-             p1 = int2d.ParamOnFirst();
-             p2d = int2d.Value();
-           }
-           //  Modified by skv - Mon Jun 16 15:51:21 2003 OCC615 Begin
-           else if (Check2dDistance &&
-                    RefP2d.Distance(int2d.Value()) < RefP2d.Distance(p2d)) {
-             Standard_Real pp1 = int2d.ParamOnFirst();
-
-             if(isper1)
-               pp1 = recadre(pp1,pref1,sens1,first1,last1);
-
-             p1  = pp1;
-             p2  = pp2;
-             p2d = int2d.Value();
-           }
-           //  Modified by skv - Mon Jun 16 15:51:22 2003 OCC615 End
-         }
-         else if(((int2d.ParamOnFirst() - p1)*sens1 < 0.) &&
-                 ((int2d.ParamOnSecond() - p2)*sens2 < 0.)) {
-           p1 = int2d.ParamOnFirst();
-           p2 = int2d.ParamOnSecond();
-           p2d = int2d.Value();
-         }
-         else if((Abs(int2d.ParamOnFirst() - pref1) < Abs(p1 - pref1)) &&
-                 (Abs(int2d.ParamOnSecond() - pref2) < Abs(p2 - pref2))) {
-           p1 = int2d.ParamOnFirst();
-           p2 = int2d.ParamOnSecond();
-           p2d = int2d.Value();
-         }
-         else if (Check2dDistance && RefP2d.Distance(int2d.Value()) < RefP2d.Distance(p2d))
-           {
-             p1 = int2d.ParamOnFirst();
-             p2 = int2d.ParamOnSecond();
-             p2d = int2d.Value();
-           }
-       }
-       return Standard_True; 
+        // The criteria sets to filter the found points in a strict way 
+        // are missing. Two different criterions chosen somewhat randomly 
+        // are used :
+        // - periodic curves : closest to the border.
+        // - non-periodic curves : the closest to the left of 2 curves
+        //                             modulo sens1 and sens2
+        int2d = Intersection.Point(1);
+        p2d = int2d.Value();
+        p1 = int2d.ParamOnFirst();
+        p2 = int2d.ParamOnSecond();
+        if(isper1) p1 = recadre(p1,pref1,sens1,first1,last1);
+        if(isper2) p2 = recadre(p2,pref2,sens2,first2,last2);
+        for(Standard_Integer i = 2; i<=nbpt; i++) {
+          int2d = Intersection.Point(i);
+          if(isper1) {
+            Standard_Real pp1 = int2d.ParamOnFirst();
+            pp1 = recadre(pp1,pref1,sens1,first1,last1);
+            if((Abs(pp1 - pref1) < Abs(p1 - pref1))) {
+              p1 = pp1;
+              p2 = int2d.ParamOnSecond();
+              p2d = int2d.Value();
+            }
+            //  Modified by skv - Mon Jun 16 15:51:21 2003 OCC615 Begin
+            else if (Check2dDistance &&
+              RefP2d.Distance(int2d.Value()) < RefP2d.Distance(p2d)) {
+                Standard_Real pp2 = int2d.ParamOnSecond();
+
+                if(isper2)
+                  pp2 = recadre(pp2,pref2,sens2,first2,last2);
+
+                p1  = pp1;
+                p2  = pp2;
+                p2d = int2d.Value();
+            }
+            //  Modified by skv - Mon Jun 16 15:51:22 2003 OCC615 End
+          }
+          else if(isper2) {
+            Standard_Real pp2 = int2d.ParamOnSecond();
+            pp2 = recadre(pp2,pref2,sens2,first2,last2);
+            if((Abs(pp2 - pref2) < Abs(p2 - pref2))) {
+              p2 = pp2;
+              p1 = int2d.ParamOnFirst();
+              p2d = int2d.Value();
+            }
+            //  Modified by skv - Mon Jun 16 15:51:21 2003 OCC615 Begin
+            else if (Check2dDistance &&
+              RefP2d.Distance(int2d.Value()) < RefP2d.Distance(p2d)) {
+                Standard_Real pp1 = int2d.ParamOnFirst();
+
+                if(isper1)
+                  pp1 = recadre(pp1,pref1,sens1,first1,last1);
+
+                p1  = pp1;
+                p2  = pp2;
+                p2d = int2d.Value();
+            }
+            //  Modified by skv - Mon Jun 16 15:51:22 2003 OCC615 End
+          }
+          else if(((int2d.ParamOnFirst() - p1)*sens1 < 0.) &&
+            ((int2d.ParamOnSecond() - p2)*sens2 < 0.)) {
+              p1 = int2d.ParamOnFirst();
+              p2 = int2d.ParamOnSecond();
+              p2d = int2d.Value();
+          }
+          else if((Abs(int2d.ParamOnFirst() - pref1) < Abs(p1 - pref1)) &&
+            (Abs(int2d.ParamOnSecond() - pref2) < Abs(p2 - pref2))) {
+              p1 = int2d.ParamOnFirst();
+              p2 = int2d.ParamOnSecond();
+              p2d = int2d.Value();
+          }
+          else if (Check2dDistance && RefP2d.Distance(int2d.Value()) < RefP2d.Distance(p2d))
+          {
+            p1 = int2d.ParamOnFirst();
+            p2 = int2d.ParamOnSecond();
+            p2d = int2d.Value();
+          }
+        }
+        return Standard_True; 
       }
       return Standard_False; 
     }
@@ -1100,10 +1108,10 @@ Standard_Boolean ChFi3d_IntTraces(const Handle(ChFiDS_SurfData)& fd1,
 //purpose  : 
 //=======================================================================
 void ChFi3d_Coefficient(const gp_Vec& V3d,
-                        const gp_Vec& D1u,
-                        const gp_Vec& D1v,
-                        Standard_Real& DU,
-                        Standard_Real& DV) 
+  const gp_Vec& D1u,
+  const gp_Vec& D1v,
+  Standard_Real& DU,
+  Standard_Real& DV) 
 {
   const Standard_Real AA = D1u.SquareMagnitude();
   const Standard_Real BB = D1u.Dot(D1v);
@@ -1120,8 +1128,8 @@ void ChFi3d_Coefficient(const gp_Vec& V3d,
 //           ses parametres et on la reparametre eventuellement.
 //=======================================================================
 void ChFi3d_ReparamPcurv(const Standard_Real Uf, 
-                         const Standard_Real Ul, 
-                         Handle(Geom2d_Curve)& Pcurv) 
+  const Standard_Real Ul, 
+  Handle(Geom2d_Curve)& Pcurv) 
 {
   if(Pcurv.IsNull()) return;
   Standard_Real upcf = Pcurv->FirstParameter();
@@ -1132,89 +1140,89 @@ void ChFi3d_ReparamPcurv(const Standard_Real Uf,
   Handle(Geom2d_BSplineCurve) pc = Handle(Geom2d_BSplineCurve)::DownCast(basis);
   if(pc.IsNull()) return;
   if(Abs(upcf - pc->FirstParameter()) > Precision::PConfusion() ||
-     Abs(upcl - pc->LastParameter()) > Precision::PConfusion()) {
-    pc->Segment(upcf,upcl);
+    Abs(upcl - pc->LastParameter()) > Precision::PConfusion()) {
+      pc->Segment(upcf,upcl);
   }
   if(Abs(Uf - pc->FirstParameter()) > Precision::PConfusion() ||
-     Abs(Ul - pc->LastParameter()) > Precision::PConfusion()) {
-    TColgp_Array1OfPnt2d pol(1,pc->NbPoles());
-    pc->Poles(pol);
-    TColStd_Array1OfReal kn(1,pc->NbKnots());
-    pc->Knots(kn);
-    TColStd_Array1OfInteger mu(1,pc->NbKnots());
-    pc->Multiplicities(mu);
-    Standard_Integer deg = pc->Degree();
-    BSplCLib::Reparametrize(Uf,Ul,kn);
-    pc = new Geom2d_BSplineCurve(pol,kn,mu,deg);
+    Abs(Ul - pc->LastParameter()) > Precision::PConfusion()) {
+      TColgp_Array1OfPnt2d pol(1,pc->NbPoles());
+      pc->Poles(pol);
+      TColStd_Array1OfReal kn(1,pc->NbKnots());
+      pc->Knots(kn);
+      TColStd_Array1OfInteger mu(1,pc->NbKnots());
+      pc->Multiplicities(mu);
+      Standard_Integer deg = pc->Degree();
+      BSplCLib::Reparametrize(Uf,Ul,kn);
+      pc = new Geom2d_BSplineCurve(pol,kn,mu,deg);
   }
   Pcurv = pc;
 }
 //=======================================================================
 //function : ProjectPCurv
-//purpose  : Calcul la pcurve correspondant a une ligne d intersection
-//           3d. Ne doit etre appele que dans les cas analytiques.
+//purpose  : Calculation of the pcurve corresponding to a line of intersection
+//           3d. Should be called only in analytic cases.
 //=======================================================================
 void ChFi3d_ProjectPCurv(const Handle(Adaptor3d_HCurve)&   HCg, 
-                        const Handle(Adaptor3d_HSurface)& HSg, 
-                        Handle(Geom2d_Curve)&           Pcurv,
-                        const Standard_Real             tol,
-                        Standard_Real&                  tolreached) 
+  const Handle(Adaptor3d_HSurface)& HSg, 
+  Handle(Geom2d_Curve)&           Pcurv,
+  const Standard_Real             tol,
+  Standard_Real&                  tolreached) 
 {
   if (HSg->GetType() != GeomAbs_BezierSurface &&
-      HSg->GetType() != GeomAbs_BSplineSurface) {
-    
-    ProjLib_ProjectedCurve Projc (HSg,HCg,tol);
-    tolreached = Projc.GetTolerance();
-    switch (Projc.GetType()) {
-    case GeomAbs_Line : 
-      {
-       Pcurv = new Geom2d_Line(Projc.Line());
-      }
-      break;
-    case GeomAbs_Circle :
-      {
-       Pcurv = new Geom2d_Circle(Projc.Circle());
-      }
-      break;
-    case GeomAbs_Ellipse :
-      {
-       Pcurv = new Geom2d_Ellipse(Projc.Ellipse());
-      }
-      break;
-    case GeomAbs_Hyperbola :
-      {
-       Pcurv = new Geom2d_Hyperbola(Projc.Hyperbola());
-      }
-      break;
-    case GeomAbs_Parabola :
-      {
-       Pcurv = new Geom2d_Parabola(Projc.Parabola());
-      }
-      break;
-    case GeomAbs_BezierCurve :
-      {
-       Pcurv = Projc.Bezier(); 
-      }
-      break;
-    case GeomAbs_BSplineCurve :
-      {
-       Pcurv = Projc.BSpline();
+    HSg->GetType() != GeomAbs_BSplineSurface) {
+
+      ProjLib_ProjectedCurve Projc (HSg,HCg,tol);
+      tolreached = Projc.GetTolerance();
+      switch (Projc.GetType()) {
+      case GeomAbs_Line : 
+        {
+          Pcurv = new Geom2d_Line(Projc.Line());
+        }
+        break;
+      case GeomAbs_Circle :
+        {
+          Pcurv = new Geom2d_Circle(Projc.Circle());
+        }
+        break;
+      case GeomAbs_Ellipse :
+        {
+          Pcurv = new Geom2d_Ellipse(Projc.Ellipse());
+        }
+        break;
+      case GeomAbs_Hyperbola :
+        {
+          Pcurv = new Geom2d_Hyperbola(Projc.Hyperbola());
+        }
+        break;
+      case GeomAbs_Parabola :
+        {
+          Pcurv = new Geom2d_Parabola(Projc.Parabola());
+        }
+        break;
+      case GeomAbs_BezierCurve :
+        {
+          Pcurv = Projc.Bezier(); 
+        }
+        break;
+      case GeomAbs_BSplineCurve :
+        {
+          Pcurv = Projc.BSpline();
+        }
+        break;
+      default:
+        Standard_NotImplemented::Raise("echec approximation de la pcurve ");
       }
-      break;
-    default:
-      Standard_NotImplemented::Raise("echec approximation de la pcurve ");
-    }
   }
 }
 //=======================================================================
 //function : CheckSameParameter
-//purpose  : Controle a posteriori que sameparameter a bien fait son boulot
+//purpose  : Controls a posteriori that sameparameter worked well
 //=======================================================================
 Standard_Boolean ChFi3d_CheckSameParameter (const Handle(Adaptor3d_HCurve)&   C3d,
-                                           Handle(Geom2d_Curve)&           Pcurv,
-                                           const Handle(Adaptor3d_HSurface)& S,
-                                           const Standard_Real             tol3d,
-                                           Standard_Real&                  tolreached)
+  Handle(Geom2d_Curve)&           Pcurv,
+  const Handle(Adaptor3d_HSurface)& S,
+  const Standard_Real             tol3d,
+  Standard_Real&                  tolreached)
 {
   tolreached = 0.;
   Standard_Real f = C3d->FirstParameter();
@@ -1242,13 +1250,13 @@ Standard_Boolean ChFi3d_CheckSameParameter (const Handle(Adaptor3d_HCurve)&   C3
 }
 //=======================================================================
 //function : SameParameter
-//purpose  : Encapsulation de Sameparameter
+//purpose  : Encapsulation of Sameparameter
 //=======================================================================
 Standard_Boolean ChFi3d_SameParameter(const Handle(Adaptor3d_HCurve)&   C3d,
-                                      Handle(Geom2d_Curve)&           Pcurv,
-                                      const Handle(Adaptor3d_HSurface)& S,
-                                      const Standard_Real             tol3d,
-                                      Standard_Real&                  tolreached)
+  Handle(Geom2d_Curve)&           Pcurv,
+  const Handle(Adaptor3d_HSurface)& S,
+  const Standard_Real             tol3d,
+  Standard_Real&                  tolreached)
 {
   if(ChFi3d_CheckSameParameter(C3d,Pcurv,S,tol3d,tolreached)) return Standard_True;
   Approx_SameParameter sp(C3d,Pcurv,S,tol3d);
@@ -1264,12 +1272,12 @@ Standard_Boolean ChFi3d_SameParameter(const Handle(Adaptor3d_HCurve)&   C3d,
 //purpose  : Encapsulation de Sameparameter
 //=======================================================================
 Standard_Boolean ChFi3d_SameParameter(const Handle(Geom_Curve)&   C3d,
-                                      Handle(Geom2d_Curve)&       Pcurv,
-                                      const Handle(Geom_Surface)& S,
-                                      const Standard_Real         Pardeb,
-                                      const Standard_Real         Parfin,
-                                      const Standard_Real         tol3d,
-                                      Standard_Real&              tolreached)
+  Handle(Geom2d_Curve)&       Pcurv,
+  const Handle(Geom_Surface)& S,
+  const Standard_Real         Pardeb,
+  const Standard_Real         Parfin,
+  const Standard_Real         tol3d,
+  Standard_Real&              tolreached)
 {
   /*szv:static*/ Handle(GeomAdaptor_HSurface) hs(new GeomAdaptor_HSurface(S));
   /*szv:static*/ Handle(GeomAdaptor_HCurve) hc(new GeomAdaptor_HCurve(C3d,Pardeb,Parfin));
@@ -1277,40 +1285,40 @@ Standard_Boolean ChFi3d_SameParameter(const Handle(Geom_Curve)&   C3d,
 }
 //=======================================================================
 //function : ComputePCurv 
-//purpose  : Calcule une droite eventuellement sous forme de BSpline 
-//           pour garantir le range et le parametrage identique
-//           a une courbe 3d de reference.
+//purpose  : Calculates a straight line in form of BSpline 
+//           to guarantee the same range and parameters as of the 
+//           reference 3D curve.
 //=======================================================================
 void ChFi3d_ComputePCurv(const Handle(Adaptor3d_HCurve)&   C3d,
-                        const gp_Pnt2d&                 UV1,
-                        const gp_Pnt2d&                 UV2,
-                        Handle(Geom2d_Curve)&           Pcurv,
-                        const Handle(Adaptor3d_HSurface)& S,
-                        const Standard_Real             Pardeb,
-                        const Standard_Real             Parfin,
-                        const Standard_Real             tol3d,
-                        Standard_Real&                  tolreached,
-                        const Standard_Boolean          reverse)
+  const gp_Pnt2d&                 UV1,
+  const gp_Pnt2d&                 UV2,
+  Handle(Geom2d_Curve)&           Pcurv,
+  const Handle(Adaptor3d_HSurface)& S,
+  const Standard_Real             Pardeb,
+  const Standard_Real             Parfin,
+  const Standard_Real             tol3d,
+  Standard_Real&                  tolreached,
+  const Standard_Boolean          reverse)
 {
   ChFi3d_ComputePCurv(UV1,UV2,Pcurv,Pardeb,Parfin,reverse);
   ChFi3d_SameParameter(C3d,Pcurv,S,tol3d,tolreached);
 }
 //=======================================================================
 //function : ComputePCurv 
-//purpose  : Calcule une droite eventuellement sous forme de BSpline 
-//           pour garantir le range et le parametrage identique
-//           a une courbe 3d de reference.
+//purpose  : Calculates a straight line in form of BSpline 
+//           to guarantee the same range and parameters as of the 
+//           reference 3D curve.
 //=======================================================================
 void ChFi3d_ComputePCurv(const Handle(Geom_Curve)&   C3d,
-                         const gp_Pnt2d&             UV1,
-                         const gp_Pnt2d&             UV2,
-                         Handle(Geom2d_Curve)&       Pcurv,
-                         const Handle(Geom_Surface)& S,
-                         const Standard_Real         Pardeb,
-                         const Standard_Real         Parfin,
-                         const Standard_Real         tol3d,
-                         Standard_Real&              tolreached,
-                         const Standard_Boolean      reverse)
+  const gp_Pnt2d&             UV1,
+  const gp_Pnt2d&             UV2,
+  Handle(Geom2d_Curve)&       Pcurv,
+  const Handle(Geom_Surface)& S,
+  const Standard_Real         Pardeb,
+  const Standard_Real         Parfin,
+  const Standard_Real         tol3d,
+  Standard_Real&              tolreached,
+  const Standard_Boolean      reverse)
 {
   /*szv:static*/ Handle(GeomAdaptor_HSurface) hs(new GeomAdaptor_HSurface(S));
   /*szv:static*/ Handle(GeomAdaptor_HCurve) hc(new GeomAdaptor_HCurve(C3d,Pardeb,Parfin));
@@ -1318,15 +1326,15 @@ void ChFi3d_ComputePCurv(const Handle(Geom_Curve)&   C3d,
 }
 //=======================================================================
 //function : ComputePCurv 
-//purpose  : Calcule une droite eventuellement sous forme de BSpline 
-//           pour garantir le range.
+//purpose  : Calculates a straight line in form of BSpline 
+//           to guarantee the same range.
 //=======================================================================
 void ChFi3d_ComputePCurv(const gp_Pnt2d& UV1,
-                         const gp_Pnt2d& UV2,
-                         Handle(Geom2d_Curve)& Pcurv,
-                         const Standard_Real Pardeb,
-                         const Standard_Real Parfin,
-                         const Standard_Boolean reverse)
+  const gp_Pnt2d& UV2,
+  Handle(Geom2d_Curve)& Pcurv,
+  const Standard_Real Pardeb,
+  const Standard_Real Parfin,
+  const Standard_Boolean reverse)
 {
   const Standard_Real tol = Precision::PConfusion();
   gp_Pnt2d p1,p2;
@@ -1338,26 +1346,26 @@ void ChFi3d_ComputePCurv(const gp_Pnt2d& UV1,
     p1 = UV2;
     p2 = UV1;
   }
-  
+
   if (Abs(p1.X()-p2.X()) <= tol &&
-      Abs((p2.Y()-p1.Y())-(Parfin-Pardeb)) <= tol) {
-    gp_Pnt2d ppp(p1.X(),p1.Y()-Pardeb);
-    Pcurv = new Geom2d_Line(ppp,gp::DY2d());
+    Abs((p2.Y()-p1.Y())-(Parfin-Pardeb)) <= tol) {
+      gp_Pnt2d ppp(p1.X(),p1.Y()-Pardeb);
+      Pcurv = new Geom2d_Line(ppp,gp::DY2d());
   }
   else if (Abs(p1.X()-p2.X()) <= tol &&
-          Abs((p1.Y()-p2.Y())-(Parfin-Pardeb)) <= tol) {
-    gp_Pnt2d ppp(p1.X(),p1.Y()+Pardeb);
-    Pcurv = new Geom2d_Line(ppp,gp::DY2d().Reversed());
+    Abs((p1.Y()-p2.Y())-(Parfin-Pardeb)) <= tol) {
+      gp_Pnt2d ppp(p1.X(),p1.Y()+Pardeb);
+      Pcurv = new Geom2d_Line(ppp,gp::DY2d().Reversed());
   }
   else if (Abs(p1.Y()-p2.Y()) <= tol &&
-          Abs((p2.X()-p1.X())-(Parfin-Pardeb)) <= tol) {
-    gp_Pnt2d ppp(p1.X()-Pardeb,p1.Y());
-    Pcurv = new Geom2d_Line(ppp,gp::DX2d());
+    Abs((p2.X()-p1.X())-(Parfin-Pardeb)) <= tol) {
+      gp_Pnt2d ppp(p1.X()-Pardeb,p1.Y());
+      Pcurv = new Geom2d_Line(ppp,gp::DX2d());
   }
   else if (Abs(p1.Y()-p2.Y()) <= tol &&
-          Abs((p1.X()-p2.X())-(Parfin-Pardeb)) <= tol) {
-    gp_Pnt2d ppp(p1.X()+Pardeb,p1.Y());
-    Pcurv = new Geom2d_Line(ppp,gp::DX2d().Reversed());
+    Abs((p1.X()-p2.X())-(Parfin-Pardeb)) <= tol) {
+      gp_Pnt2d ppp(p1.X()+Pardeb,p1.Y());
+      Pcurv = new Geom2d_Line(ppp,gp::DX2d().Reversed());
   }
   else{
     TColgp_Array1OfPnt2d p(1,2);
@@ -1377,15 +1385,15 @@ void ChFi3d_ComputePCurv(const gp_Pnt2d& UV1,
 //purpose  : 
 //=======================================================================
 Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& Fac,
-                                         Handle(Geom2d_Curve)& curv, 
-                                         const Standard_Integer sens1,
-                                         const gp_Pnt2d& pfac1,
-                                         const gp_Vec2d& vfac1,
-                                         const Standard_Integer sens2,
-                                         const gp_Pnt2d& pfac2,
-                                         const gp_Vec2d& vfac2,
-                                         const Standard_Real t3d,
-                                         const Standard_Real ta)
+  Handle(Geom2d_Curve)& curv, 
+  const Standard_Integer sens1,
+  const gp_Pnt2d& pfac1,
+  const gp_Vec2d& vfac1,
+  const Standard_Integer sens2,
+  const gp_Pnt2d& pfac2,
+  const gp_Vec2d& vfac2,
+  const Standard_Real t3d,
+  const Standard_Real ta)
 {
   gp_Dir2d v1(vfac1);
   if(sens1 == 1) v1.Reverse();
@@ -1399,15 +1407,15 @@ Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& Fac,
 //purpose  : 
 //=======================================================================
 Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& Surf,
-                                         Handle(Geom2d_Curve)& curv,
-                                         const Standard_Integer sens1,
-                                         const gp_Pnt2d& p1,
-                                         gp_Vec&   v1,
-                                         const Standard_Integer sens2,
-                                         const gp_Pnt2d& p2,
-                                         gp_Vec& v2,
-                                         const Standard_Real t3d,
-                                         const Standard_Real ta)
+  Handle(Geom2d_Curve)& curv,
+  const Standard_Integer sens1,
+  const gp_Pnt2d& p1,
+  gp_Vec&   v1,
+  const Standard_Integer sens2,
+  const gp_Pnt2d& p2,
+  gp_Vec& v2,
+  const Standard_Real t3d,
+  const Standard_Real ta)
 {
   if(sens1 == 1) v1.Reverse();
   if(sens2 == 1) v2.Reverse();
@@ -1419,11 +1427,11 @@ Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& Surf,
 //purpose  : 
 //=======================================================================
 Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Geom_Surface)& s,
-                                         const gp_Pnt2d& p1,
-                                         const gp_Pnt2d& p2,
-                                         const Standard_Real t3d,
-                                         const Standard_Real ta,
-                                         const Standard_Boolean isfreeboundary)
+  const gp_Pnt2d& p1,
+  const gp_Pnt2d& p2,
+  const Standard_Real t3d,
+  const Standard_Real ta,
+  const Standard_Boolean isfreeboundary)
 {
   Handle(GeomAdaptor_HSurface) HS = new GeomAdaptor_HSurface(s);
   return ChFi3d_mkbound(HS,p1,p2,t3d,ta,isfreeboundary);
@@ -1433,11 +1441,11 @@ Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Geom_Surface)& s,
 //purpose  : 
 //=======================================================================
 Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& HS,
-                                         const gp_Pnt2d& p1,
-                                         const gp_Pnt2d& p2,
-                                         const Standard_Real t3d,
-                                         const Standard_Real ta,
-                                         const Standard_Boolean isfreeboundary)
+  const gp_Pnt2d& p1,
+  const gp_Pnt2d& p2,
+  const Standard_Real t3d,
+  const Standard_Real ta,
+  const Standard_Boolean isfreeboundary)
 {
   TColgp_Array1OfPnt2d pol(1,2);
   pol(1)=p1;
@@ -1450,10 +1458,10 @@ Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& HS,
 //purpose  : 
 //=======================================================================
 Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& HS,
-                                         const Handle(Geom2d_Curve)& curv,
-                                         const Standard_Real t3d,
-                                         const Standard_Real ta,
-                                         const Standard_Boolean isfreeboundary)
+  const Handle(Geom2d_Curve)& curv,
+  const Standard_Real t3d,
+  const Standard_Real ta,
+  const Standard_Boolean isfreeboundary)
 {
   Handle(Geom2dAdaptor_HCurve) HC = new Geom2dAdaptor_HCurve(curv);
   Adaptor3d_CurveOnSurface COnS(HC,HS);
@@ -1468,12 +1476,12 @@ Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& HS,
 //purpose  : 
 //=======================================================================
 Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& Fac,
-                                         Handle(Geom2d_Curve)& curv, 
-                                         const gp_Pnt2d& p1,
-                                         const gp_Pnt2d& p2,
-                                         const Standard_Real t3d,
-                                         const Standard_Real ta,
-                                         const Standard_Boolean isfreeboundary)
+  Handle(Geom2d_Curve)& curv, 
+  const gp_Pnt2d& p1,
+  const gp_Pnt2d& p2,
+  const Standard_Real t3d,
+  const Standard_Real ta,
+  const Standard_Boolean isfreeboundary)
 {
   TColgp_Array1OfPnt2d pol(1,2);
   pol(1)=p1;
@@ -1486,10 +1494,10 @@ Handle(GeomFill_Boundary) ChFi3d_mkbound(const Handle(Adaptor3d_HSurface)& Fac,
 //purpose  : 
 //=======================================================================
 Handle(Geom2d_Curve) ChFi3d_BuildPCurve(const gp_Pnt2d& p1,
-                                       gp_Dir2d& d1,
-                                       const gp_Pnt2d& p2,
-                                       gp_Dir2d& d2,
-                                       const Standard_Boolean redresse)
+  gp_Dir2d& d1,
+  const gp_Pnt2d& p2,
+  gp_Dir2d& d2,
+  const Standard_Boolean redresse)
 {
   gp_Vec2d vref(p1,p2);
   gp_Dir2d dref(vref);
@@ -1515,11 +1523,11 @@ Handle(Geom2d_Curve) ChFi3d_BuildPCurve(const gp_Pnt2d& p1,
 //purpose  : 
 //=======================================================================
 Handle(Geom2d_Curve) ChFi3d_BuildPCurve(const Handle(Adaptor3d_HSurface)& Surf,
-                                       const gp_Pnt2d&                 p1,
-                                       const gp_Vec2d&                 v1,
-                                       const gp_Pnt2d&                 p2,
-                                       const gp_Vec2d&                 v2,
-                                       const Standard_Boolean          redresse)
+  const gp_Pnt2d&                 p1,
+  const gp_Vec2d&                 v1,
+  const gp_Pnt2d&                 p2,
+  const gp_Vec2d&                 v2,
+  const Standard_Boolean          redresse)
 {
   gp_Pnt2d pp1 = p1, pp2 = p2;
   gp_Vec2d vv1 = v1, vv2 = v2;
@@ -1547,11 +1555,11 @@ Handle(Geom2d_Curve) ChFi3d_BuildPCurve(const Handle(Adaptor3d_HSurface)& Surf,
 //purpose  : 
 //=======================================================================
 Handle(Geom2d_Curve) ChFi3d_BuildPCurve(const Handle(Adaptor3d_HSurface)& Surf,
-                                       const gp_Pnt2d&                 p1,
-                                       const gp_Vec&                   v1,
-                                       const gp_Pnt2d&                 p2,
-                                       const gp_Vec&                   v2,
-                                       const Standard_Boolean          redresse)
+  const gp_Pnt2d&                 p1,
+  const gp_Vec&                   v1,
+  const gp_Pnt2d&                 p2,
+  const gp_Vec&                   v2,
+  const Standard_Boolean          redresse)
 {
   gp_Vec D1u,D1v;
   gp_Pnt PP1,PP2;
@@ -1572,34 +1580,34 @@ Handle(Geom2d_Curve) ChFi3d_BuildPCurve(const Handle(Adaptor3d_HSurface)& Surf,
 //=======================================================================
 //function : ComputeArete
 //purpose  : 
-// pour les remplissages en s.d. un conge avec ces pcurves est construit ainsi
-// firstpoint sur S1 -------------edge:courbe3d/pcurves--->lastpoint sur S1
+// to fill with s.d. a fillet with pcurves constructed as follows
+// firstpoint on S1 -------------edge:curve3d/pcurves--->lastpoint on S1
 //  |                                                              |
 //  |                                                              |
 //  |                                                              |
-// edge:courbe 3d/pcurves           conge                        edge
-//  |         attention il faut tester l orientation du conge avant|
-//  |         de determiner les transitions pcurves/conge          |
+// edge:curve 3d/pcurves           fillet                         edge
+//  |         attention it is necessary to test orientation of the fillet before|
+//  |         determining the transitions pcurves/fillet           |
 //  |                                                              |
 //  \/                                                             \/
 // firstpoint sur S2 -------------edge:courbe3d/pcurves--->lastpoint sur S2
 //
 //=======================================================================
 void  ChFi3d_ComputeArete(const ChFiDS_CommonPoint&   P1,
-                         const gp_Pnt2d&             UV1,
-                         const ChFiDS_CommonPoint&   P2,
-                         const gp_Pnt2d&             UV2,
-                         const Handle(Geom_Surface)& Surf,
-                         Handle(Geom_Curve)&         C3d,
-                         Handle(Geom2d_Curve)&       Pcurv,
-                         Standard_Real&              Pardeb,
-                         Standard_Real&              Parfin,
-                         const Standard_Real         tol3d,
-                         const Standard_Real         tol2d,
-                         Standard_Real&              tolreached,
-                         const Standard_Integer      IFlag)
-     // IFlag=0 pcurve et courbe 3d 
-     // IFlag>0 pcurve (parametrage impose si IFlag=2)
+  const gp_Pnt2d&             UV1,
+  const ChFiDS_CommonPoint&   P2,
+  const gp_Pnt2d&             UV2,
+  const Handle(Geom_Surface)& Surf,
+  Handle(Geom_Curve)&         C3d,
+  Handle(Geom2d_Curve)&       Pcurv,
+  Standard_Real&              Pardeb,
+  Standard_Real&              Parfin,
+  const Standard_Real         tol3d,
+  const Standard_Real         tol2d,
+  Standard_Real&              tolreached,
+  const Standard_Integer      IFlag)
+  // IFlag=0 pcurve et courbe 3d 
+  // IFlag>0 pcurve (parametrage impose si IFlag=2)
 {
   /*szv:static*/ Handle(GeomAdaptor_HSurface) hs(new GeomAdaptor_HSurface());
   /*szv:static*/ Handle(GeomAdaptor_HCurve) hc(new GeomAdaptor_HCurve());
@@ -1612,17 +1620,17 @@ void  ChFi3d_ComputeArete(const ChFiDS_CommonPoint&   P1,
       Parfin = UV2.Y();
       C3d = Surf->UIso(UV1.X());
       if(Pardeb > Parfin) {
-       Pardeb = C3d->ReversedParameter(Pardeb);
-       Parfin = C3d->ReversedParameter(Parfin);
-       C3d->Reverse();
+        Pardeb = C3d->ReversedParameter(Pardeb);
+        Parfin = C3d->ReversedParameter(Parfin);
+        C3d->Reverse();
       }
       Handle(Geom_TrimmedCurve) tc = Handle(Geom_TrimmedCurve)::DownCast(C3d);
       if(!tc.IsNull()) {
-       C3d = tc->BasisCurve();
-       if (C3d->IsPeriodic()) {
-         ElCLib::AdjustPeriodic(C3d->FirstParameter(),C3d->LastParameter(),
-                                tol2d,Pardeb,Parfin);
-       }
+        C3d = tc->BasisCurve();
+        if (C3d->IsPeriodic()) {
+          ElCLib::AdjustPeriodic(C3d->FirstParameter(),C3d->LastParameter(),
+            tol2d,Pardeb,Parfin);
+        }
       }
     }
     if(IFlag != 1) {
@@ -1641,17 +1649,17 @@ void  ChFi3d_ComputeArete(const ChFiDS_CommonPoint&   P1,
       Parfin = UV2.X();
       C3d = Surf->VIso(UV1.Y());
       if(Pardeb > Parfin) {
-       Pardeb = C3d->ReversedParameter(Pardeb);
-       Parfin = C3d->ReversedParameter(Parfin);
-       C3d->Reverse();
+        Pardeb = C3d->ReversedParameter(Pardeb);
+        Parfin = C3d->ReversedParameter(Parfin);
+        C3d->Reverse();
       }
       Handle(Geom_TrimmedCurve) tc = Handle(Geom_TrimmedCurve)::DownCast(C3d);
       if(!tc.IsNull()) {
-       C3d = tc->BasisCurve();
-       if (C3d->IsPeriodic()) {
-         ElCLib::AdjustPeriodic(C3d->FirstParameter(),C3d->LastParameter(),
-                                tol2d,Pardeb,Parfin);
-       }
+        C3d = tc->BasisCurve();
+        if (C3d->IsPeriodic()) {
+          ElCLib::AdjustPeriodic(C3d->FirstParameter(),C3d->LastParameter(),
+            tol2d,Pardeb,Parfin);
+        }
       }
     }
     if(IFlag != 1) {
@@ -1666,8 +1674,8 @@ void  ChFi3d_ComputeArete(const ChFiDS_CommonPoint&   P1,
   else if (IFlag == 0) {
 
     if (P1.IsVertex() || P2.IsVertex() || !P1.IsOnArc() || !P2.IsOnArc()) {
-    // On construit une droite pour ne pas se tromper 
-    // d'arc et donc de tangente.
+      // A straight line is constructed to avoid  
+      // arc and tangent.
       TColgp_Array1OfPnt2d qoles(1,2);
       qoles(1)=UV1;
       qoles(2)=UV2;
@@ -1683,24 +1691,24 @@ void  ChFi3d_ComputeArete(const ChFiDS_CommonPoint&   P1,
       C1.D1(P2.ParameterOnArc(),Pp,Vv2);
       hs->ChangeSurface().Load(Surf);
       Pcurv = ChFi3d_BuildPCurve(hs,UV1,Vv1,UV2,Vv2,Standard_True); 
-      // Il y a des cas ou la PCurve ainsi construite sort de la 
-      // surface, en particulier lorsque celle-ci provient d u
-      // prolongement. On fait donc un controle a posteriori et
-      // si ca sort on la remplace par la droite UV1 UV2, tant
-      // pis pour la tangence avec les arcs voisins!!!
+      // There are some cases when PCurve constructed in this way  
+      // leaves the surface, in particular if it results from a
+      // extension. A posteriori checking is required and if
+      // the curve leaves the surface it is replaced by straight line UV1 UV2
+      // non regarding the tangency with neighboring arcs!
       Bnd_Box2d bs;
       Standard_Real umin,umax,vmin,vmax;
       Surf->Bounds(umin,umax,vmin,vmax);
       bs.Update(umin,vmin,umax,vmax);
       Standard_Boolean aIN = Standard_True;
       for(Standard_Integer ii = 1; ii <= 4 && aIN; ii++) {
-       if(bs.IsOut((*((Handle_Geom2d_BezierCurve*) &Pcurv))->Pole(ii))) {
-         aIN = Standard_False;
-         TColgp_Array1OfPnt2d qoles(1,2);
-         qoles(1)=UV1;
-         qoles(2)=UV2;
-         Pcurv = new Geom2d_BezierCurve(qoles);
-       }
+       if(bs.IsOut(Handle(Geom2d_BezierCurve)::DownCast (Pcurv)->Pole(ii))) {
+          aIN = Standard_False;
+          TColgp_Array1OfPnt2d qoles(1,2);
+          qoles(1)=UV1;
+          qoles(2)=UV2;
+          Pcurv = new Geom2d_BezierCurve(qoles);
+        }
       }
     }
     Geom2dAdaptor_Curve AC(Pcurv);
@@ -1731,16 +1739,16 @@ void  ChFi3d_ComputeArete(const ChFiDS_CommonPoint&   P1,
 //purpose  : 
 //=======================================================================
 Handle(TopOpeBRepDS_SurfaceCurveInterference)  ChFi3d_FilCurveInDS
-(const Standard_Integer Icurv,
- const Standard_Integer Isurf,
- const Handle(Geom2d_Curve)& Pcurv,
- const TopAbs_Orientation Et)
+  (const Standard_Integer Icurv,
 const Standard_Integer Isurf,
 const Handle(Geom2d_Curve)& Pcurv,
 const TopAbs_Orientation Et)
 {
   Handle(TopOpeBRepDS_SurfaceCurveInterference) SC1;
   SC1 = new TopOpeBRepDS_SurfaceCurveInterference(TopOpeBRepDS_Transition(Et),
-                                                 TopOpeBRepDS_SURFACE,
-                                                 Isurf,TopOpeBRepDS_CURVE,Icurv,
-                                                 Pcurv);
+    TopOpeBRepDS_SURFACE,
+    Isurf,TopOpeBRepDS_CURVE,Icurv,
+    Pcurv);
   return SC1;
 }
 //=======================================================================
@@ -1751,42 +1759,44 @@ Handle(TopOpeBRepDS_SurfaceCurveInterference)  ChFi3d_FilCurveInDS
 TopAbs_Orientation ChFi3d_TrsfTrans(const IntSurf_TypeTrans T1) 
 {
   switch (T1)  {
-    case IntSurf_In:  return TopAbs_FORWARD;
-    case IntSurf_Out: return TopAbs_REVERSED;
+  case IntSurf_In:  return TopAbs_FORWARD;
+  case IntSurf_Out: return TopAbs_REVERSED;
+  default:
+    break;
   }
   return TopAbs_INTERNAL;
 }
 //=======================================================================
 //function : FilCommonPoint
-//purpose  : Chargement du common point
-//           gestion du fait que l'on est deja sur un vertex existant
+//purpose  : Loading of the common point
+//           management of the case when it happens on already existing vertex.
 //=======================================================================
 Standard_EXPORT void ChFi3d_FilCommonPoint(const BRepBlend_Extremity& SP,
-                                          const IntSurf_TypeTrans TransLine,
-                                          const Standard_Boolean Start,
-                                          ChFiDS_CommonPoint& CP,
-                                          const Standard_Real Tol)
+  const IntSurf_TypeTrans TransLine,
+  const Standard_Boolean Start,
+  ChFiDS_CommonPoint& CP,
+  const Standard_Real Tol)
 {
-//  BRep_Tool Outil;
+  //  BRep_Tool Outil;
   Standard_Real Dist, maxtol = Max(Tol,CP.Tolerance());
 
-  CP.SetPoint(SP.Value()); // On commence par le point, le vecteur
+  CP.SetPoint(SP.Value()); // One starts with the point and the vector
   if (SP.HasTangent()) {
     if (Start) {
-      CP.SetVector(SP.Tangent().Reversed()); // On oriente la tangente vers la sortie
+      CP.SetVector(SP.Tangent().Reversed()); // The tangent is oriented to the exit
     }
     else {
       CP.SetVector(SP.Tangent());
     }
   }
-  
-  CP.SetParameter(SP.ParameterOnGuide()); //et le parametre de la spine
 
-  if (SP.IsVertex()) { // On charge le Vertex si besoin est
-                       // (A l'interieur d'une face)
+  CP.SetParameter(SP.ParameterOnGuide()); // and the parameter of the spine
+
+  if (SP.IsVertex()) { // the Vertex is loaded if required
+    // (inside of a face)
     TopoDS_Vertex V =  
       Handle(BRepTopAdaptor_HVertex)::DownCast(SP.Vertex())->Vertex();
-  
+
     CP.SetVertex(V);  
     Dist = (SP.Value()).Distance(BRep_Tool::Pnt(V));
     //// modified by jgv, 18.09.02 for OCC571 ////
@@ -1794,13 +1804,12 @@ Standard_EXPORT void ChFi3d_FilCommonPoint(const BRepBlend_Extremity& SP,
     maxtol = Max( Dist, maxtol );
     //////////////////////////////////////////////
     CP.SetPoint(BRep_Tool::Pnt(V));
-    
-    //la sequence d arcs l information est connu par le vertex (ancestor)
-    //dans ce cas on ne calculera pas les transitions c est a ce programme
-    //de le faire
+
+    //the sequence of arcs the information is known by thee vertex (ancestor)
+    //in this case the transitions are not computed, it is done by this program
   }
-  
-  if (SP.NbPointOnRst() != 0) { //  On charge un arc, et/ou un vertex
+
+  if (SP.NbPointOnRst() != 0) { //  An arc, and/or a vertex is loaded
 
     const BRepBlend_PointOnRst& PR = SP.PointOnRst(1);
     Handle(BRepAdaptor_HCurve2d) 
@@ -1817,40 +1826,40 @@ Standard_EXPORT void ChFi3d_FilCommonPoint(const BRepBlend_Extremity& SP,
       DistF = (SP.Value()).Distance(BRep_Tool::Pnt(V[0]));
       DistL = (SP.Value()).Distance(BRep_Tool::Pnt(V[1]));
       if (DistF<DistL) { Index_min = 0;
-                        Dist = DistF; }
+      Dist = DistF; }
       else             { Index_min = 1;
-                        Dist = DistL; }
+      Dist = DistL; }
 
       if (Dist <= maxtol + BRep_Tool::Tolerance(V[Index_min]) ) { 
-       // On tombe sur un vertex prexistant
-        CP.SetVertex(V[Index_min]); //On Charge l'ancien vertex
-         CP.SetPoint( BRep_Tool::Pnt(V[Index_min]) );
-         maxtol = Max(BRep_Tool::Tolerance(V[Index_min]),maxtol);
-        //// modified by jgv, 18.09.02 for OCC571 ////
-        //maxtol += Dist;
-        maxtol = Max( Dist, maxtol );
-        //////////////////////////////////////////////
-         LeParamAmoi = BRep_Tool::Parameter(V[Index_min], E);    
+        // a prexisting vertex has been met
+        CP.SetVertex(V[Index_min]); //the old vertex is loaded
+        CP.SetPoint( BRep_Tool::Pnt(V[Index_min]) );
+        maxtol = Max(BRep_Tool::Tolerance(V[Index_min]),maxtol);
+        //// modified by jgv, 18.09.02 for OCC571 ////
+        //maxtol += Dist;
+        maxtol = Max( Dist, maxtol );
+        //////////////////////////////////////////////
+        LeParamAmoi = BRep_Tool::Parameter(V[Index_min], E);    
       }
-      else {   // Creation d'un arc seul
-       maxtol = Max(BRep_Tool::Tolerance(E),maxtol);
-       maxtol = Max(SP.Tolerance(),maxtol);
-       LeParamAmoi = PR.ParameterOnArc();
+      else {   // Creation of an arc only
+        maxtol = Max(BRep_Tool::Tolerance(E),maxtol);
+        maxtol = Max(SP.Tolerance(),maxtol);
+        LeParamAmoi = PR.ParameterOnArc();
       }
 
-      // Definition de l'arc
+      // Definition of the arc
       TopAbs_Orientation Tr;
       TopAbs_Orientation Or = E.Orientation();
       if (Start) {
-       Tr = TopAbs::Reverse(TopAbs::Compose(ChFi3d_TrsfTrans(TransLine),Or));
+        Tr = TopAbs::Reverse(TopAbs::Compose(ChFi3d_TrsfTrans(TransLine),Or));
       }
       else {
-       Tr = TopAbs::Compose(ChFi3d_TrsfTrans(TransLine),Or);
+        Tr = TopAbs::Compose(ChFi3d_TrsfTrans(TransLine),Or);
       }
       CP.SetArc(maxtol, E, LeParamAmoi, Tr);
     }
   }
-  CP.SetTolerance(maxtol); // On finit par la tolerance.
+  CP.SetTolerance(maxtol); // Finally, the tolerance.
 }
 
 //=======================================================================
@@ -1858,9 +1867,9 @@ Standard_EXPORT void ChFi3d_FilCommonPoint(const BRepBlend_Extremity& SP,
 //purpose  : 
 //=======================================================================
 Standard_Integer ChFi3d_SolidIndex(const Handle(ChFiDS_Spine)&  sp,
-                                  TopOpeBRepDS_DataStructure&  DStr,
-                                  ChFiDS_Map&                  MapESo,
-                                  ChFiDS_Map&                  MapESh)
+  TopOpeBRepDS_DataStructure&  DStr,
+  ChFiDS_Map&                  MapESo,
+  ChFiDS_Map&                  MapESh)
 {
   if(sp.IsNull() || sp->NbEdges() == 0) 
     Standard_Failure::Raise("SolidIndex : Spine incomplete");
@@ -1876,12 +1885,12 @@ Standard_Integer ChFi3d_SolidIndex(const Handle(ChFiDS_Spine)&  sp,
 //purpose  : 
 //=======================================================================
 Standard_Integer  ChFi3d_IndexPointInDS(const ChFiDS_CommonPoint& P1,
-                                       TopOpeBRepDS_DataStructure& DStr) 
+  TopOpeBRepDS_DataStructure& DStr) 
 {
   if (P1.IsVertex()) {
     // --------------------------------->  !*!*!* 
-    // Attention : On se permet d'ecrabouiller la tolerance
-    // il faudrait prevoir un mecanimse propre.
+    // Attention : it is necessary ti implement a mechanism 
+    // controlling tolerance.
     BRep_Builder B;
     B.UpdateVertex(P1.Vertex(), P1.Point(), P1.Tolerance());
     return DStr.AddShape(P1.Vertex());
@@ -1893,21 +1902,21 @@ Standard_Integer  ChFi3d_IndexPointInDS(const ChFiDS_CommonPoint& P1,
 //purpose  : 
 //=======================================================================
 Handle(TopOpeBRepDS_CurvePointInterference) 
-     ChFi3d_FilPointInDS(const TopAbs_Orientation Et,
-                        const Standard_Integer Ic,
-                        const Standard_Integer Ip,
-                        const Standard_Real Par,
-                        const Standard_Boolean IsVertex)
+  ChFi3d_FilPointInDS(const TopAbs_Orientation Et,
+  const Standard_Integer Ic,
+  const Standard_Integer Ip,
+  const Standard_Real Par,
+  const Standard_Boolean IsVertex)
 {
   Handle(TopOpeBRepDS_CurvePointInterference) CP1;
   if (IsVertex)    
     CP1 = new TopOpeBRepDS_CurvePointInterference (TopOpeBRepDS_Transition(Et),
-                                                  TopOpeBRepDS_CURVE,Ic,
-                                                  TopOpeBRepDS_VERTEX,Ip,Par); 
+    TopOpeBRepDS_CURVE,Ic,
+    TopOpeBRepDS_VERTEX,Ip,Par); 
   else
     CP1 = new TopOpeBRepDS_CurvePointInterference (TopOpeBRepDS_Transition(Et),
-                                                  TopOpeBRepDS_CURVE,Ic,
-                                                  TopOpeBRepDS_POINT,Ip,Par);
+    TopOpeBRepDS_CURVE,Ic,
+    TopOpeBRepDS_POINT,Ip,Par);
   return CP1;
 }
 //=======================================================================
@@ -1915,34 +1924,34 @@ Handle(TopOpeBRepDS_CurvePointInterference)
 //purpose  : 
 //=======================================================================
 Handle(TopOpeBRepDS_CurvePointInterference) 
-     ChFi3d_FilVertexInDS(const TopAbs_Orientation Et,
-                         const Standard_Integer Ic,
-                         const Standard_Integer Ip,
-                         const Standard_Real Par)
+  ChFi3d_FilVertexInDS(const TopAbs_Orientation Et,
+  const Standard_Integer Ic,
+  const Standard_Integer Ip,
+  const Standard_Real Par)
 {
-  
+
   Handle(TopOpeBRepDS_CurvePointInterference) CP1 = new
     TopOpeBRepDS_CurvePointInterference (TopOpeBRepDS_Transition(Et),
-                                        TopOpeBRepDS_CURVE,Ic,
-                                        TopOpeBRepDS_VERTEX,Ip,Par);
+    TopOpeBRepDS_CURVE,Ic,
+    TopOpeBRepDS_VERTEX,Ip,Par);
   return CP1;
 }
 //=======================================================================
 //function : Orientation
-//purpose  : retourne l'orientation d'une interference (la premiere trouvee
-//           dans la liste).
+//purpose  : returns the orientation of the interference (the first found
+//           in the list).
 //=======================================================================
 
 static Standard_Boolean
   ChFi3d_Orientation(const TopOpeBRepDS_ListOfInterference& LI,
-                    const Standard_Integer                 igros,
-                    const Standard_Integer                 ipetit,
-                    TopAbs_Orientation&                    Or,
-                    const Standard_Boolean                 isvertex = Standard_False,
-                    const Standard_Boolean                 aprendre = Standard_False)
+  const Standard_Integer                 igros,
+  const Standard_Integer                 ipetit,
+  TopAbs_Orientation&                    Or,
+  const Standard_Boolean                 isvertex = Standard_False,
+  const Standard_Boolean                 aprendre = Standard_False)
 {
-  //Dans le cas, ou on veux inserer un point/vertex, on desire savoir
-  // si c'est un point ou un vertex, car leur index peuvent etre les memes.
+  //In case, when it is necessary to insert a point/vertex, it should be 
+  //known if this is a point or a vertex, because their index can be the same.
   TopOpeBRepDS_Kind typepetit;
   if (isvertex)
     typepetit =  TopOpeBRepDS_VERTEX;
@@ -1958,14 +1967,14 @@ static Standard_Boolean
     cur->GKGSKS(GK,G,SK,S);
     if (aprendre) {
       if ( S == igros && G == ipetit && GK == typepetit) {
-       Or = cur->Transition().Orientation(TopAbs_IN);
-       return Standard_True;
+        Or = cur->Transition().Orientation(TopAbs_IN);
+        return Standard_True;
       }
     }
     else  {
       if ( S == igros && G == ipetit) {
-       Or = cur->Transition().Orientation(TopAbs_IN);
-       return Standard_True;
+        Or = cur->Transition().Orientation(TopAbs_IN);
+        return Standard_True;
       } 
     }
   }
@@ -1974,14 +1983,15 @@ static Standard_Boolean
 
 //=======================================================================
 //function : Contains
-//purpose  : Verifie qu une interference n existe pas deja.
-//=======================================================================
-static Standard_Boolean 
-  ChFi3d_Contains(const TopOpeBRepDS_ListOfInterference& LI,
-                 const Standard_Integer                 igros,
-                 const Standard_Integer                 ipetit,
-                 const Standard_Boolean                 isvertex = Standard_False,
-                 const Standard_Boolean                 aprendre = Standard_False)                             
+//purpose  : Check if the interference does not already exist.
+//====================================================================
+
+static Standard_Boolean ChFi3d_Contains
+  (const TopOpeBRepDS_ListOfInterference& LI,
+  const Standard_Integer                 igros,
+  const Standard_Integer                 ipetit,
+  const Standard_Boolean                 isvertex = Standard_False,
+  const Standard_Boolean                 aprendre = Standard_False)                             
 {
   TopAbs_Orientation bidOr;
   return ChFi3d_Orientation(LI,igros,ipetit,bidOr,isvertex,aprendre);
@@ -1991,24 +2001,23 @@ static Standard_Boolean
 //purpose  : 
 //=======================================================================
 static void QueryAddVertexInEdge(TopOpeBRepDS_ListOfInterference& LI,
-                                const Standard_Integer                 IC,
-                                const Standard_Integer                 IV,
-                                const Standard_Real                    par,
-                                const TopAbs_Orientation               Or)
+  const Standard_Integer                 IC,
+  const Standard_Integer                 IV,
+  const Standard_Real                    par,
+  const TopAbs_Orientation               Or)
 {
   TopOpeBRepDS_ListIteratorOfListOfInterference it(LI);
   for (; it.More(); it.Next() ) {
     const Handle(TopOpeBRepDS_Interference)& cur = it.Value();
-    const Handle(TopOpeBRepDS_CurvePointInterference)& cpi = 
-      Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(cur);
+    Handle(TopOpeBRepDS_CurvePointInterference) cpi (Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(cur));
     if(!cpi.IsNull()) {
       Standard_Integer newIV = cpi->Geometry();
       TopOpeBRepDS_Kind kv = cpi->GeometryType();
       TopAbs_Orientation newOr = cpi->Transition().Orientation(TopAbs_IN);
       Standard_Real newpar = cpi->Parameter();
       if(IV == newIV && kv == TopOpeBRepDS_VERTEX && 
-        Or == newOr && Abs(par - newpar) < 1.e-10) {
-       return;
+        Or == newOr && Abs(par - newpar) < 1.e-10) {
+          return;
       }
     }
   }
@@ -2022,10 +2031,10 @@ static void QueryAddVertexInEdge(TopOpeBRepDS_ListOfInterference& LI,
 //purpose  : 
 //=======================================================================
 static void CutEdge(const TopoDS_Vertex&           V,
-                   const Handle(ChFiDS_SurfData)& SD,
-                   TopOpeBRepDS_DataStructure&    DStr,
-                   const Standard_Boolean         ,
-                   const Standard_Integer         ons)
+  const Handle(ChFiDS_SurfData)& SD,
+  TopOpeBRepDS_DataStructure&    DStr,
+  const Standard_Boolean         ,
+  const Standard_Integer         ons)
 {
   if(!SD->IsOnCurve(ons)) return;
   Standard_Integer IC = SD->IndexOfC(ons);
@@ -2035,8 +2044,7 @@ static void CutEdge(const TopoDS_Vertex&           V,
   E.Orientation(TopAbs_FORWARD);
   TopExp_Explorer ex;
 
-  // les traiter tous en verifiant que ce n est pas 
-  // deja fait.
+  // process them checking that it has not been done already.
   for(ex.Init(E,TopAbs_VERTEX);ex.More();ex.Next()) {
     const TopoDS_Vertex& vv = TopoDS::Vertex(ex.Current());
     if(vv.IsSame(V)) {
@@ -2053,15 +2061,15 @@ static void CutEdge(const TopoDS_Vertex&           V,
 //=======================================================================
 static Standard_Boolean 
   findIndexPoint(const TopOpeBRepDS_DataStructure& DStr,
-                const Handle(ChFiDS_SurfData)&    Fd,
-                const Standard_Integer            OnS,
-                Standard_Integer&                 ipoin)
+  const Handle(ChFiDS_SurfData)&    Fd,
+  const Standard_Integer            OnS,
+  Standard_Integer&                 ipoin)
 {
   ipoin = 0;
   gp_Pnt P = Fd->Vertex(Standard_False,OnS).Point();
 
   TopOpeBRepDS_ListIteratorOfListOfInterference SCIIt, CPIIt;
-  
+
   SCIIt.Initialize (DStr.SurfaceInterferences(Fd->Surf()));
   for (; SCIIt.More(); SCIIt.Next()) {
     Handle(TopOpeBRepDS_SurfaceCurveInterference) SCI =
@@ -2070,13 +2078,13 @@ static Standard_Boolean
     CPIIt.Initialize (DStr.CurveInterferences(SCI->Geometry()));
     for (; CPIIt.More(); CPIIt.Next()) {
       Handle(TopOpeBRepDS_CurvePointInterference) CPI =
-       Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(CPIIt.Value());
+        Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(CPIIt.Value());
       if (CPI.IsNull()) continue;
       Standard_Integer iPoint = CPI->Geometry();
       TopOpeBRepDS_Point tp = DStr.Point(iPoint);
       if (P.IsEqual(tp.Point(), tp.Tolerance())) {
-       ipoin = iPoint;
-       return Standard_True;
+        ipoin = iPoint;
+        return Standard_True;
       }
     }
   }
@@ -2087,13 +2095,13 @@ static Standard_Boolean
 //purpose  : 
 //=======================================================================
 void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
-                  const Handle(ChFiDS_Stripe)& CorDat,
-                  TopOpeBRepDS_DataStructure&  DStr,
-                  ChFiDS_Regularities&         reglist,
-                  const Standard_Real          tol3d,
-                  const Standard_Real          tol2d) 
+  const Handle(ChFiDS_Stripe)& CorDat,
+  TopOpeBRepDS_DataStructure&  DStr,
+  ChFiDS_Regularities&         reglist,
+  const Standard_Real          tol3d,
+  const Standard_Real          tol2d) 
 {
-//  BRep_Tool Outil;
+  //  BRep_Tool Outil;
   TopExp_Explorer ex;
   Handle(ChFiDS_Spine) spine = CorDat->Spine();
   Standard_Boolean Closed = Standard_False;
@@ -2111,7 +2119,7 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
   Standard_Integer Iarc1 = 0,Iarc2 = 0;
   TopAbs_Orientation trafil1 = TopAbs_FORWARD, trafil2 = TopAbs_FORWARD;
   Standard_Integer IcFil1,IcFil2,Isurf,Ishape1,Ishape2;
-  Standard_Real Pardeb,Parfin;
+  Standard_Real Pardeb = 0.,Parfin = 0.;
   TopAbs_Orientation ET1;
   Handle(TopOpeBRepDS_CurvePointInterference) Interfp1,Interfp2;
   Handle(TopOpeBRepDS_SurfaceCurveInterference) Interfc1,Interfc2;
@@ -2125,8 +2133,8 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
   TopOpeBRepDS_ListOfInterference& SolidInterfs = 
     DStr.ChangeShapeInterferences(SolidIndex);
 
-  ChFiDS_Regul regcout; // pour les CD closed and tangent
-  ChFiDS_Regul regfilfil; // pour les joints Surf/Surf
+  ChFiDS_Regul regcout; // for closed and tangent CD
+  ChFiDS_Regul regfilfil; // for connections Surf/Surf
 
   ChFiDS_CommonPoint V3;
   ChFiDS_CommonPoint V4;
@@ -2138,25 +2146,25 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
       Handle(ChFiDS_SurfData) Fd = SeqFil(j);
       Standard_Integer onS;
       for (onS=1; onS<=2; onS++) {
-       const ChFiDS_FaceInterference& Fi = Fd->Interference(onS);
-       IcFil1 = Fi.LineIndex();
-       if (!IcFil1) continue;
-       Standard_Real FiLen = Abs(Fi.FirstParameter()-Fi.LastParameter());
-       if (FiLen > Precision::PConfusion()) continue;
-       TopOpeBRepDS_Curve& cc = DStr.ChangeCurve(IcFil1);
-       cc.ChangeCurve().Nullify();
-
-       // care of CommonPoint, eap occ354
-       if (j!=1 && j!=SeqFil.Length()) continue;
-       Standard_Boolean isfirst = (j==1);
-       Standard_Integer i = isfirst ? j+1 : j-1;
-       ChFiDS_CommonPoint& CP1 = SeqFil(i)->ChangeVertex(isfirst,onS);
-       if (Fd->Vertex(isfirst,onS).IsOnArc() && CP1.IsOnArc()) {
-         ChFiDS_CommonPoint& CP2 = Fd->ChangeVertex(!isfirst,onS);
-         CP1.Reset();
-         CP1.SetPoint(CP2.Point());
-         CP2.Reset();
-         CP2.SetPoint(CP1.Point());
+        const ChFiDS_FaceInterference& Fi = Fd->Interference(onS);
+        IcFil1 = Fi.LineIndex();
+        if (!IcFil1) continue;
+        Standard_Real FiLen = Abs(Fi.FirstParameter()-Fi.LastParameter());
+        if (FiLen > Precision::PConfusion()) continue;
+        TopOpeBRepDS_Curve& cc = DStr.ChangeCurve(IcFil1);
+        cc.ChangeCurve().Nullify();
+
+        // care of CommonPoint, eap occ354
+        if (j!=1 && j!=SeqFil.Length()) continue;
+        Standard_Boolean isfirst = (j==1);
+        Standard_Integer i = isfirst ? j+1 : j-1;
+        ChFiDS_CommonPoint& CP1 = SeqFil(i)->ChangeVertex(isfirst,onS);
+        if (Fd->Vertex(isfirst,onS).IsOnArc() && CP1.IsOnArc()) {
+          ChFiDS_CommonPoint& CP2 = Fd->ChangeVertex(!isfirst,onS);
+          CP1.Reset();
+          CP1.SetPoint(CP2.Point());
+          CP2.Reset();
+          CP2.SetPoint(CP1.Point());
         }
       }
     }
@@ -2181,55 +2189,55 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
       isInDS2 = Standard_True;
       isInDS1 = isInDS1 || SeqFil.Length()-j+1 < CorDat->IsInDS(Standard_False);
     }
-    
-    // creation de la SolidSurfaceInterference
-    
+
+    // creation of SolidSurfaceInterference
+
     Handle(TopOpeBRepDS_SolidSurfaceInterference) 
       SSI = new TopOpeBRepDS_SolidSurfaceInterference
-       (TopOpeBRepDS_Transition(Fd->Orientation()),
-        TopOpeBRepDS_SOLID,
-        SolidIndex,
-        TopOpeBRepDS_SURFACE,
-        Isurf);
-    
+      (TopOpeBRepDS_Transition(Fd->Orientation()),
+      TopOpeBRepDS_SOLID,
+      SolidIndex,
+      TopOpeBRepDS_SURFACE,
+      Isurf);
+
     SolidInterfs.Append(SSI);
-    
+
     const ChFiDS_FaceInterference& Fi1 = Fd->InterferenceOnS1();
     const ChFiDS_FaceInterference& Fi2 = Fd->InterferenceOnS2();     
     const ChFiDS_CommonPoint& V1 = Fd->VertexFirstOnS1();
     const ChFiDS_CommonPoint& V2 = Fd->VertexFirstOnS2();
 
-    // Un petit traitement pour gerer les interference doubles
+    // Processing to manage double interferences
     if (j>1) {
       if (V1.IsOnArc() && V3.IsOnArc() && V1.Arc().IsSame(V3.Arc())) {
-       //on initialise Iarc1
-       //Iarc1 = DStr.AddShape(V1.Arc());
-       if (ChFi3d_Contains(DStr.ShapeInterferences(Iarc1),Iarc1,Ipoin1) && 
-           (V1.TransitionOnArc() != V3.TransitionOnArc()) ) {
-         Interfp1= ChFi3d_FilPointInDS(V1.TransitionOnArc(),Iarc1,Ipoin1,
-                                       V1.ParameterOnArc());
-         DStr.ChangeShapeInterferences(V1.Arc()).Append(Interfp1);
-       }
+        //Iarc1 is initialized
+        //Iarc1 = DStr.AddShape(V1.Arc());
+        if (ChFi3d_Contains(DStr.ShapeInterferences(Iarc1),Iarc1,Ipoin1) && 
+          (V1.TransitionOnArc() != V3.TransitionOnArc()) ) {
+            Interfp1= ChFi3d_FilPointInDS(V1.TransitionOnArc(),Iarc1,Ipoin1,
+              V1.ParameterOnArc());
+            DStr.ChangeShapeInterferences(V1.Arc()).Append(Interfp1);
+        }
       }
 
       if (V2.IsOnArc() && V4.IsOnArc() && V2.Arc().IsSame(V4.Arc())) {
-       //on initialise Iarc2
-       //Iarc2 = DStr.AddShape(V2.Arc());
-       if ( ChFi3d_Contains(DStr.ShapeInterferences(Iarc2),Iarc2,Ipoin2)  && 
-           (V2.TransitionOnArc() != V4.TransitionOnArc()) ) {
-         Interfp2= ChFi3d_FilPointInDS(V2.TransitionOnArc(),Iarc2,Ipoin2,
-                                       V2.ParameterOnArc());
-         DStr.ChangeShapeInterferences(V2.Arc()).Append(Interfp2);
-       }
+        //Iarc2 is initialized
+        //Iarc2 = DStr.AddShape(V2.Arc());
+        if ( ChFi3d_Contains(DStr.ShapeInterferences(Iarc2),Iarc2,Ipoin2)  && 
+          (V2.TransitionOnArc() != V4.TransitionOnArc()) ) {
+            Interfp2= ChFi3d_FilPointInDS(V2.TransitionOnArc(),Iarc2,Ipoin2,
+              V2.ParameterOnArc());
+            DStr.ChangeShapeInterferences(V2.Arc()).Append(Interfp2);
+        }
       }
     }
 
     V3 = Fd->VertexLastOnS1();
     V4 = Fd->VertexLastOnS2();
-    
+
     if(Ishape1 != 0) {
       if(Ishape1 > 0) {
-       trafil1 = DStr.Shape(Ishape1).Orientation();
+        trafil1 = DStr.Shape(Ishape1).Orientation();
       }
       else{
         ChFi3d_Orientation(SolidInterfs,SolidIndex,-Ishape1,trafil1);
@@ -2240,7 +2248,7 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
     }
     else{
       if(Ishape2 > 0) {
-       trafil2 = DStr.Shape(Ishape2).Orientation();
+        trafil2 = DStr.Shape(Ishape2).Orientation();
       }
       else{
         ChFi3d_Orientation(SolidInterfs,SolidIndex,-Ishape2,trafil2);
@@ -2249,11 +2257,11 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
       trafil2 = TopAbs::Compose(TopAbs::Reverse(Fi2.Transition()),trafil2);
       trafil1 = TopAbs::Reverse(trafil2);
     }
-    
+
     ET1 = TopAbs::Reverse(trafil1);
-    
-    // Un petit paragraphe pour traiter les contacts aretes qui touchent 
-    // un vertex de l'obstacle.
+
+    // A small paragraph to process contacts of edges, which touch 
+    // a vertex of the obstacle.
     if(V1.IsVertex() && Fd->IsOnCurve1()) {
       const TopoDS_Vertex& vv1 = V1.Vertex();
       CutEdge(vv1,Fd,DStr,1,1);
@@ -2270,123 +2278,123 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
       const TopoDS_Vertex& vv4 = V4.Vertex();
       CutEdge(vv4,Fd,DStr,0,2);
     }
-    
+
     if (j == 1) {
       isVertex1 = V1.IsVertex();
       isVertex2 = V2.IsVertex();
       Singulier_en_Bout =  (V1.Point().IsEqual(V2.Point(), 0));
-      
+
       if (Singulier_en_Bout) {
-         // Queue de Billard
-         if ((!V1.IsVertex()) || (!V2.IsVertex())) {
-
-        }
-        else {
-          isVertex1 = isVertex2 = Standard_True; //precaution...
-          // On elimine l'arete de la spine debouchant sur ce vertex.
-          TopoDS_Edge Arcspine = spine->Edges(1);
-          BoutdeVtx = V1.Vertex();
-          Standard_Integer IArcspine = DStr.AddShape(Arcspine);
-          Standard_Integer IVtx = CorDat->IndexFirstPointOnS1();
-
-          TopAbs_Orientation OVtx = TopAbs_FORWARD;;
-
-          for(ex.Init(Arcspine.Oriented(TopAbs_FORWARD),TopAbs_VERTEX); 
-              ex.More(); ex.Next()) {
-            if(BoutdeVtx.IsSame(ex.Current())) {
-              OVtx = ex.Current().Orientation();
-              break;
-            }
-          }
-          OVtx = TopAbs::Reverse(OVtx);
-          Standard_Real parVtx = BRep_Tool::Parameter(BoutdeVtx,Arcspine);
-          Handle(TopOpeBRepDS_CurvePointInterference) 
-            interfv = ChFi3d_FilVertexInDS(OVtx,IArcspine,IVtx,parVtx);
-          DStr.ChangeShapeInterferences(IArcspine).Append(interfv);
-        }
-       }
+        // Queue de Billard
+        if ((!V1.IsVertex()) || (!V2.IsVertex())) {
+
+        }
+        else {
+          isVertex1 = isVertex2 = Standard_True; //caution...
+          // The edge is removed from spine starting on this vertex.
+          TopoDS_Edge Arcspine = spine->Edges(1);
+          BoutdeVtx = V1.Vertex();
+          Standard_Integer IArcspine = DStr.AddShape(Arcspine);
+          Standard_Integer IVtx = CorDat->IndexFirstPointOnS1();
+
+          TopAbs_Orientation OVtx = TopAbs_FORWARD;;
+
+          for(ex.Init(Arcspine.Oriented(TopAbs_FORWARD),TopAbs_VERTEX); 
+            ex.More(); ex.Next()) {
+              if(BoutdeVtx.IsSame(ex.Current())) {
+                OVtx = ex.Current().Orientation();
+                break;
+              }
+          }
+          OVtx = TopAbs::Reverse(OVtx);
+          Standard_Real parVtx = BRep_Tool::Parameter(BoutdeVtx,Arcspine);
+          Handle(TopOpeBRepDS_CurvePointInterference) 
+            interfv = ChFi3d_FilVertexInDS(OVtx,IArcspine,IVtx,parVtx);
+          DStr.ChangeShapeInterferences(IArcspine).Append(interfv);
+        }
+      }
       else {
-       if (V1.IsOnArc()) {
-         Iarc1 = DStr.AddShape(V1.Arc()); 
-         if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc1),Iarc1,Ipoin1) ) {
-           Interfp1= ChFi3d_FilPointInDS(V1.TransitionOnArc(),Iarc1,Ipoin1,
-                                         V1.ParameterOnArc(), isVertex1);
-           DStr.ChangeShapeInterferences(V1.Arc()).Append(Interfp1);
-         }
-       }
-
-       if (V2.IsOnArc()) {
-         Iarc2 = DStr.AddShape(V2.Arc());
-         if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc2),Iarc2,Ipoin2) ) {
-           Interfp2= ChFi3d_FilPointInDS(V2.TransitionOnArc(),Iarc2,Ipoin2,
-                                         V2.ParameterOnArc(),isVertex2);
-           DStr.ChangeShapeInterferences(V2.Arc()).Append(Interfp2);
-         }
-       }
+        if (V1.IsOnArc()) {
+          Iarc1 = DStr.AddShape(V1.Arc()); 
+          if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc1),Iarc1,Ipoin1) ) {
+            Interfp1= ChFi3d_FilPointInDS(V1.TransitionOnArc(),Iarc1,Ipoin1,
+              V1.ParameterOnArc(), isVertex1);
+            DStr.ChangeShapeInterferences(V1.Arc()).Append(Interfp1);
+          }
+        }
+
+        if (V2.IsOnArc()) {
+          Iarc2 = DStr.AddShape(V2.Arc());
+          if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc2),Iarc2,Ipoin2) ) {
+            Interfp2= ChFi3d_FilPointInDS(V2.TransitionOnArc(),Iarc2,Ipoin2,
+              V2.ParameterOnArc(),isVertex2);
+            DStr.ChangeShapeInterferences(V2.Arc()).Append(Interfp2);
+          }
+        }
       }
 
       if (!isInDS1) {
-       ET1 = TopAbs::Compose(ET1,CorDat->FirstPCurveOrientation());
-       Icurv = CorDat->FirstCurve();
-       if(Closed && !Singulier_en_Bout) {
-         regcout.SetCurve(Icurv);
-         regcout.SetS1(Isurf,Standard_False);
-       }
-       PCurv = CorDat->FirstPCurve();
-       CorDat->FirstParameters(Pardeb,Parfin);
-       
-       TopOpeBRepDS_ListOfInterference& Li = DStr.ChangeCurveInterferences(Icurv);
-       if (Li.IsEmpty()) {
-         if(CorDat->FirstPCurveOrientation()==TopAbs_REVERSED) {
-           Interfp1=ChFi3d_FilPointInDS
-             (TopAbs_REVERSED,Icurv,Ipoin1,Parfin,isVertex1);
-           Interfp2=ChFi3d_FilPointInDS
-             (TopAbs_FORWARD,Icurv,Ipoin2,Pardeb,isVertex2);
-         }
-         else{
-           Interfp1=ChFi3d_FilPointInDS
-             (TopAbs_FORWARD,Icurv,Ipoin1,Pardeb,isVertex1);
-           Interfp2=ChFi3d_FilPointInDS
-             (TopAbs_REVERSED,Icurv,Ipoin2,Parfin,isVertex2);
-         }
-         Li.Append(Interfp1);
-         Li.Append(Interfp2);
-       }
-       Interfc1= ChFi3d_FilCurveInDS (Icurv,Isurf,PCurv,ET1);
-       DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc1);
+        ET1 = TopAbs::Compose(ET1,CorDat->FirstPCurveOrientation());
+        Icurv = CorDat->FirstCurve();
+        if(Closed && !Singulier_en_Bout) {
+          regcout.SetCurve(Icurv);
+          regcout.SetS1(Isurf,Standard_False);
+        }
+        PCurv = CorDat->FirstPCurve();
+        CorDat->FirstParameters(Pardeb,Parfin);
+
+        TopOpeBRepDS_ListOfInterference& Li = DStr.ChangeCurveInterferences(Icurv);
+        if (Li.IsEmpty()) {
+          if(CorDat->FirstPCurveOrientation()==TopAbs_REVERSED) {
+            Interfp1=ChFi3d_FilPointInDS
+              (TopAbs_REVERSED,Icurv,Ipoin1,Parfin,isVertex1);
+            Interfp2=ChFi3d_FilPointInDS
+              (TopAbs_FORWARD,Icurv,Ipoin2,Pardeb,isVertex2);
+          }
+          else{
+            Interfp1=ChFi3d_FilPointInDS
+              (TopAbs_FORWARD,Icurv,Ipoin1,Pardeb,isVertex1);
+            Interfp2=ChFi3d_FilPointInDS
+              (TopAbs_REVERSED,Icurv,Ipoin2,Parfin,isVertex2);
+          }
+          Li.Append(Interfp1);
+          Li.Append(Interfp2);
+        }
+        Interfc1= ChFi3d_FilCurveInDS (Icurv,Isurf,PCurv,ET1);
+        DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc1);
         if (Ipoin1 == Ipoin2) {
-         TopOpeBRepDS_Curve& TCurv = DStr.ChangeCurve(Icurv);
-         TCurv.ChangeCurve().Nullify();
-         Handle(TopOpeBRepDS_Interference) bidinterf;
-         TCurv.SetSCI(Interfc1,bidinterf);         
-       }
+          TopOpeBRepDS_Curve& TCurv = DStr.ChangeCurve(Icurv);
+          TCurv.ChangeCurve().Nullify();
+          Handle(TopOpeBRepDS_Interference) bidinterf;
+          TCurv.SetSCI(Interfc1,bidinterf);        
+        }
       }
-    } // Fin du Traitement Initial (j==1)
+    } // End of the Initial Processing (j==1)
     else {
-      // ---- Interference entre Conges ------
-      
+      // ---- Interference between Fillets ------
+
       if (!isInDS1) {// eap, Apr 29 2002, occ 293 
-       
+
         if (Degene && isVertex1) {
-          // On elimine l'arete de la spine debouchant sur ce vertex.
-          NumEdge++; // On a dejas trouve l'arete precedente du vertex
+          // The edge is removed from the spine starting on this vertex.
+          NumEdge++; // The previous edge of the vertex has already been found.
           TopoDS_Edge Arcspine = spine->Edges(NumEdge);
           Standard_Integer IArcspine = DStr.AddShape(Arcspine);
           Standard_Integer IVtx = DStr.AddShape(BoutdeVtx);
           TopAbs_Orientation OVtx = TopAbs_FORWARD;
           for(ex.Init(Arcspine.Oriented(TopAbs_FORWARD),TopAbs_VERTEX); 
-              ex.More(); ex.Next()) {
-            if(BoutdeVtx.IsSame(ex.Current())) {
-              OVtx = ex.Current().Orientation();
-              break;
-            }
+            ex.More(); ex.Next()) {
+              if(BoutdeVtx.IsSame(ex.Current())) {
+                OVtx = ex.Current().Orientation();
+                break;
+              }
           }
           OVtx = TopAbs::Reverse(OVtx);
           Standard_Real parVtx = BRep_Tool::Parameter(BoutdeVtx,Arcspine);
           Handle(TopOpeBRepDS_CurvePointInterference) 
             interfv = ChFi3d_FilVertexInDS(OVtx,IArcspine,IVtx,parVtx);
           DStr.ChangeShapeInterferences(IArcspine).Append(interfv);
-        } // Fin de l'elimination
+        } // End of the removal
 
         gp_Pnt2d UV1 = Fd->InterferenceOnS1().PCurveOnSurf()->
           Value(Fd->InterferenceOnS1().FirstParameter());
@@ -2394,7 +2402,7 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
           Value(Fd->InterferenceOnS2().FirstParameter());
         TopOpeBRepDS_Curve& TCurv = DStr.ChangeCurve(Icurv);
         if (Degene) {
-          // on associe la pcurve via la SCI a la TopOpeBRepDSCurve.
+          // pcurve is associated via SCI to TopOpeBRepDSCurve.
           ChFi3d_ComputePCurv(UV1,UV2,PCurv,Pardeb,Parfin);       
           Interfc1= ChFi3d_FilCurveInDS (Icurv,Isurf,PCurv,ET1);
           DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc1);
@@ -2407,242 +2415,242 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
           reglist.Append(regfilfil);
           Standard_Real tolreached;
           ChFi3d_ComputePCurv(TCurv.ChangeCurve(),UV1,UV2,PCurv,
-                              DStr.Surface(Fd->Surf()).Surface(),
-                              Pardeb,Parfin,tol3d,tolreached);
+            DStr.Surface(Fd->Surf()).Surface(),
+            Pardeb,Parfin,tol3d,tolreached);
           TCurv.Tolerance(Max(TCurv.Tolerance(),tolreached));
           Interfc1= ChFi3d_FilCurveInDS (Icurv,Isurf,PCurv,ET1);
           DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc1);
         }
       }
-    } // Fin Interference entre conge
-   
-    // ---- Interference Conges / Faces
+    } // End of Interference between fillet
+
+    // ---- Interference Fillets / Faces
     IcFil1 = Fi1.LineIndex();
-    
+
     if (IcFil1!=0 ) {
       Interfc3= ChFi3d_FilCurveInDS (IcFil1,Isurf,
-                                    Fi1.PCurveOnSurf(),trafil1);
+        Fi1.PCurveOnSurf(),trafil1);
       DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc3);
       Ishape1 = Fd->IndexOfS1();
-      // Cas d arete degeneree : on associe la pcurve via la SCI 
-      // a la TopOpeBRepDSCurve.
+      // Case of degenerated edge : pcurve is associated via SCI 
+      // to TopOpeBRepDSCurve.
       TopOpeBRepDS_Curve& cc = DStr.ChangeCurve(IcFil1);
       if(cc.Curve().IsNull()) {
-       Handle(TopOpeBRepDS_Interference) bidinterf;
-       cc.SetSCI(Interfc3,bidinterf);
+        Handle(TopOpeBRepDS_Interference) bidinterf;
+        cc.SetSCI(Interfc3,bidinterf);
       }
       else{
-       ChFiDS_Regul regon1;
-       regon1.SetCurve(IcFil1);
-       regon1.SetS1(Isurf,Standard_False);
-       if ( Ishape1 < 0 ) {
-         Ishape1 = -Ishape1;
-         regon1.SetS2(Ishape1,Standard_False);
-         Interfc1=ChFi3d_FilCurveInDS(IcFil1,Ishape1,Fi1.PCurveOnFace(),
-                                      Fi1.Transition()); 
-         DStr.ChangeSurfaceInterferences(Ishape1).Append(Interfc1);      
-       }
-       else if ( Ishape1 > 0 ) {
-         regon1.SetS2(Ishape1,Standard_True);
-         Interfc1=ChFi3d_FilCurveInDS(IcFil1,Ishape1,Fi1.PCurveOnFace(),
-                                      Fi1.Transition()); 
-         DStr.ChangeShapeInterferences(Ishape1).Append(Interfc1);      
-       }
-       reglist.Append(regon1);
+        ChFiDS_Regul regon1;
+        regon1.SetCurve(IcFil1);
+        regon1.SetS1(Isurf,Standard_False);
+        if ( Ishape1 < 0 ) {
+          Ishape1 = -Ishape1;
+          regon1.SetS2(Ishape1,Standard_False);
+          Interfc1=ChFi3d_FilCurveInDS(IcFil1,Ishape1,Fi1.PCurveOnFace(),
+            Fi1.Transition()); 
+          DStr.ChangeSurfaceInterferences(Ishape1).Append(Interfc1);      
+        }
+        else if ( Ishape1 > 0 ) {
+          regon1.SetS2(Ishape1,Standard_True);
+          Interfc1=ChFi3d_FilCurveInDS(IcFil1,Ishape1,Fi1.PCurveOnFace(),
+            Fi1.Transition()); 
+          DStr.ChangeShapeInterferences(Ishape1).Append(Interfc1);      
+        }
+        reglist.Append(regon1);
       }
-      // Indice et type du point en Fin
+      // Indice and type of the point at End
       Standard_Integer ipoin;
       Standard_Boolean isVertex = Fd->VertexLastOnS1().IsVertex();
       if (j == SeqFil.Length()) ipoin = CorDat->IndexLastPointOnS1();
       else if ( j == (SeqFil.Length()-1)  &&  /*Closed &&*/
-              (DStr.Curve(SeqFil.Last()->InterferenceOnS1().
-                          LineIndex()).Curve().IsNull())) {
-       if (Closed) {
-         ipoin = CorDat->IndexFirstPointOnS1();
-         isVertex = SeqFil(1)->VertexFirstOnS1().IsVertex();
-       } else {
-         ipoin = CorDat->IndexLastPointOnS1();
-         isVertex = SeqFil.Last()->VertexLastOnS1().IsVertex();
-       }
+        (DStr.Curve(SeqFil.Last()->InterferenceOnS1().
+        LineIndex()).Curve().IsNull())) {
+          if (Closed) {
+            ipoin = CorDat->IndexFirstPointOnS1();
+            isVertex = SeqFil(1)->VertexFirstOnS1().IsVertex();
+          } else {
+            ipoin = CorDat->IndexLastPointOnS1();
+            isVertex = SeqFil.Last()->VertexLastOnS1().IsVertex();
+          }
       }
       else if(DStr.Curve(IcFil1).Curve().IsNull()) {// Rotation !!
-       ipoin = Ipoin1;
-       isVertex = isVertex1;
+        ipoin = Ipoin1;
+        isVertex = isVertex1;
       }
       else if ( ((j==1) || (j== SeqFil.Length()-1)) && 
-               ( (Fd->VertexLastOnS1().Point().IsEqual(
-                 SeqFil(1)->VertexFirstOnS1().Point(), 1.e-7)) ||
-                 (Fd->VertexLastOnS1().Point().IsEqual(
-                 SeqFil(SeqFil.Length())->VertexLastOnS1().Point(), 1.e-7))) )
-       // Cas des SurfData coupe de facon "Triangulaire"   
-       ipoin=CorDat->IndexLastPointOnS1();
+        ( (Fd->VertexLastOnS1().Point().IsEqual(
+        SeqFil(1)->VertexFirstOnS1().Point(), 1.e-7)) ||
+        (Fd->VertexLastOnS1().Point().IsEqual(
+        SeqFil(SeqFil.Length())->VertexLastOnS1().Point(), 1.e-7))) )
+        // Case of SurfData cut in "Triangular" way.   
+        ipoin=CorDat->IndexLastPointOnS1();
 
       // eap, Apr 29 2002, occ 293
       else if (isInDS2 && findIndexPoint(DStr, Fd, 1, ipoin)) {
 
       }
       else ipoin = ChFi3d_IndexPointInDS(Fd->VertexLastOnS1(),DStr);
-      
+
       TopOpeBRepDS_ListOfInterference& Li = DStr.ChangeCurveInterferences(IcFil1);
 
       if (!ChFi3d_Contains(Li,IcFil1,Ipoin1)) { 
-       
-       Interfp1 = ChFi3d_FilPointInDS(TopAbs_FORWARD,IcFil1,Ipoin1,
-                                      Fi1.FirstParameter(),isVertex1);
-       DStr.ChangeCurveInterferences(IcFil1).Append(Interfp1);
+
+        Interfp1 = ChFi3d_FilPointInDS(TopAbs_FORWARD,IcFil1,Ipoin1,
+          Fi1.FirstParameter(),isVertex1);
+        DStr.ChangeCurveInterferences(IcFil1).Append(Interfp1);
       }
       if (ipoin == Ipoin1 || !ChFi3d_Contains(Li,IcFil1,ipoin)) { 
-       Interfp3 = ChFi3d_FilPointInDS(TopAbs_REVERSED,IcFil1,ipoin,
-                                      Fi1.LastParameter(), isVertex);
-       DStr.ChangeCurveInterferences(IcFil1).Append(Interfp3);
+        Interfp3 = ChFi3d_FilPointInDS(TopAbs_REVERSED,IcFil1,ipoin,
+          Fi1.LastParameter(), isVertex);
+        DStr.ChangeCurveInterferences(IcFil1).Append(Interfp3);
       }
       Ipoin1 = ipoin;
       isVertex1 = isVertex;
     }
-    
+
     IcFil2 = Fi2.LineIndex();
     if (IcFil2!=0) {
       Interfc4=ChFi3d_FilCurveInDS(IcFil2,Isurf,
-                                  Fi2.PCurveOnSurf(),trafil2);
+        Fi2.PCurveOnSurf(),trafil2);
       DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc4);
       Ishape2 = Fd->IndexOfS2();
-      // Cas d arete degeneree : on associe la pcurve via la SCI 
-      // a la TopOpeBRepDSCurve.
+      // Case of degenerated edge : pcurve is associated via SCI 
+      // to TopOpeBRepDSCurve.
       TopOpeBRepDS_Curve& cc = DStr.ChangeCurve(IcFil2);
       if(cc.Curve().IsNull()) {
-       Handle(TopOpeBRepDS_Interference) bidinterf;
-       cc.SetSCI(Interfc4,bidinterf);
+        Handle(TopOpeBRepDS_Interference) bidinterf;
+        cc.SetSCI(Interfc4,bidinterf);
       }
       else{
-       ChFiDS_Regul regon2;
-       regon2.SetCurve(IcFil2);
-       regon2.SetS1(Isurf,Standard_False);
-       if ( Ishape2 < 0 ) {
-         Ishape2 = -Ishape2;
-         regon2.SetS2(Ishape2,Standard_False);
-         Interfc2=ChFi3d_FilCurveInDS(IcFil2,Ishape2,Fi2.PCurveOnFace(),
-                                      Fi2.Transition());
-         DStr.ChangeSurfaceInterferences(Ishape2).Append(Interfc2);      
-       }
-       else if ( Ishape2 > 0 ) {
-         regon2.SetS2(Ishape2,Standard_True);
-         Interfc2=ChFi3d_FilCurveInDS(IcFil2,Ishape2,Fi2.PCurveOnFace(),
-                                      Fi2.Transition());
-         DStr.ChangeShapeInterferences(Ishape2).Append(Interfc2);      
-       }
-       reglist.Append(regon2);
+        ChFiDS_Regul regon2;
+        regon2.SetCurve(IcFil2);
+        regon2.SetS1(Isurf,Standard_False);
+        if ( Ishape2 < 0 ) {
+          Ishape2 = -Ishape2;
+          regon2.SetS2(Ishape2,Standard_False);
+          Interfc2=ChFi3d_FilCurveInDS(IcFil2,Ishape2,Fi2.PCurveOnFace(),
+            Fi2.Transition());
+          DStr.ChangeSurfaceInterferences(Ishape2).Append(Interfc2);      
+        }
+        else if ( Ishape2 > 0 ) {
+          regon2.SetS2(Ishape2,Standard_True);
+          Interfc2=ChFi3d_FilCurveInDS(IcFil2,Ishape2,Fi2.PCurveOnFace(),
+            Fi2.Transition());
+          DStr.ChangeShapeInterferences(Ishape2).Append(Interfc2);      
+        }
+        reglist.Append(regon2);
       }
-      // Indice et type du point en Fin
+      // Indice and type of the point in End
       Standard_Integer ipoin;
       Standard_Boolean isVertex = Fd->VertexLastOnS2().IsVertex();
       if (j == SeqFil.Length() ) ipoin = CorDat->IndexLastPointOnS2();
       else if ( j == (SeqFil.Length()-1)  && /*Closed &&*/
-              (DStr.Curve(SeqFil.Last()->InterferenceOnS2().
-                          LineIndex()).Curve().IsNull())) {
-       if (Closed) {
-         ipoin = CorDat->IndexFirstPointOnS2();
-         isVertex = SeqFil(1)->VertexFirstOnS2().IsVertex();
-       } else {
-         ipoin = CorDat->IndexLastPointOnS2();
-         isVertex = SeqFil.Last()->VertexLastOnS2().IsVertex();
-       }
+        (DStr.Curve(SeqFil.Last()->InterferenceOnS2().
+        LineIndex()).Curve().IsNull())) {
+          if (Closed) {
+            ipoin = CorDat->IndexFirstPointOnS2();
+            isVertex = SeqFil(1)->VertexFirstOnS2().IsVertex();
+          } else {
+            ipoin = CorDat->IndexLastPointOnS2();
+            isVertex = SeqFil.Last()->VertexLastOnS2().IsVertex();
+          }
       }
       else if(DStr.Curve(IcFil2).Curve().IsNull()) { // Rotation !!
-       ipoin = Ipoin2;
-       isVertex = isVertex2;
+        ipoin = Ipoin2;
+        isVertex = isVertex2;
       }
       else if(Fd->VertexLastOnS2().Point().IsEqual(
-             Fd->VertexLastOnS1().Point(), 0) ) {  //Pincement !!
-       ipoin = Ipoin1;
-       isVertex = isVertex1;
+        Fd->VertexLastOnS1().Point(), 0) ) {  //Pinch !!
+          ipoin = Ipoin1;
+          isVertex = isVertex1;
       }
       else if ( ((j==1) || (j==SeqFil.Length()-1)) && 
-               ( (Fd->VertexLastOnS2().Point().IsEqual(
-                 SeqFil(1)->VertexFirstOnS2().Point(), 1.e-7)) ||
-                 (Fd->VertexLastOnS2().Point().IsEqual(
-                 SeqFil(SeqFil.Length())->VertexLastOnS2().Point(), 1.e-7))) )
-       // Cas des SurfData coupe de facon "Triangulaire"    
-       ipoin=CorDat->IndexLastPointOnS2();
+        ( (Fd->VertexLastOnS2().Point().IsEqual(
+        SeqFil(1)->VertexFirstOnS2().Point(), 1.e-7)) ||
+        (Fd->VertexLastOnS2().Point().IsEqual(
+        SeqFil(SeqFil.Length())->VertexLastOnS2().Point(), 1.e-7))) )
+        // Case of SurfData cut in "Triangular" way.   
+        ipoin=CorDat->IndexLastPointOnS2();
 
       // eap, Apr 29 2002, occ 293
       else if (isInDS2 && findIndexPoint(DStr, Fd, 2, ipoin)) {
 
       }
       else ipoin = ChFi3d_IndexPointInDS(Fd->VertexLastOnS2(),DStr);
-      
+
       TopOpeBRepDS_ListOfInterference& Li = DStr.ChangeCurveInterferences(IcFil2);
 
       if (!ChFi3d_Contains(Li,IcFil2,Ipoin2)) { 
-       Interfp2 = ChFi3d_FilPointInDS(TopAbs_FORWARD,IcFil2,Ipoin2,
-                                      Fi2.FirstParameter(), isVertex2);
-       DStr.ChangeCurveInterferences(IcFil2).Append(Interfp2);
+        Interfp2 = ChFi3d_FilPointInDS(TopAbs_FORWARD,IcFil2,Ipoin2,
+          Fi2.FirstParameter(), isVertex2);
+        DStr.ChangeCurveInterferences(IcFil2).Append(Interfp2);
       }
       if (ipoin == Ipoin2 || !ChFi3d_Contains(Li,IcFil2,ipoin)) { 
-       Interfp4= ChFi3d_FilPointInDS(TopAbs_REVERSED,IcFil2,ipoin,
-                                     Fi2.LastParameter(), isVertex );
-       DStr.ChangeCurveInterferences(IcFil2).Append(Interfp4);
+        Interfp4= ChFi3d_FilPointInDS(TopAbs_REVERSED,IcFil2,ipoin,
+          Fi2.LastParameter(), isVertex );
+        DStr.ChangeCurveInterferences(IcFil2).Append(Interfp4);
       }
       Ipoin2 = ipoin;
       isVertex2 = isVertex;      
     }
-    
+
     ET1 = trafil1;
     if (j == SeqFil.Length()) {
       if (!isInDS2) {
-       Icurv = CorDat->LastCurve();
-       if(Closed && !Singulier_en_Bout && (Ipoin1!=Ipoin2)) {
-         regcout.SetS2(Isurf,Standard_False);
-         reglist.Append(regcout);
-       }
-       PCurv = CorDat->LastPCurve();
-       ET1 = TopAbs::Compose(ET1,CorDat->LastPCurveOrientation());
-       CorDat->LastParameters(Pardeb,Parfin);
-       TopOpeBRepDS_ListOfInterference& Li = DStr.ChangeCurveInterferences(Icurv);
-       if (Li.IsEmpty()) {
-         if(CorDat->LastPCurveOrientation()==TopAbs_REVERSED) {
-           Interfp5=ChFi3d_FilPointInDS
-             (TopAbs_REVERSED,Icurv,Ipoin1,Parfin, isVertex1);
-           Interfp6=ChFi3d_FilPointInDS
-             (TopAbs_FORWARD,Icurv,Ipoin2,Pardeb, isVertex2);
-         }
-         else{
-           Interfp5=ChFi3d_FilPointInDS
-             (TopAbs_FORWARD,Icurv,Ipoin1,Pardeb, isVertex1);
-           Interfp6=ChFi3d_FilPointInDS
-             (TopAbs_REVERSED,Icurv,Ipoin2,Parfin, isVertex2);
-         }
-         Li.Append(Interfp5);
-         Li.Append(Interfp6);
-       }
-       Interfc1= ChFi3d_FilCurveInDS(Icurv,Isurf,PCurv,ET1);
-       DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc1);
+        Icurv = CorDat->LastCurve();
+        if(Closed && !Singulier_en_Bout && (Ipoin1!=Ipoin2)) {
+          regcout.SetS2(Isurf,Standard_False);
+          reglist.Append(regcout);
+        }
+        PCurv = CorDat->LastPCurve();
+        ET1 = TopAbs::Compose(ET1,CorDat->LastPCurveOrientation());
+        CorDat->LastParameters(Pardeb,Parfin);
+        TopOpeBRepDS_ListOfInterference& Li = DStr.ChangeCurveInterferences(Icurv);
+        if (Li.IsEmpty()) {
+          if(CorDat->LastPCurveOrientation()==TopAbs_REVERSED) {
+            Interfp5=ChFi3d_FilPointInDS
+              (TopAbs_REVERSED,Icurv,Ipoin1,Parfin, isVertex1);
+            Interfp6=ChFi3d_FilPointInDS
+              (TopAbs_FORWARD,Icurv,Ipoin2,Pardeb, isVertex2);
+          }
+          else{
+            Interfp5=ChFi3d_FilPointInDS
+              (TopAbs_FORWARD,Icurv,Ipoin1,Pardeb, isVertex1);
+            Interfp6=ChFi3d_FilPointInDS
+              (TopAbs_REVERSED,Icurv,Ipoin2,Parfin, isVertex2);
+          }
+          Li.Append(Interfp5);
+          Li.Append(Interfp6);
+        }
+        Interfc1= ChFi3d_FilCurveInDS(Icurv,Isurf,PCurv,ET1);
+        DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc1);
         if (Ipoin1 == Ipoin2) {
-         TopOpeBRepDS_Curve& TCurv = DStr.ChangeCurve(Icurv);
-         TCurv.ChangeCurve().Nullify();
-         Handle(TopOpeBRepDS_Interference) bidinterf;
-         TCurv.SetSCI( Interfc1, bidinterf);
-//         bidinterf = TCurv.GetSCI1(); 
-//       TCurv.SetSCI(bidinterf, Interfc1);        
-       }
+          TopOpeBRepDS_Curve& TCurv = DStr.ChangeCurve(Icurv);
+          TCurv.ChangeCurve().Nullify();
+          Handle(TopOpeBRepDS_Interference) bidinterf;
+          TCurv.SetSCI( Interfc1, bidinterf);
+          //         bidinterf = TCurv.GetSCI1(); 
+          //     TCurv.SetSCI(bidinterf, Interfc1);        
+        }
       }
     }
     else {
-//      Degene = (Fd->VertexLastOnS1().Point().IsEqual(
-//                Fd->VertexLastOnS2().Point(), 0) );
-      
+      //      Degene = (Fd->VertexLastOnS1().Point().IsEqual(
+      //                Fd->VertexLastOnS2().Point(), 0) );
+
       // eap, Apr 29 2002, occ 293 
       if (!isInDS2) {
-       
+
         Handle(Geom_Curve) C3d;
         Standard_Real tolreached;
         ChFi3d_ComputeArete(Fd->VertexLastOnS1(),
-                            Fd->InterferenceOnS1().PCurveOnSurf()->
-                            Value(Fd->InterferenceOnS1().LastParameter()),
-                            Fd->VertexLastOnS2(),
-                            Fd->InterferenceOnS2().PCurveOnSurf()->
-                            Value(Fd->InterferenceOnS2().LastParameter()),
-                            DStr.Surface(Fd->Surf()).Surface(),C3d,PCurv,
-                            Pardeb,Parfin,tol3d,tol2d,tolreached,0);
+          Fd->InterferenceOnS1().PCurveOnSurf()->
+          Value(Fd->InterferenceOnS1().LastParameter()),
+          Fd->VertexLastOnS2(),
+          Fd->InterferenceOnS2().PCurveOnSurf()->
+          Value(Fd->InterferenceOnS2().LastParameter()),
+          DStr.Surface(Fd->Surf()).Surface(),C3d,PCurv,
+          Pardeb,Parfin,tol3d,tol2d,tolreached,0);
         Crv = TopOpeBRepDS_Curve(C3d,tolreached);
         Icurv = DStr.AddCurve(Crv);
         regfilfil.SetCurve(Icurv);
@@ -2655,10 +2663,10 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
         DStr.ChangeSurfaceInterferences(Isurf).Append(Interfc1);      
       }
     }
-   
+
     Degene = V3.Point().IsEqual(V4.Point(), 0);
 
-    // Traitement des cas degenere     
+    // Processing of degenerated case     
     if (Degene) {
       // Queue de Billard
       Standard_Boolean Vertex = (V3.IsVertex()) && (V4.IsVertex());
@@ -2666,62 +2674,62 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
 
       }
       else {
-       // On elimine l'arete de la spine debouchant sur ce vertex.
-       Standard_Boolean Trouve = Standard_False;
-       TopoDS_Edge Arcspine;
-       TopAbs_Orientation OVtx = TopAbs_FORWARD;
-       BoutdeVtx = V3.Vertex();
-           
-       while (NumEdge<= spine->NbEdges() && !Trouve) { 
-         Arcspine = spine->Edges(NumEdge);
-         for(ex.Init(Arcspine.Oriented(TopAbs_FORWARD),TopAbs_VERTEX); 
-             ex.More() && (!Trouve); ex.Next()) {
-           if(BoutdeVtx.IsSame(ex.Current())) {
-             OVtx = ex.Current().Orientation();
-             if (Closed &&  (NumEdge == 1)) 
-                  Trouve = (spine->NbEdges() == 1);
-              else Trouve = Standard_True;
-           }
-         }
-         if (!Trouve) NumEdge++; // On passe a l'arete suivante
-       }
-       Standard_Integer IArcspine = DStr.AddShape(Arcspine);
-       Standard_Integer IVtx;
-       if  (j == SeqFil.Length()) {
-         IVtx = CorDat->IndexLastPointOnS1();
-       }
-       else { IVtx = DStr.AddShape(BoutdeVtx); }
-       OVtx = TopAbs::Reverse(OVtx);
-       Standard_Real parVtx = BRep_Tool::Parameter(BoutdeVtx,Arcspine);
-       Handle(TopOpeBRepDS_CurvePointInterference) 
-         interfv = ChFi3d_FilVertexInDS(OVtx,IArcspine,IVtx,parVtx);
-       DStr.ChangeShapeInterferences(IArcspine).Append(interfv);
+        // The edge of the spine starting on this vertex is removed.
+        Standard_Boolean Trouve = Standard_False;
+        TopoDS_Edge Arcspine;
+        TopAbs_Orientation OVtx = TopAbs_FORWARD;
+        BoutdeVtx = V3.Vertex();
+
+        while (NumEdge<= spine->NbEdges() && !Trouve) { 
+          Arcspine = spine->Edges(NumEdge);
+          for(ex.Init(Arcspine.Oriented(TopAbs_FORWARD),TopAbs_VERTEX); 
+            ex.More() && (!Trouve); ex.Next()) {
+              if(BoutdeVtx.IsSame(ex.Current())) {
+                OVtx = ex.Current().Orientation();
+                if (Closed &&  (NumEdge == 1)) 
+                  Trouve = (spine->NbEdges() == 1);
+                else Trouve = Standard_True;
+              }
+          }
+          if (!Trouve) NumEdge++; // Go to the next edge
+        }
+        Standard_Integer IArcspine = DStr.AddShape(Arcspine);
+        Standard_Integer IVtx;
+        if  (j == SeqFil.Length()) {
+          IVtx = CorDat->IndexLastPointOnS1();
+        }
+        else { IVtx = DStr.AddShape(BoutdeVtx); }
+        OVtx = TopAbs::Reverse(OVtx);
+        Standard_Real parVtx = BRep_Tool::Parameter(BoutdeVtx,Arcspine);
+        Handle(TopOpeBRepDS_CurvePointInterference) 
+          interfv = ChFi3d_FilVertexInDS(OVtx,IArcspine,IVtx,parVtx);
+        DStr.ChangeShapeInterferences(IArcspine).Append(interfv);
       }
-    } // fin du cas Degene
+    } // end of degenerated case
     else if (!(Closed && j == SeqFil.Length())) {
-      // Traitement des interference Point / Edges
+      // Processing of interference Point / Edges
       if (V3.IsOnArc()) {
-       if(!(V3.IsVertex() && Fd->IsOnCurve1())) {
-         Iarc1 = DStr.AddShape(V3.Arc());
-         if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc1),Iarc1,Ipoin1,V3.IsVertex(),Standard_True) ) {
-           Handle(TopOpeBRepDS_CurvePointInterference) Interfpp = 
-             ChFi3d_FilPointInDS(V3.TransitionOnArc(),
-                                 Iarc1,Ipoin1,V3.ParameterOnArc(), V3.IsVertex());
-           DStr.ChangeShapeInterferences(V3.Arc()).Append(Interfpp);
-         }
-       }
+        if(!(V3.IsVertex() && Fd->IsOnCurve1())) {
+          Iarc1 = DStr.AddShape(V3.Arc());
+          if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc1),Iarc1,Ipoin1,V3.IsVertex(),Standard_True) ) {
+            Handle(TopOpeBRepDS_CurvePointInterference) Interfpp = 
+              ChFi3d_FilPointInDS(V3.TransitionOnArc(),
+              Iarc1,Ipoin1,V3.ParameterOnArc(), V3.IsVertex());
+            DStr.ChangeShapeInterferences(V3.Arc()).Append(Interfpp);
+          }
+        }
       }
 
       if (V4.IsOnArc()) {
-       if(!(V4.IsVertex() && Fd->IsOnCurve2())) {
-         Iarc2 = DStr.AddShape(V4.Arc());
-         if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc2),Iarc2,Ipoin2,V4.IsVertex(),Standard_True) ) {
-           Handle(TopOpeBRepDS_CurvePointInterference) Intfpp=
-             ChFi3d_FilPointInDS(V4.TransitionOnArc(),
-                                 Iarc2,Ipoin2,V4.ParameterOnArc(), V4.IsVertex());
-           DStr.ChangeShapeInterferences(V4.Arc()).Append(Intfpp);
-         }
-       }
+        if(!(V4.IsVertex() && Fd->IsOnCurve2())) {
+          Iarc2 = DStr.AddShape(V4.Arc());
+          if ( !ChFi3d_Contains(DStr.ShapeInterferences(Iarc2),Iarc2,Ipoin2,V4.IsVertex(),Standard_True) ) {
+            Handle(TopOpeBRepDS_CurvePointInterference) Intfpp=
+              ChFi3d_FilPointInDS(V4.TransitionOnArc(),
+              Iarc2,Ipoin2,V4.ParameterOnArc(), V4.IsVertex());
+            DStr.ChangeShapeInterferences(V4.Arc()).Append(Intfpp);
+          }
+        }
       }
     }
   }
@@ -2736,18 +2744,18 @@ void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
 //author   : akm, 06/02/02. Against bug OCC119.
 //=======================================================================
 void ChFi3d_StripeEdgeInter (const Handle(ChFiDS_Stripe)& theStripe1,
-                            const Handle(ChFiDS_Stripe)& theStripe2,
-                            TopOpeBRepDS_DataStructure&  /*DStr*/,
-                            const Standard_Real          tol2d)
+  const Handle(ChFiDS_Stripe)& theStripe2,
+  TopOpeBRepDS_DataStructure&  /*DStr*/,
+  const Standard_Real          tol2d)
 {
   // Do not check the stripeshaving common corner points
   for (Standard_Integer iSur1=1; iSur1<=2; iSur1++)
     for (Standard_Integer iSur2=1; iSur2<=2; iSur2++)
       if (theStripe1->IndexPoint(0,iSur1)==theStripe2->IndexPoint(0,iSur2) ||
-         theStripe1->IndexPoint(0,iSur1)==theStripe2->IndexPoint(1,iSur2) ||
-         theStripe1->IndexPoint(1,iSur1)==theStripe2->IndexPoint(0,iSur2) ||
-         theStripe1->IndexPoint(1,iSur1)==theStripe2->IndexPoint(1,iSur2))
-       return;
+        theStripe1->IndexPoint(0,iSur1)==theStripe2->IndexPoint(1,iSur2) ||
+        theStripe1->IndexPoint(1,iSur1)==theStripe2->IndexPoint(0,iSur2) ||
+        theStripe1->IndexPoint(1,iSur1)==theStripe2->IndexPoint(1,iSur2))
+        return;
 
   Handle(ChFiDS_HData) aSurDat1 = theStripe1->SetOfSurfData();
   Handle(ChFiDS_HData) aSurDat2 = theStripe2->SetOfSurfData();
@@ -2772,50 +2780,50 @@ void ChFi3d_StripeEdgeInter (const Handle(ChFiDS_Stripe)& theStripe1,
       ChFiDS_FaceInterference aFI1, aFI2;
       if (Ishape11 == Ishape21)
       {
-       aFI1 = aDat1->InterferenceOnS1();
-       aFI2 = aDat2->InterferenceOnS1();
+        aFI1 = aDat1->InterferenceOnS1();
+        aFI2 = aDat2->InterferenceOnS1();
       } 
       else if (Ishape11 == Ishape22)
       {
-       aFI1 = aDat1->InterferenceOnS1();
-       aFI2 = aDat2->InterferenceOnS2();
+        aFI1 = aDat1->InterferenceOnS1();
+        aFI2 = aDat2->InterferenceOnS2();
       } 
       else if (Ishape12 == Ishape21)
       {
-       aFI1 = aDat1->InterferenceOnS2();
-       aFI2 = aDat2->InterferenceOnS1();
+        aFI1 = aDat1->InterferenceOnS2();
+        aFI2 = aDat2->InterferenceOnS1();
       } 
       else if (Ishape12 == Ishape22)
       {
-       aFI1 = aDat1->InterferenceOnS2();
-       aFI2 = aDat2->InterferenceOnS2();
+        aFI1 = aDat1->InterferenceOnS2();
+        aFI2 = aDat2->InterferenceOnS2();
       }
       else
       {
-       // No common faces
-       continue;
+        // No common faces
+        continue;
       }
 
       if (IsEqual (aFI1.FirstParameter(),aFI1.LastParameter()) ||
-         IsEqual (aFI2.FirstParameter(),aFI2.LastParameter()) ||
-         aFI1.PCurveOnFace().IsNull() ||
-         aFI2.PCurveOnFace().IsNull())
-       // Do not waste time on degenerates
-       continue;
+        IsEqual (aFI2.FirstParameter(),aFI2.LastParameter()) ||
+        aFI1.PCurveOnFace().IsNull() ||
+        aFI2.PCurveOnFace().IsNull())
+        // Do not waste time on degenerates
+        continue;
       // Examine for intersections
       Geom2dAdaptor_Curve aPCurve1 (aFI1.PCurveOnFace(),
-                                   aFI1.FirstParameter(),
-                                   aFI1.LastParameter());
+        aFI1.FirstParameter(),
+        aFI1.LastParameter());
       Geom2dAdaptor_Curve aPCurve2 (aFI2.PCurveOnFace(),
-                                   aFI2.FirstParameter(),
-                                   aFI2.LastParameter());
+        aFI2.FirstParameter(),
+        aFI2.LastParameter());
       anIntersector.Perform (aPCurve1,
-                            aPCurve2,
-                            tol2d,
-                            Precision::PConfusion());
+        aPCurve2,
+        tol2d,
+        Precision::PConfusion());
       if (anIntersector.NbSegments() > 0 ||
-         anIntersector.NbPoints() > 0)
-       StdFail_NotDone::Raise ("StripeEdgeInter : fillets have too big radiuses");
+        anIntersector.NbPoints() > 0)
+        StdFail_NotDone::Raise ("StripeEdgeInter : fillets have too big radiuses");
     }
   }
 }
@@ -2825,8 +2833,8 @@ void ChFi3d_StripeEdgeInter (const Handle(ChFiDS_Stripe)& theStripe1,
 //purpose  : 
 //=======================================================================
 Standard_Integer ChFi3d_IndexOfSurfData(const TopoDS_Vertex& V1,
-                                       const Handle(ChFiDS_Stripe)& CD,
-                                       Standard_Integer& sens)
+  const Handle(ChFiDS_Stripe)& CD,
+  Standard_Integer& sens)
 {
   Handle(ChFiDS_Spine) spine = CD->Spine();
   Standard_Integer Index = 0;
@@ -2853,8 +2861,8 @@ Standard_Integer ChFi3d_IndexOfSurfData(const TopoDS_Vertex& V1,
 //=======================================================================
 
 TopoDS_Edge ChFi3d_EdgeFromV1(const TopoDS_Vertex& V1,
-                             const Handle(ChFiDS_Stripe)& CD,
-                             Standard_Integer& sens)
+  const Handle(ChFiDS_Stripe)& CD,
+  Standard_Integer& sens)
 {
   Handle(ChFiDS_Spine) spine = CD->Spine();
   sens = 1;
@@ -2864,14 +2872,14 @@ TopoDS_Edge ChFi3d_EdgeFromV1(const TopoDS_Vertex& V1,
   else Vref = TopExp::FirstVertex(E); 
   if (Vref.IsSame(V1)) return E;
   else
-    {
-      const TopoDS_Edge& E1 = spine->Edges(spine->NbEdges());
-      if (E1.Orientation() == TopAbs_REVERSED) Vref = TopExp::FirstVertex(E1);
-      else Vref = TopExp::LastVertex(E1); 
-      sens = -1;
-      if (Vref.IsSame(V1)) return E1;
-      else Standard_ConstructionError::Raise("");
-    }
+  {
+    const TopoDS_Edge& E1 = spine->Edges(spine->NbEdges());
+    if (E1.Orientation() == TopAbs_REVERSED) Vref = TopExp::FirstVertex(E1);
+    else Vref = TopExp::LastVertex(E1); 
+    sens = -1;
+    if (Vref.IsSame(V1)) return E1;
+    else Standard_ConstructionError::Raise("");
+  }
   return E;
 }
 //=======================================================================
@@ -2880,7 +2888,7 @@ TopoDS_Edge ChFi3d_EdgeFromV1(const TopoDS_Vertex& V1,
 //=======================================================================
 
 Standard_Real ChFi3d_ConvTol2dToTol3d(const Handle(Adaptor3d_HSurface)& S,
-                                     const Standard_Real             tol2d)
+  const Standard_Real             tol2d)
 {
   Standard_Real ures = S->UResolution(1.e-7);
   Standard_Real vres = S->VResolution(1.e-7);
@@ -2890,15 +2898,15 @@ Standard_Real ChFi3d_ConvTol2dToTol3d(const Handle(Adaptor3d_HSurface)& S,
 }
 //=======================================================================
 //function : EvalTolReached
-//purpose  : Comme son nom l indique la fonction ci dessus etant trop
-//           dure lorsque le parametrage des surfaces n est pas homogene.
+//purpose  : The function above is too hard because 
+//           parametrization of surfaces is not homogenous.
 //=======================================================================
 
 Standard_Real ChFi3d_EvalTolReached(const Handle(Adaptor3d_HSurface)& S1,
-                                   const Handle(Geom2d_Curve)&     pc1,
-                                   const Handle(Adaptor3d_HSurface)& S2,
-                                   const Handle(Geom2d_Curve)&     pc2,
-                                   const Handle(Geom_Curve)&       C)
+  const Handle(Geom2d_Curve)&     pc1,
+  const Handle(Adaptor3d_HSurface)& S2,
+  const Handle(Geom2d_Curve)&     pc2,
+  const Handle(Geom_Curve)&       C)
 {
   Standard_Real distmax = 0.;
 
@@ -2932,7 +2940,7 @@ Standard_Real ChFi3d_EvalTolReached(const Handle(Adaptor3d_HSurface)& S1,
 //purpose  : 
 //=======================================================================
 Handle(Geom_Surface) trsfsurf(const Handle(Adaptor3d_HSurface)& HS,
-                             Handle(Adaptor3d_TopolTool)&      /*dom*/)
+  Handle(Adaptor3d_TopolTool)&      /*dom*/)
 {
   //Pour l utilisation des domaines voir avec BUBUCH!!
   Handle(Geom_Surface) res;
@@ -2953,7 +2961,7 @@ Handle(Geom_Surface) trsfsurf(const Handle(Adaptor3d_HSurface)& HS,
   Standard_Real U1 = HS->FirstUParameter(), U2 = HS->LastUParameter();
   Standard_Real V1 = HS->FirstVParameter(), V2 = HS->LastVParameter();
   if(!res.IsNull()) {
-  // Blindage contre les Construction Error intempestifs
+    // Protection against Construction Errors
     Standard_Real u1, u2, v1, v2;
     res->Bounds( u1, u2, v1, v2);
     if (!res->IsUPeriodic()) {
@@ -2966,26 +2974,26 @@ Handle(Geom_Surface) trsfsurf(const Handle(Adaptor3d_HSurface)& HS,
     }
     res = new Geom_RectangularTrimmedSurface(res,U1,U2,V1,V2);
   }
-//  Handle(GeomAdaptor_HSurface) temp = new GeomAdaptor_HSurface(res,U1,U2,V1,V2);
-//  dom = new Adaptor3d_TopolTool(temp);
+  //  Handle(GeomAdaptor_HSurface) temp = new GeomAdaptor_HSurface(res,U1,U2,V1,V2);
+  //  dom = new Adaptor3d_TopolTool(temp);
   return res;
 }
 //=======================================================================
 //function : CurveCleaner
-//purpose  : Rend une BSpline le plus continue possible
-//           a une tolerance donne
+//purpose  : Makes a BSpline as much continued as possible
+//           at a given tolerance
 //=======================================================================
 static void CurveCleaner(Handle(Geom_BSplineCurve)& BS, 
-                        const Standard_Real Tol,
-                        const Standard_Integer MultMin)
+  const Standard_Real Tol,
+  const Standard_Integer MultMin)
 
 {
   Standard_Real tol = Tol;
   Standard_Integer Mult, ii;
   const Standard_Integer NbK=BS->NbKnots();
-  
+
   for (Mult = BS->Degree(); Mult > MultMin; Mult--) {
-    tol *= 0.5; // Reduction progressive
+    tol *= 0.5; // Progressive reduction
     for (ii=NbK; ii>1; ii--) {
       if (BS->Multiplicity(ii) == Mult)
         BS->RemoveKnot(ii, Mult-1, tol);
@@ -2994,26 +3002,26 @@ static void CurveCleaner(Handle(Geom_BSplineCurve)& BS,
 }
 //=======================================================================
 //function : ComputeCurves
-//purpose  : Calcule une intersection bornee entre deux HSurfaces.
-//           Il faut connaitre les extremites de l intersection et 
-//           les surfaces doivent avoir ete retouchees en entree 
-//           pour encadrer au mieux (ni trop pres ni trop loin) les
-//           points de debut et fin de l intersection.
-//           Les intersections analytiques sont traitees a part.
-//           <wholeCurv> means that resulting curve is restricted by
+//purpose  : Calculates intersection between two HSurfaces.
+//           It is necessary to know the extremities of intersection and  
+//           the surfaces should be processed at input 
+//           to fit as good as possible (neither too close nor too far) 
+//           the points of beginning and end of the intersection.
+//           The analytic intersections are processed separately.
+//           <wholeCurv> means that the resulting curve is restricted by
 //           boundaries of input surfaces (eap 30 May occ354)
 //=======================================================================
 Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
-                                     Handle(Adaptor3d_HSurface)&   S2,
-                                     const TColStd_Array1OfReal& Pardeb,
-                                     const TColStd_Array1OfReal& Parfin,
-                                     Handle(Geom_Curve)&         C3d,
-                                     Handle(Geom2d_Curve)&       Pc1,
-                                     Handle(Geom2d_Curve)&       Pc2,
-                                     const Standard_Real         tol3d,
-                                     const Standard_Real         tol2d,
-                                     Standard_Real&              tolreached,
-                                     const Standard_Boolean      wholeCurv) 
+  Handle(Adaptor3d_HSurface)&   S2,
+  const TColStd_Array1OfReal& Pardeb,
+  const TColStd_Array1OfReal& Parfin,
+  Handle(Geom_Curve)&         C3d,
+  Handle(Geom2d_Curve)&       Pc1,
+  Handle(Geom2d_Curve)&       Pc2,
+  const Standard_Real         tol3d,
+  const Standard_Real         tol2d,
+  Standard_Real&              tolreached,
+  const Standard_Boolean      wholeCurv) 
 {
   Standard_Real Step = 0.1;
 
@@ -3022,8 +3030,8 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
   gp_Pnt pdeb2 = S2->Value(Pardeb(3),Pardeb(4));
   gp_Pnt pfin2 = S2->Value(Parfin(3),Parfin(4));
 
-  Standard_Real distrefdeb = pdeb1.Distance(pdeb2);//mesure la solidite
-  Standard_Real distreffin = pfin1.Distance(pfin2);//des donnees d entree
+  Standard_Real distrefdeb = pdeb1.Distance(pdeb2);//checks the worthiness 
+  Standard_Real distreffin = pfin1.Distance(pfin2);//of input data
   if(distrefdeb < tol3d) distrefdeb = tol3d;
   if(distreffin < tol3d) distreffin = tol3d;
 
@@ -3035,103 +3043,113 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
   if(distref < distrefdeb) distref = distrefdeb;
   if(distref < distreffin) distref = distreffin;
 
-  //On traite a part quelques cas analytiques.
-  //Pour reorienter eventuellement le resultat de l intersection
-  //analytique, on postule que la tangente en debut doit etre dans
-  //le sens de la corde deb/fin.
+  //Some analytic cases are processed separately.
+  //To reorientate the result of the analythic intersection,
+  //it is stated that the beginning of the tangent should be
+  //in the direction of the start/end line.
   gp_Vec Vint, Vref(pdeb,pfin);
   gp_Pnt Pbid;
-  Standard_Real Udeb,Ufin;
+  Standard_Real Udeb = 0.,Ufin = 0.;
   Standard_Real tolr1,tolr2;
   tolr1 = tolr2 = tolreached = tol3d;
   if((S1->GetType() == GeomAbs_Cylinder && S2->GetType() == GeomAbs_Plane)||
-     (S1->GetType() == GeomAbs_Plane && S2->GetType() == GeomAbs_Cylinder)) { 
-    gp_Pln pl;
-    gp_Cylinder cyl;
-    if(S1->GetType() == GeomAbs_Plane) {
-      pl = S1->Plane();
-      cyl = S2->Cylinder();
-    }
-    else{
-      pl = S2->Plane();
-      cyl = S1->Cylinder();
-    }
-    IntAna_QuadQuadGeo ImpKK(pl,cyl,Precision::Angular(),tol3d);
-    if (ImpKK.IsDone()) {
-      Standard_Boolean c1line = 0;
-      switch  (ImpKK.TypeInter()) {
-      case IntAna_Line:
-       {
-         c1line = 1;
-         Standard_Integer nbsol = ImpKK.NbSolutions();
-         gp_Lin C1;
-         for(Standard_Integer ilin = 1; ilin <= nbsol; ilin++) {
-           C1 = ImpKK.Line(ilin);
-           Udeb = ElCLib::Parameter(C1,pdeb);
-           gp_Pnt ptest = ElCLib::Value(Udeb,C1);
-           if(ptest.Distance(pdeb) < tol3d) break;
-         }
-         Ufin = ElCLib::Parameter(C1,pfin);
-         C3d = new Geom_Line(C1);
-         ElCLib::D1(Udeb,C1,Pbid,Vint);
-       }
-       break;
-      case IntAna_Circle:
-       {
-         gp_Circ C1 = ImpKK.Circle(1);
-         C3d = new Geom_Circle(C1);
-         Udeb = ElCLib::Parameter(C1,pdeb);
-         Ufin = ElCLib::Parameter(C1,pfin);
-         ElCLib::D1(Udeb,C1,Pbid,Vint);
-       }
-       break;
-      case IntAna_Ellipse:
-       {
-         gp_Elips C1 = ImpKK.Ellipse(1);
-         C3d = new Geom_Ellipse(C1);
-         Udeb = ElCLib::Parameter(C1,pdeb);
-         Ufin = ElCLib::Parameter(C1,pfin);
-         ElCLib::D1(Udeb,C1,Pbid,Vint);
-       }
-       break;
-      default:
-       break;
+    (S1->GetType() == GeomAbs_Plane && S2->GetType() == GeomAbs_Cylinder)) { 
+      gp_Pln pl;
+      gp_Cylinder cyl;
+      if(S1->GetType() == GeomAbs_Plane) {
+        pl = S1->Plane();
+        cyl = S2->Cylinder();
       }
-      if (Vint.Dot(Vref)<0) {
-       C3d->Reverse();
-       if(c1line) {
-         Udeb = -Udeb;
-         Ufin = -Ufin;
-       }
-       else{
-         Udeb = 2*PI - Udeb;
-         Ufin = 2*PI - Ufin;
-       }
+      else{
+        pl = S2->Plane();
+        cyl = S1->Cylinder();
       }
-      if(!c1line) ElCLib::AdjustPeriodic(0.,2*PI,Precision::Angular(),Udeb,Ufin);
-      Handle(GeomAdaptor_HCurve) HC = new GeomAdaptor_HCurve();
-      HC->ChangeCurve().Load(C3d,Udeb,Ufin);
-      ChFi3d_ProjectPCurv(HC,S1,Pc1,tol3d,tolr1);
-      if(S1->GetType() == GeomAbs_Cylinder) {
-       Standard_Real x,y;
-       Pc1->Value(Udeb).Coord(x,y);
-       x = Pardeb(1) - x;
-       y = Pardeb(2) - y;
-       if(Abs(x) >= tol2d || Abs(y) >= tol2d) Pc1->Translate(gp_Vec2d(x,y));
+      IntAna_QuadQuadGeo ImpKK(pl,cyl,Precision::Angular(),tol3d);
+      Standard_Boolean isIntDone = ImpKK.IsDone();
+
+      if(ImpKK.TypeInter() == IntAna_Ellipse)
+      {
+        const gp_Elips anEl = ImpKK.Ellipse(1);
+        const Standard_Real aMajorR = anEl.MajorRadius();
+        const Standard_Real aMinorR = anEl.MinorRadius();
+        isIntDone = (aMajorR < 100000.0 * aMinorR);
       }
-      ChFi3d_ProjectPCurv(HC,S2,Pc2,tol3d,tolr2);
-      if(S2->GetType() == GeomAbs_Cylinder) {
-       Standard_Real x,y;
-       Pc2->Value(Udeb).Coord(x,y);
-       x = Pardeb(3) - x;
-       y = Pardeb(4) - y;
-       if(Abs(x) >= tol2d || Abs(y) >= tol2d) Pc2->Translate(gp_Vec2d(x,y));
+
+      if (isIntDone) {
+        Standard_Boolean c1line = 0;
+        switch  (ImpKK.TypeInter()) {
+        case IntAna_Line:
+          {
+            c1line = 1;
+            Standard_Integer nbsol = ImpKK.NbSolutions();
+            gp_Lin C1;
+            for(Standard_Integer ilin = 1; ilin <= nbsol; ilin++) {
+              C1 = ImpKK.Line(ilin);
+              Udeb = ElCLib::Parameter(C1,pdeb);
+              gp_Pnt ptest = ElCLib::Value(Udeb,C1);
+              if(ptest.Distance(pdeb) < tol3d) break;
+            }
+            Ufin = ElCLib::Parameter(C1,pfin);
+            C3d = new Geom_Line(C1);
+            ElCLib::D1(Udeb,C1,Pbid,Vint);
+          }
+          break;
+        case IntAna_Circle:
+          {
+            gp_Circ C1 = ImpKK.Circle(1);
+            C3d = new Geom_Circle(C1);
+            Udeb = ElCLib::Parameter(C1,pdeb);
+            Ufin = ElCLib::Parameter(C1,pfin);
+            ElCLib::D1(Udeb,C1,Pbid,Vint);
+          }
+          break;
+        case IntAna_Ellipse:
+          {
+            gp_Elips C1 = ImpKK.Ellipse(1);
+            C3d = new Geom_Ellipse(C1);
+            Udeb = ElCLib::Parameter(C1,pdeb);
+            Ufin = ElCLib::Parameter(C1,pfin);
+            ElCLib::D1(Udeb,C1,Pbid,Vint);
+          }
+          break;
+        default:
+          break;
+        }
+        if (Vint.Dot(Vref)<0) {
+          C3d->Reverse();
+          if(c1line) {
+            Udeb = -Udeb;
+            Ufin = -Ufin;
+          }
+          else{
+            Udeb = 2*M_PI - Udeb;
+            Ufin = 2*M_PI - Ufin;
+          }
+        }
+        if(!c1line) ElCLib::AdjustPeriodic(0.,2*M_PI,Precision::Angular(),Udeb,Ufin);
+        Handle(GeomAdaptor_HCurve) HC = new GeomAdaptor_HCurve();
+        HC->ChangeCurve().Load(C3d,Udeb,Ufin);
+        ChFi3d_ProjectPCurv(HC,S1,Pc1,tol3d,tolr1);
+        if(S1->GetType() == GeomAbs_Cylinder) {
+          Standard_Real x,y;
+          Pc1->Value(Udeb).Coord(x,y);
+          x = Pardeb(1) - x;
+          y = Pardeb(2) - y;
+          if(Abs(x) >= tol2d || Abs(y) >= tol2d) Pc1->Translate(gp_Vec2d(x,y));
+        }
+        ChFi3d_ProjectPCurv(HC,S2,Pc2,tol3d,tolr2);
+        if(S2->GetType() == GeomAbs_Cylinder) {
+          Standard_Real x,y;
+          Pc2->Value(Udeb).Coord(x,y);
+          x = Pardeb(3) - x;
+          y = Pardeb(4) - y;
+          if(Abs(x) >= tol2d || Abs(y) >= tol2d) Pc2->Translate(gp_Vec2d(x,y));
+        }
+        C3d = new Geom_TrimmedCurve(C3d,Udeb,Ufin);
+        tolreached = 1.5*Max(tolr1,tolr2);
+        tolreached = Min(tolreached,ChFi3d_EvalTolReached(S1,Pc1,S2,Pc2,C3d));
+        return Standard_True;
       }
-      C3d = new Geom_TrimmedCurve(C3d,Udeb,Ufin);
-      tolreached = 1.5*Max(tolr1,tolr2);
-      tolreached = Min(tolreached,ChFi3d_EvalTolReached(S1,Pc1,S2,Pc2,C3d));
-      return Standard_True;
-    }
   }    
   else if(S1->GetType() == GeomAbs_Plane && S2->GetType() == GeomAbs_Plane) { 
     IntAna_QuadQuadGeo LInt(S1->Plane(),S2->Plane(),Precision::Angular(),tol3d);
@@ -3142,9 +3160,9 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
       Ufin = ElCLib::Parameter(L,pfin);
       ElCLib::D1(Udeb,L,Pbid,Vint);
       if (Vint.Dot(Vref)<0) {
-       C3d->Reverse();
-       Udeb = - Udeb;
-       Ufin = - Ufin;
+        C3d->Reverse();
+        Udeb = - Udeb;
+        Ufin = - Ufin;
       }
       Handle(GeomAdaptor_HCurve) HC = new GeomAdaptor_HCurve();
       HC->ChangeCurve().Load(C3d,Udeb,Ufin);
@@ -3155,8 +3173,7 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
     }
   }
   else {
-    // ici on attaque GeomInt.
-    //Pour l utilisation des domaines voir avec BUBUCH!!
+    // here GeomInt is approached.
     Handle(Adaptor3d_TopolTool) dom1,dom2;
     Handle(Geom_Surface) gs1 = trsfsurf(S1,dom1);
     Handle(Geom_Surface) gs2 = trsfsurf(S2,dom2);
@@ -3164,47 +3181,47 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
     if(!gs1.IsNull() && !gs2.IsNull()) {
       GeomInt_IntSS inter;
       //  Modified by skv - Fri Oct 24 14:24:47 2003 OCC4077 Begin
-//       Standard_Real tolap = 1.e-7;//car l approx de la wline est faite dans [0,1]
+      //       Standard_Real tolap = 1.e-7;//car l approx de la wline est faite dans [0,1]
       // Set the lowest tolerance which is used in new boolean operations.
       Standard_Real tolap = 2.e-7;
       //  Modified by skv - Fri Oct 24 14:24:48 2003 OCC4077 End
       inter.Perform(gs1,gs2,tolap,1,1,1);
       if(inter.IsDone()) {
-       nbl = inter.NbLines();   
+        nbl = inter.NbLines();   
 #if defined(IRIX) || defined(__sgi)
         if(nbl==0) {
 
-//  solution de rattrapage pour SGI 
-//  si l'intersection de gs1 avec gs2 ne marche pas alors on  tent
-// l'intersection de gs2 avec gs1 
+          //  solution of adjustment for SGI 
+          //  if the intersection of gs1 with gs2 doesnot work
+          //  then the intersection of gs2 with gs1 is attempted.
 
           inter.Perform(gs2,gs1,tolap,1,1,1);
-//          inter.Perform(gs2,dom2,gs1,dom1,tolap,1,1,1);
+          //          inter.Perform(gs2,dom2,gs1,dom1,tolap,1,1,1);
           if(!inter.IsDone()) return Standard_False; 
-         nbl = inter.NbLines(); 
+          nbl = inter.NbLines(); 
 
-//  si GeomInt ne rend pas d'intersection on ne tente pas la solution de 
-//  rattrapage 
-            if (nbl==0) return Standard_False;
+          //  if GeomInt does not make the intersection the solution of adjustment 
+          //  is not attempted 
+          if (nbl==0) return Standard_False;
         }
 #endif
-       GeomAPI_ProjectPointOnCurve proj;
-       for(Standard_Integer ilin = 1; ilin <= nbl; ilin++) {
-         if(inter.HasLineOnS1(ilin) && inter.HasLineOnS2(ilin)) {
-           C3d = inter.Line(ilin);
-           Pc1 = inter.LineOnS1(ilin);
-           Pc2 = inter.LineOnS2(ilin);
-           gp_Pnt ptestdeb, ptestfin;
-           Standard_Real Uf=0., Ul=0.;
-           if (wholeCurv) {
-             Uf = C3d->FirstParameter();
-             Ul = C3d->LastParameter();
-             ptestdeb = C3d->Value(Uf);
-             ptestfin = C3d->Value(Ul);
-           }
-           else {
+        GeomAPI_ProjectPointOnCurve proj;
+        for(Standard_Integer ilin = 1; ilin <= nbl; ilin++) {
+          if(inter.HasLineOnS1(ilin) && inter.HasLineOnS2(ilin)) {
+            C3d = inter.Line(ilin);
+            Pc1 = inter.LineOnS1(ilin);
+            Pc2 = inter.LineOnS2(ilin);
+            gp_Pnt ptestdeb, ptestfin;
+            Standard_Real Uf=0., Ul=0.;
+            if (wholeCurv) {
+              Uf = C3d->FirstParameter();
+              Ul = C3d->LastParameter();
+              ptestdeb = C3d->Value(Uf);
+              ptestfin = C3d->Value(Ul);
+            }
+            else {
               // find end parameters
-             Standard_Boolean failedF, failedL;
+              Standard_Boolean failedF, failedL;
               failedF = failedL = Standard_False;
               proj.Init( pdeb1, C3d);
               if (proj.NbPoints()==0 && distrefdeb > Precision::Confusion())
@@ -3250,60 +3267,59 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
                 }
               }
             }
-           C3d = new Geom_TrimmedCurve(C3d,Uf,Ul);
-           Pc1 = new Geom2d_TrimmedCurve(Pc1,Uf,Ul);
-           Pc2 = new Geom2d_TrimmedCurve(Pc2,Uf,Ul);
-           //faut il renverser ?
-           Standard_Real distdeb = ptestdeb.Distance(pdeb);
-           Standard_Real distfin = ptestfin.Distance(pfin);
-           if(distdeb > distref || distfin > distref) {
-             C3d->Reverse();
-             Pc1->Reverse();
-             Pc2->Reverse();
-             ptestdeb = C3d->Value(C3d->FirstParameter());
-             ptestfin = C3d->Value(C3d->LastParameter());
-             distdeb = ptestdeb.Distance(pdeb);
-             distfin = ptestfin.Distance(pfin);
-           }
-           if(distdeb < distref && distfin < distref) {
-             Uf = C3d->FirstParameter();
-             Ul = C3d->LastParameter();
-             ChFi3d_ReparamPcurv(Uf,Ul,Pc1);
-             ChFi3d_ReparamPcurv(Uf,Ul,Pc2);
-             Standard_Real x,y;
-             Pc1->Value(Uf).Coord(x,y);
-             x = Pardeb(1) - x;
-             y = Pardeb(2) - y;
-             if(Abs(x) > tol2d || Abs(y) > tol2d) Pc1->Translate(gp_Vec2d(x,y));
-             Pc2->Value(Uf).Coord(x,y);
-             x = Pardeb(3) - x;
-             y = Pardeb(4) - y;
-             if(Abs(x) > tol2d || Abs(y) > tol2d) Pc2->Translate(gp_Vec2d(x,y));
-             tolreached = ChFi3d_EvalTolReached(S1,Pc1,S2,Pc2,C3d);
-             return Standard_True;
-           }
-         }
-       }
+            C3d = new Geom_TrimmedCurve(C3d,Uf,Ul);
+            Pc1 = new Geom2d_TrimmedCurve(Pc1,Uf,Ul);
+            Pc2 = new Geom2d_TrimmedCurve(Pc2,Uf,Ul);
+            //is it necesary to invert ?
+            Standard_Real distdeb = ptestdeb.Distance(pdeb);
+            Standard_Real distfin = ptestfin.Distance(pfin);
+            if(distdeb > distref || distfin > distref) {
+              C3d->Reverse();
+              Pc1->Reverse();
+              Pc2->Reverse();
+              ptestdeb = C3d->Value(C3d->FirstParameter());
+              ptestfin = C3d->Value(C3d->LastParameter());
+              distdeb = ptestdeb.Distance(pdeb);
+              distfin = ptestfin.Distance(pfin);
+            }
+            if(distdeb < distref && distfin < distref) {
+              Uf = C3d->FirstParameter();
+              Ul = C3d->LastParameter();
+              ChFi3d_ReparamPcurv(Uf,Ul,Pc1);
+              ChFi3d_ReparamPcurv(Uf,Ul,Pc2);
+              Standard_Real x,y;
+              Pc1->Value(Uf).Coord(x,y);
+              x = Pardeb(1) - x;
+              y = Pardeb(2) - y;
+              if(Abs(x) > tol2d || Abs(y) > tol2d) Pc1->Translate(gp_Vec2d(x,y));
+              Pc2->Value(Uf).Coord(x,y);
+              x = Pardeb(3) - x;
+              y = Pardeb(4) - y;
+              if(Abs(x) > tol2d || Abs(y) > tol2d) Pc2->Translate(gp_Vec2d(x,y));
+              tolreached = ChFi3d_EvalTolReached(S1,Pc1,S2,Pc2,C3d);
+              return Standard_True;
+            }
+          }
+        }
       }
     }
   }
-  
-  // A ce stade : 
-  // les intersections classiques ont echouees on attaque le
-  // cheminement du desespoir.
-//  Standard_Real Step = 0.1;
-  while(1) {
-    //Attention les parametres de fleche pour le cheminement et 
-    //de tolerance pour l'approx ne peuvent etre pris comme ceux 
-    //du Builder, on les reestime donc comme on peut.
+
+  // At this stage : 
+  // classic intersections have failed, the path is approached in vain.
+  //  Standard_Real Step = 0.1;
+  for(;;) {
+    //Attention the parameters of arrow for the path and
+    //the tolerance for the approximation can't be taken as those of the  
+    //Builder, so they are reestimated as much as possible.
     Standard_Real fleche = 1.e-3 * pdeb.Distance(pfin);
     Standard_Real tolap = 1.e-7;
-    IntPatch_ThePWalkingInter
+    IntWalk_PWalking
       IntKK(S1,S2,tol3d,tol3d,fleche,Step);
-    
-    //On connait les extremites de l intersection (Pardeb,Parfin),
-    //on essaye de trouver un point de depart franchement au
-    //milieu pour ne pas embrouiller le cheminement.
+
+    //The extremities of the intersection (Pardeb,Parfin) are known,
+    //one tries to find the start point at the 
+    //middle to avoid obstacles on the path.
     Standard_Boolean depok = Standard_False;
     IntSurf_PntOn2S pintdep;
     TColStd_Array1OfReal depart(1,4);
@@ -3325,112 +3341,111 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
     if (IntKK.NbPoints() <= 30) {
       Step *= 0.5;
       if (Step <= 0.0001) {
-       return Standard_False;
+        return Standard_False;
       }
     }
     else{
-      // A ce stade on a une LineOn2S presentable, on la tronque entre les 
-      // points les plus proches des extremites connues on en fait une 
-      // WLine et on lance l approx.
-      // On retouche ensuite le resultat pour avoir les bons points debut 
-      // et fin.
+      // At this stage there is a presentable LineOn2S, it is truncated  
+      // between the points closest to known  extremites 
+      // in fact there is a WLine and the approximation is launched.
+      // Then the result is corrected to get proper start and end points.
       const Handle(IntSurf_LineOn2S)& L2S = IntKK.Line();
-      
+
       gp_Pnt codeb1 = S1->Value(Pardeb(1),Pardeb(2));
       gp_Pnt codeb2 = S2->Value(Pardeb(3),Pardeb(4));
       Standard_Real tol1 = Max(codeb1.Distance(codeb2),tol3d);
       Standard_Boolean bondeb = (tol1 == tol3d); 
       gp_Pnt pntd(0.5*(codeb1.Coord() + codeb2.Coord()));
-      
+
       gp_Pnt cofin1 = S1->Value(Parfin(1),Parfin(2));
       gp_Pnt cofin2 = S2->Value(Parfin(3),Parfin(4));
       Standard_Real tol2 = Max(cofin1.Distance(cofin2),tol3d);
       Standard_Boolean bonfin = (tol2 == tol3d); 
       gp_Pnt pntf(0.5*(cofin1.Coord() + cofin2.Coord()));
-      
+
       Standard_Integer nbp = L2S->NbPoints(), i;
       Standard_Real ddeb = Precision::Infinite(); 
       Standard_Real dfin = Precision::Infinite();
       Standard_Real dd;
       Standard_Integer indd = 0, indf = 0;
       for(i = 1; i <= nbp; i++) {
-       dd = L2S->Value(i).Value().Distance(pntd);
-       if(dd < ddeb) { ddeb = dd; indd = i;}
-       dd = L2S->Value(i).Value().Distance(pntf);
-       if(dd < dfin) { dfin = dd; indf = i;}
+        dd = L2S->Value(i).Value().Distance(pntd);
+        if(dd <= ddeb) { ddeb = dd; indd = i;}
+        dd = L2S->Value(i).Value().Distance(pntf);
+        if(dd < dfin) { dfin = dd; indf = i;}
       }
       if(indd > indf) {
-       L2S->Reverse();
-       indd = nbp - indd + 1;
-       indf = nbp - indf + 1;
+        L2S->Reverse();
+        indd = nbp - indd + 1;
+        indf = nbp - indf + 1;
       }
       for (i = 1; i < indd; i++) { L2S->RemovePoint(1); nbp--; indf--; }
       for (i = indf + 1; i <= nbp; i++) { L2S->RemovePoint(indf + 1); }
       nbp = indf;
       if(nbp==1) return Standard_False;
-      //On insere les extremites dans la ligne si les points extremites de
-      //celle-ci en sont trop eloignes et si pardeb et parfin sont bons.
+      //The extremities are inserted in the line if the extremity points on it 
+      //are too far and if pardeb and parfin are good.
       if(ddeb >= tol3d && bondeb) {
-       IntSurf_PntOn2S p1 = L2S->Value(1);
-       IntSurf_PntOn2S p2 = L2S->Value(2);
-         
-       gp_Vec v1(pntd,p1.Value());
-       gp_Vec v2(p1.Value(),p2.Value());
-       gp_Vec v3(pntd,p2.Value());
-       p1.SetValue(pntd,Pardeb(1),Pardeb(2),Pardeb(3),Pardeb(4));
-       if(v1.Dot(v3) < 0) {
-         if(v3.Magnitude() < 0.2*v2.Magnitude()) {
-           L2S->RemovePoint(1);
-           nbp--;
-         }
-         L2S->Value(1,p1);
-       }
-       else if(v1.Magnitude() > 0.2*v2.Magnitude()) {
-         L2S->InsertBefore(1,p1);
-         nbp++;
-       }
-       else{
-         L2S->Value(1,p1);
-       }
-       ddeb = 0.;
+        IntSurf_PntOn2S p1 = L2S->Value(1);
+        IntSurf_PntOn2S p2 = L2S->Value(2);
+
+        gp_Vec v1(pntd,p1.Value());
+        gp_Vec v2(p1.Value(),p2.Value());
+        gp_Vec v3(pntd,p2.Value());
+        p1.SetValue(pntd,Pardeb(1),Pardeb(2),Pardeb(3),Pardeb(4));
+        if(v1.Dot(v3) < 0) {
+          if(v3.Magnitude() < 0.2*v2.Magnitude()) {
+            L2S->RemovePoint(1);
+            nbp--;
+          }
+          L2S->Value(1,p1);
+        }
+        else if(v1.Magnitude() > 0.2*v2.Magnitude()) {
+          L2S->InsertBefore(1,p1);
+          nbp++;
+        }
+        else{
+          L2S->Value(1,p1);
+        }
+        ddeb = 0.;
       }
       if(dfin >= tol3d && bonfin) {
-       IntSurf_PntOn2S p1 = L2S->Value(nbp);
-       IntSurf_PntOn2S p2 = L2S->Value(nbp - 1);
-       gp_Vec v1(pntf,p1.Value());
-       gp_Vec v2(p1.Value(),p2.Value());
-       gp_Vec v3(pntf,p2.Value());
-       p1.SetValue(pntf,Parfin(1),Parfin(2),Parfin(3),Parfin(4));
-       if(v1.Dot(v3) < 0) {
-         if(v3.Magnitude() < 0.2*v2.Magnitude()) {
-           L2S->RemovePoint(nbp);
-           nbp--;
-         }
-         L2S->Value(nbp,p1);
-       }
-       else if(v1.Magnitude() > 0.2*v2.Magnitude()) {
-         L2S->Add(p1);
-         nbp++;
-       }
-       else{
-         L2S->Value(nbp,p1);
-       }
-       dfin = 0.;
+        IntSurf_PntOn2S p1 = L2S->Value(nbp);
+        IntSurf_PntOn2S p2 = L2S->Value(nbp - 1);
+        gp_Vec v1(pntf,p1.Value());
+        gp_Vec v2(p1.Value(),p2.Value());
+        gp_Vec v3(pntf,p2.Value());
+        p1.SetValue(pntf,Parfin(1),Parfin(2),Parfin(3),Parfin(4));
+        if(v1.Dot(v3) < 0) {
+          if(v3.Magnitude() < 0.2*v2.Magnitude()) {
+            L2S->RemovePoint(nbp);
+            nbp--;
+          }
+          L2S->Value(nbp,p1);
+        }
+        else if(v1.Magnitude() > 0.2*v2.Magnitude()) {
+          L2S->Add(p1);
+          nbp++;
+        }
+        else{
+          L2S->Value(nbp,p1);
+        }
+        dfin = 0.;
       }      
       //
       Handle(IntPatch_WLine)   WL = new IntPatch_WLine(L2S,Standard_False);
-      
+
       GeomInt_WLApprox approx;
       approx.SetParameters(tolap,tol2d,4,8,0,1);
-      // gerer ici les approx inutiles sur les plans!!!!!!!!!!!
+      // manage here the approximations that are not useful on planes!
       approx.Perform(S1,S2,WL,
-                    Standard_True,Standard_True,Standard_True,
-                    1,nbp);
+        Standard_True,Standard_True,Standard_True,
+        1,nbp);
       if(!approx.IsDone()) return Standard_False;
-//      tolreached = approx.TolReached3d();
-//      Standard_Real tolr2d = approx.TolReached2d();
-//      tolreached = Max(tolreached,ChFi3d_ConvTol2dToTol3d(S1,tolr2d));
-//      tolreached = Max(tolreached,ChFi3d_ConvTol2dToTol3d(S2,tolr2d));
+      //      tolreached = approx.TolReached3d();
+      //      Standard_Real tolr2d = approx.TolReached2d();
+      //      tolreached = Max(tolreached,ChFi3d_ConvTol2dToTol3d(S1,tolr2d));
+      //      tolreached = Max(tolreached,ChFi3d_ConvTol2dToTol3d(S2,tolr2d));
       const AppParCurves_MultiBSpCurve& mbs = approx.Value(1);
       Standard_Integer nbpol = mbs.NbPoles();
       TColgp_Array1OfPnt pol3d(1,nbpol);
@@ -3439,19 +3454,19 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
       mbs.Curve(2,pol2d1);
       TColgp_Array1OfPnt2d pol2d2(1,nbpol);
       mbs.Curve(3,pol2d2);
-      // On recale les extremites de l intersection sur les points connus.
+      // The extremities of the intersection are reset on known points.
       if(ddeb >= tol1) {
-       pol3d(1) = pntd;
-       pol2d1(1).SetCoord(Pardeb(1),Pardeb(2));
-       pol2d2(1).SetCoord(Pardeb(3),Pardeb(4));
-//     tolreached = Max(tolreached,ddeb);
+        pol3d(1) = pntd;
+        pol2d1(1).SetCoord(Pardeb(1),Pardeb(2));
+        pol2d2(1).SetCoord(Pardeb(3),Pardeb(4));
+        //     tolreached = Max(tolreached,ddeb);
       }
-      
+
       if(dfin >= tol2) {
-       pol3d(nbpol) = pntf;
-       pol2d1(nbpol).SetCoord(Parfin(1),Parfin(2));
-       pol2d2(nbpol).SetCoord(Parfin(3),Parfin(4));
-//     tolreached = Max(tolreached,dfin);
+        pol3d(nbpol) = pntf;
+        pol2d1(nbpol).SetCoord(Parfin(1),Parfin(2));
+        pol2d2(nbpol).SetCoord(Parfin(3),Parfin(4));
+        //     tolreached = Max(tolreached,dfin);
       }
       const TColStd_Array1OfReal& knots = mbs.Knots();
       const TColStd_Array1OfInteger& mults = mbs.Multiplicities();
@@ -3460,6 +3475,8 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
       Pc1 = new Geom2d_BSplineCurve(pol2d1,knots,mults,deg);
       Pc2 = new Geom2d_BSplineCurve(pol2d2,knots,mults,deg);
       tolreached = ChFi3d_EvalTolReached(S1,Pc1,S2,Pc2,C3d);
+      tolreached = Max(tolreached,ddeb);
+      tolreached = Max(tolreached,dfin);
       return Standard_True;
     }
   }
@@ -3467,17 +3484,17 @@ Standard_Boolean ChFi3d_ComputeCurves(Handle(Adaptor3d_HSurface)&   S1,
 
 //=======================================================================
 //function : IntCS
-//purpose  : Calcul rapide de l intersection courbe surface.
+//purpose  : Fast calculation of the intersection curve surface.
 //
 //=======================================================================
 
 Standard_Boolean ChFi3d_IntCS(Handle(Adaptor3d_HSurface)& S,
-                             Handle(Adaptor3d_HCurve)& C,
-                             gp_Pnt2d& p2dS,
-                             Standard_Real& wc)
+  Handle(Adaptor3d_HCurve)& C,
+  gp_Pnt2d& p2dS,
+  Standard_Real& wc)
 {
   IntCurveSurface_HInter Intersection;
-  
+
   Standard_Real uf = C->FirstParameter(), ul = C->LastParameter();
   Standard_Real u1 = S->FirstUParameter(), u2 = S->LastUParameter();
   Standard_Real v1 = S->FirstVParameter(), v2 = S->LastVParameter();
@@ -3497,20 +3514,20 @@ Standard_Boolean ChFi3d_IntCS(Handle(Adaptor3d_HSurface)& S,
       if(S->IsUPeriodic()) up = ChFi3d_InPeriod(up,u1,u1+S->UPeriod(),1.e-8);
       if(S->IsVPeriodic()) vp = ChFi3d_InPeriod(vp,v1,v1+S->VPeriod(),1.e-8);
       if(uf <= pint.W() && ul >= pint.W() &&
-        u1 <= up && u2 >= up &&
-        v1 <= vp && v2 >= vp) {
-       if(keepfirst && pint.W() < temp) {
-         temp = pint.W();
-         isol = i;
-       }
-       else if(keeplast && pint.W() > temp) {
-         temp = pint.W();
-         isol = i;
-       }
-       else if(Abs(pint.W() - wc) < dist) {
-         dist = Abs(pint.W() - wc);
-         isol = i;
-       }
+        u1 <= up && u2 >= up &&
+        v1 <= vp && v2 >= vp) {
+          if(keepfirst && pint.W() < temp) {
+            temp = pint.W();
+            isol = i;
+          }
+          else if(keeplast && pint.W() > temp) {
+            temp = pint.W();
+            isol = i;
+          }
+          else if(Abs(pint.W() - wc) < dist) {
+            dist = Abs(pint.W() - wc);
+            isol = i;
+          }
       }
     }
     if(isol == 0) return Standard_False;
@@ -3528,17 +3545,17 @@ Standard_Boolean ChFi3d_IntCS(Handle(Adaptor3d_HSurface)& S,
 
 //=======================================================================
 //function : ComputesIntPC
-//purpose  : Intersection de deux PCurves de type FaceInterference
-//           les parametres sur les pcurves du point solution sont 
+//purpose  : Intersection of two PCurves of type FaceInterference
+//           the parameters of the pcurves at the solution point are 
 //           UInt1,UInt2
 //=======================================================================
 
 void ChFi3d_ComputesIntPC (const ChFiDS_FaceInterference&      Fi1,
-                          const ChFiDS_FaceInterference&      Fi2,
-                          const Handle(GeomAdaptor_HSurface)& HS1,
-                          const Handle(GeomAdaptor_HSurface)& HS2,
-                          Standard_Real&                      UInt1, 
-                          Standard_Real&                      UInt2)
+  const ChFiDS_FaceInterference&      Fi2,
+  const Handle(GeomAdaptor_HSurface)& HS1,
+  const Handle(GeomAdaptor_HSurface)& HS2,
+  Standard_Real&                      UInt1, 
+  Standard_Real&                      UInt2)
 {
   gp_Pnt bid;
   ChFi3d_ComputesIntPC(Fi1,Fi2,HS1,HS2,UInt1,UInt2,bid);
@@ -3549,17 +3566,17 @@ void ChFi3d_ComputesIntPC (const ChFiDS_FaceInterference&      Fi1,
 //purpose  : 
 //=======================================================================
 void ChFi3d_ComputesIntPC (const ChFiDS_FaceInterference&      Fi1,
-                          const ChFiDS_FaceInterference&      Fi2,
-                          const Handle(GeomAdaptor_HSurface)& HS1,
-                          const Handle(GeomAdaptor_HSurface)& HS2,
-                          Standard_Real&                      UInt1, 
-                          Standard_Real&                      UInt2,
-                          gp_Pnt&                             P)
+  const ChFiDS_FaceInterference&      Fi2,
+  const Handle(GeomAdaptor_HSurface)& HS1,
+  const Handle(GeomAdaptor_HSurface)& HS2,
+  Standard_Real&                      UInt1, 
+  Standard_Real&                      UInt2,
+  gp_Pnt&                             P)
 {    
-  // Une seule intersection a realiser, on prend tout de meme
-  // le soin de valider les extremites par un extrema c3d/c3d
-  // realise sur les pcurveonsurf des conges.
-  
+  // Only one intersection to be carried out, however, the effort
+  // is taken to check the extremities by an extrema c3d/c3d
+  // created on pcurveonsurf of fillets.
+
   Standard_Real x,y,distref2;
   Fi1.PCurveOnSurf()->Value(UInt1).Coord(x,y);
   gp_Pnt p3d1 = HS1->Value(x,y);
@@ -3567,7 +3584,7 @@ void ChFi3d_ComputesIntPC (const ChFiDS_FaceInterference&      Fi1,
   gp_Pnt p3d2 = HS2->Value(x,y);
   distref2 = p3d1.SquareDistance(p3d2);
   P.SetXYZ(0.5*(p3d1.XYZ() + p3d2.XYZ()));
-  // recalcul de l'extrema
+  // recalculation of the extremums
   Standard_Real delt1 = 
     Min(0.1,0.05*(Fi1.LastParameter() - Fi1.FirstParameter()));
   Handle(Geom2dAdaptor_HCurve) hc2d1 = 
@@ -3600,28 +3617,28 @@ void ChFi3d_ComputesIntPC (const ChFiDS_FaceInterference&      Fi1,
 
 //=======================================================================
 Handle(GeomAdaptor_HSurface) ChFi3d_BoundSurf(TopOpeBRepDS_DataStructure&    DStr,
-                                             const Handle(ChFiDS_SurfData)& Fd1,
-                                             const Standard_Integer&        IFaCo1,
-                                             const Standard_Integer&        IFaArc1)
+  const Handle(ChFiDS_SurfData)& Fd1,
+  const Standard_Integer&        IFaCo1,
+  const Standard_Integer&        IFaArc1)
 {
-  //rmq : comme en fait les 2 interferences de Fd1 ne servent qu'a donner le
-  //      bornes, les indices  IFaCo1 et IFaArc1 sont inutiles.
-  //      On les garde ici en option au cas ou il faudrait borner de facon plus
-  //      restrictive (avec des points d'intersection en argument en plus).
-  
+  //rmq : as in fact 2 interferences of Fd1 serve only to set limit
+  //      indexes IFaCo1 and IFaArc1 are not useful.
+  //      They are preserver here as an option in case it will be necessary to set 
+  //      more restrictive limits (with intersection points as additional argument).
+
   Handle(GeomAdaptor_HSurface) HS1 = new GeomAdaptor_HSurface();
   GeomAdaptor_Surface& S1 = HS1->ChangeSurface();
   S1.Load(DStr.Surface(Fd1->Surf()).Surface());
-  
+
   if ((IFaCo1 == 0)||(IFaArc1 == 0)) 
     return HS1;
-  
+
   const ChFiDS_FaceInterference& FiCo1 = Fd1->Interference(IFaCo1);
   const ChFiDS_FaceInterference& FiArc1 = Fd1->Interference(IFaArc1);
-  
+
   Standard_Real Du,Dv,mu,Mu,mv,Mv;
   gp_Pnt2d UVf1,UVf2,UVl1,UVl2;
-  
+
   UVf1 = FiCo1.PCurveOnSurf()->Value(FiCo1.FirstParameter());
   UVl1 = FiCo1.PCurveOnSurf()->Value(FiCo1.LastParameter());
   UVf2 = FiArc1.PCurveOnSurf()->Value(FiArc1.FirstParameter());
@@ -3632,21 +3649,21 @@ Handle(GeomAdaptor_HSurface) ChFi3d_BoundSurf(TopOpeBRepDS_DataStructure&    DSt
     Dv = Max(0.5*Dv,4.*S1.Cylinder().Radius());
     Du = 0.;
     S1.Load(DStr.Surface(Fd1->Surf()).Surface(),
-           mu,Mu,mv-Dv,Mv+Dv);
+      mu,Mu,mv-Dv,Mv+Dv);
   }
-  //Dans le cas d'un tore ou cone, il ne faut pas que l'agrandissement des bounds engendrent une surface avec une periode plus grande que 2PI. lvt
+  //In the case of a torus or cone, it is not necessary that the bounds create a surface with period more than 2PI. 
   else if (styp == GeomAbs_Torus ||
-          styp == GeomAbs_Cone) {
-    Du = Min(PI-0.5*Du,0.1*Du);
-    Dv = 0.;
-    S1.Load(DStr.Surface(Fd1->Surf()).Surface(),
-           mu-Du,Mu+Du,mv,Mv);
+    styp == GeomAbs_Cone) {
+      Du = Min(M_PI-0.5*Du,0.1*Du);
+      Dv = 0.;
+      S1.Load(DStr.Surface(Fd1->Surf()).Surface(),
+        mu-Du,Mu+Du,mv,Mv);
   }
   else if (styp == GeomAbs_Plane) {
     Du = Max(0.5*Du,4.*Dv);
     Dv = 0.;
     S1.Load(DStr.Surface(Fd1->Surf()).Surface(),
-           mu-Du,Mu+Du,mv,Mv);
+      mu-Du,Mu+Du,mv,Mv);
   }
   return HS1;
 }
@@ -3655,18 +3672,18 @@ Handle(GeomAdaptor_HSurface) ChFi3d_BoundSurf(TopOpeBRepDS_DataStructure&    DSt
 //purpose  : 
 //=======================================================================
 Standard_Integer ChFi3d_SearchPivot(Standard_Integer* s,
-                                   Standard_Real u[3][3],
-                                   const Standard_Real t)
+  Standard_Real u[3][3],
+  const Standard_Real t)
 {
-  //Cette fonction recherche comme pivot une cd dont les sections 
-  //ne se croisent pas sur la face opposee. 
-  //         - il y aura peut etre des cas suffisamment asymetriques
-  //           pour qu aucun des trois conges ne convienne!! A VOIR.
-  //         - dans le cas ou plusieurs conviennent on prend l
-  //           premier qui n est pas forcement le meilleur, prevoir 
-  //           d affiner cela en comparant les parametres sur les
-  //           lignes guide et (/ou) les rayons.
-  
+  //           This function finds as pivot a cd the sections which of
+  //           do not cross on the opposite face. 
+  //         - probably there will be cases asymmetric to the point that
+  //           none of tree fillets will match! To be SEEN.
+  //         - in case when several fillets match th
+  //           first one taken is not inevitably the best 
+  //           it should be refined by comparing the parameters on 
+  //           guide lines and (/or) radiuses.
+
   Standard_Boolean bondeb,bonfin;
   for(Standard_Integer i = 0; i <= 2; i++) {
     if(s[(i+1)%3] == 1) {bondeb = (u[(i+1)%3][i]-u[(i+1)%3][(i+2)%3] >= -t);}
@@ -3685,20 +3702,20 @@ Standard_Integer ChFi3d_SearchPivot(Standard_Integer* s,
 //purpose  : 
 //=======================================================================
 Standard_Boolean ChFi3d_SearchFD(TopOpeBRepDS_DataStructure& DStr,
-                                const Handle(ChFiDS_Stripe)& cd1, 
-                                const Handle(ChFiDS_Stripe)& cd2,
-                                const Standard_Integer sens1,
-                                const Standard_Integer sens2,
-                                Standard_Integer& i1,
-                                Standard_Integer& i2,
-                                Standard_Real& p1,
-                                Standard_Real& p2,
-                                const Standard_Integer ind1,
-                                const Standard_Integer ind2,
-                                TopoDS_Face& face,
-                                Standard_Boolean& sameside,
-                                Standard_Integer& jf1,
-                                Standard_Integer& jf2)
+  const Handle(ChFiDS_Stripe)& cd1, 
+  const Handle(ChFiDS_Stripe)& cd2,
+  const Standard_Integer sens1,
+  const Standard_Integer sens2,
+  Standard_Integer& i1,
+  Standard_Integer& i2,
+  Standard_Real& p1,
+  Standard_Real& p2,
+  const Standard_Integer ind1,
+  const Standard_Integer ind2,
+  TopoDS_Face& face,
+  Standard_Boolean& sameside,
+  Standard_Integer& jf1,
+  Standard_Integer& jf2)
 {
   Standard_Boolean found = Standard_False;
   Standard_Integer id1 = ind1, id2 = ind2;
@@ -3712,31 +3729,31 @@ Standard_Boolean ChFi3d_SearchFD(TopOpeBRepDS_DataStructure& DStr,
   while( !found ) {
     for(i = id1; (i*sens1) <= (if1*sens1) && !found && !fini2; i = i+sens1 ) { 
       if(ChFi3d_IsInFront(DStr,cd1,cd2,i,if2,sens1,sens2,p1,p2,face,sameside,jf1,jf2,visavis,Vtx,Standard_False,0)) {
-       i1 = i;
-       i2 = if2;
-       found = Standard_True;
+        i1 = i;
+        i2 = if2;
+        found = Standard_True;
       }
       else if (visavis && !visavisok) {
-       visavisok = Standard_True;
-       i1 = i;
-       i2 = if2;
+        visavisok = Standard_True;
+        i1 = i;
+        i2 = if2;
       }
     }
     if(!fini1) {
       if1 = if1 + sens1;
       if(if1 < 1 || if1 > l1) { if1 = if1 - sens1; fini1 = Standard_True; }
     }
-    
+
     for(i = id2; (i*sens2) <= (if2*sens2) && !found && !fini1; i = i+sens2 ) { 
       if(ChFi3d_IsInFront(DStr,cd1,cd2,if1,i,sens1,sens2,p1,p2,face,sameside,jf1,jf2,visavis,Vtx,Standard_False,0)) {
-       i1 = if1;
-       i2 = i;
-       found = Standard_True;
+        i1 = if1;
+        i2 = i;
+        found = Standard_True;
       }
       else if (visavis && !visavisok) {
-       visavisok = Standard_True;
-       i1 = if1;
-       i2 = i;
+        visavisok = Standard_True;
+        i1 = if1;
+        i2 = i;
       }
     }
     if(!fini2) {
@@ -3755,9 +3772,9 @@ Standard_Boolean ChFi3d_SearchFD(TopOpeBRepDS_DataStructure& DStr,
 //=======================================================================
 
 void ChFi3d_Parameters(const Handle(Geom_Surface)& S,
-                      const gp_Pnt& p3d,
-                      Standard_Real& u,
-                      Standard_Real& v)
+  const gp_Pnt& p3d,
+  Standard_Real& u,
+  Standard_Real& v)
 {
   GeomAdaptor_Surface gas(S);
   switch ( gas.GetType() ) {
@@ -3782,9 +3799,9 @@ void ChFi3d_Parameters(const Handle(Geom_Surface)& S,
     {
       GeomAPI_ProjectPointOnSurf tool(p3d,S);
       if ( tool.NbPoints() != 1 )
-       StdFail_NotDone::Raise("");
+        StdFail_NotDone::Raise("");
       else
-       tool.Parameters(1,u,v);
+        tool.Parameters(1,u,v);
     }
   }
 }
@@ -3796,9 +3813,9 @@ void ChFi3d_Parameters(const Handle(Geom_Surface)& S,
 //=======================================================================
 
 void ChFi3d_TrimCurve(const Handle(Geom_Curve)& gc,
-                     const gp_Pnt& FirstP,
-                     const gp_Pnt& LastP,
-                     Handle(Geom_TrimmedCurve)& gtc)
+  const gp_Pnt& FirstP,
+  const gp_Pnt& LastP,
+  Handle(Geom_TrimmedCurve)& gtc)
 {
   Standard_Real uf = 0.,ul = 0.;
   GeomAdaptor_Curve gac(gc);
@@ -3835,17 +3852,17 @@ void ChFi3d_TrimCurve(const Handle(Geom_Curve)& gc,
     break;
   default :
     {
-    GeomAPI_ProjectPointOnCurve tool(FirstP,gc);
-    if ( tool.NbPoints() != 1 )
-      StdFail_NotDone::Raise("");
-    else
-      uf = tool.Parameter(1);
-    tool.Init(LastP,gc);
-    if ( tool.NbPoints() != 1 )
-      StdFail_NotDone::Raise("");
-    else
-      ul = tool.Parameter(1);
-  }
+      GeomAPI_ProjectPointOnCurve tool(FirstP,gc);
+      if ( tool.NbPoints() != 1 )
+        StdFail_NotDone::Raise("");
+      else
+        uf = tool.Parameter(1);
+      tool.Init(LastP,gc);
+      if ( tool.NbPoints() != 1 )
+        StdFail_NotDone::Raise("");
+      else
+        ul = tool.Parameter(1);
+    }
   }
   gtc = new Geom_TrimmedCurve(gc,uf,ul);
 }
@@ -3857,10 +3874,10 @@ void ChFi3d_TrimCurve(const Handle(Geom_Curve)& gc,
 //purpose  : 
 //=======================================================================
 static Standard_Boolean GoodExt(const Handle(Geom_Curve)& C,
-                               const gp_Vec&             V,
-                               const Standard_Real       f,
-                               const Standard_Real       l,
-                               const Standard_Real       a)
+  const gp_Vec&             V,
+  const Standard_Real       f,
+  const Standard_Real       l,
+  const Standard_Real       a)
 {
   for(Standard_Integer i = 0; i < 6; i++) {
     gp_Pnt d0; gp_Vec d1;
@@ -3878,14 +3895,14 @@ static Standard_Boolean GoodExt(const Handle(Geom_Curve)& C,
 //=======================================================================
 Standard_EXPORT 
   void ChFi3d_PerformElSpine(Handle(ChFiDS_HElSpine)& HES,
-                            Handle(ChFiDS_Spine)&    Spine,
-                            const GeomAbs_Shape      continuity,
-                            const Standard_Real      tol) 
+  Handle(ChFiDS_Spine)&    Spine,
+  const GeomAbs_Shape      continuity,
+  const Standard_Real      tol) 
 {
-  
+
   Standard_Boolean periodic, Bof, checkdeb, cepadur,bIsSmooth;
   Standard_Integer IEdge,IF,IL,nbed, iToApproxByC2;
-  Standard_Real WF, WL, Wrefdeb, Wreffin,nwf,nwl,period,pared,tolpared;
+  Standard_Real WF, WL, Wrefdeb, Wreffin,nwf,nwl,period,pared = 0.,tolpared;
   Standard_Real First, Last, epsV, urefdeb, tolrac;
   GeomAbs_Shape aContinuity;
   gp_Pnt PDeb, PFin, Bout;
@@ -3895,7 +3912,7 @@ Standard_EXPORT
   Handle(Geom_BSplineCurve) BS, BSpline;
   TopoDS_Edge E, Eold;
   TopoDS_Vertex V;
-    //
+  //
   ChFiDS_ElSpine& ES = HES->ChangeCurve();
   WF = ES.FirstParameter();
   WL = ES.LastParameter();
@@ -3937,6 +3954,16 @@ Standard_EXPORT
   const BRepAdaptor_Curve& edc = Spine->CurrentElementarySpine(IF);
   tolpared = edc.Resolution(tol);
   Cv = BRep_Tool::Curve(E, First, Last);
+  //Add vertex with tangent
+  if (ES.IsPeriodic())
+  {
+    Standard_Real ParForElSpine = (E.Orientation() == TopAbs_FORWARD)? First : Last;
+    gp_Pnt PntForElSpine;
+    gp_Vec DirForElSpine;
+    Cv->D1(ParForElSpine, PntForElSpine, DirForElSpine);
+    ES.AddVertexWithTangent(gp_Ax1(PntForElSpine, DirForElSpine));
+  }
+  /////////////////////////
   urefdeb = Spine->FirstParameter(IF);
   checkdeb = (nwf > urefdeb);
   if(checkdeb) {
@@ -3960,14 +3987,14 @@ Standard_EXPORT
       Standard_Real ureffin = Spine->LastParameter(IL);
       Standard_Boolean checkfin = (nwl < ureffin);
       if(checkfin) {
-       Spine->Parameter(IL,nwl,pared,0);
-       pared = Cv->ReversedParameter(pared);
+        Spine->Parameter(IL,nwl,pared,0);
+        pared = Cv->ReversedParameter(pared);
       }
       else {
-       pared = Last;
+        pared = Last;
       }
       if(pared < Last) {
-       Last = pared; 
+        Last = pared; 
       }
     }
     Cv = Cv->Reversed();
@@ -3983,13 +4010,13 @@ Standard_EXPORT
       Standard_Real ureffin = Spine->LastParameter(IL);
       Standard_Boolean checkfin = (nwl < ureffin);
       if(checkfin) {
-       Spine->Parameter(IL,nwl,pared,0);
+        Spine->Parameter(IL,nwl,pared,0);
       }
       else {
-       pared = Last;
+        pared = Last;
       }
       if(pared < Last) {
-       Last = pared; 
+        Last = pared; 
       }
     }
   }// else {//#1
@@ -4063,29 +4090,36 @@ Standard_EXPORT
     }
     //
     Cv = BRep_Tool::Curve(E, First, Last);
+    //Add vertex with tangent
+    Standard_Real ParForElSpine = (E.Orientation() == TopAbs_FORWARD)? First : Last;
+    gp_Pnt PntForElSpine;
+    gp_Vec DirForElSpine;
+    Cv->D1(ParForElSpine, PntForElSpine, DirForElSpine);
+    ES.AddVertexWithTangent(gp_Ax1(PntForElSpine, DirForElSpine));
+    /////////////////////////
     if(IEdge == IL) {
       Standard_Real ureffin = Spine->LastParameter(iloc);
       Standard_Boolean checkfin = (nwl < ureffin);
       if(checkfin) {
-       Spine->Parameter(iloc,nwl,pared,0);
+        Spine->Parameter(iloc,nwl,pared,0);
       }
       else {
-       pared = Last;
+        pared = Last;
       }
       if(E.Orientation() == TopAbs_REVERSED) {
-       Standard_Real sov = First;
-       First = Cv->ReversedParameter(Last);
-       Last = Cv->ReversedParameter(sov);
-       if(checkfin) {
-         pared = Cv->ReversedParameter(pared);
-       }
-       else{
-         pared = Last;
-       }
-       Cv = Cv->Reversed();
+        Standard_Real sov = First;
+        First = Cv->ReversedParameter(Last);
+        Last = Cv->ReversedParameter(sov);
+        if(checkfin) {
+          pared = Cv->ReversedParameter(pared);
+        }
+        else{
+          pared = Last;
+        }
+        Cv = Cv->Reversed();
       }
       if(pared < Last) {
-       Last = pared; 
+        Last = pared; 
       }
     }
     //
@@ -4111,8 +4145,8 @@ Standard_EXPORT
     if (!Bof) {
       Bof = Concat.Add( TC, 200.*epsV, Standard_True );
       if (!Bof) {
-       Standard_ConstructionError::Raise("PerformElSpine: spine merged error");
-       }
+        Standard_ConstructionError::Raise("PerformElSpine: spine merged error");
+      }
     }
     Eold = E;
   }// for (IEdge=IF+1; IEdge<=IL; ++IEdge) {
@@ -4120,7 +4154,7 @@ Standard_EXPORT
   // On a la portion d elspine calculee sans prolongements sur la partie 
   // valide des aretes du chemin.
   BSpline = Concat.BSplineCurve();
-  // On reparametre ici pour coller au mieux a l abscisse des aretes.
+  // There is a reparametrisation to maximally connect the abscissas of edges.
   TColStd_Array1OfReal BSNoeuds (1, BSpline->NbKnots());
   BSpline->Knots(BSNoeuds);
   BSplCLib::Reparametrize (Wrefdeb, Wreffin, BSNoeuds);
@@ -4134,7 +4168,7 @@ Standard_EXPORT
   //
   caredeb = 0;
   carefin = 0;
-  Angle = PI*0.75;
+  Angle = M_PI*0.75;
   LocalWL = WL;
   LocalWF = WF;
   if (!ES.IsPeriodic() && !PDeb.IsEqual(BSpline->Pole(1), tol) ) {
@@ -4154,8 +4188,8 @@ Standard_EXPORT
       gacurve.Load(newc);
       GCPnts_AbscissaPoint GCP(gacurve,-rabdist,Wrefdeb,WF);
       if(GCP.IsDone()) {
-       WF = GCP.Parameter();
-       goodext = GoodExt(newc,VrefDeb,Wrefdeb,WF,Angle);
+        WF = GCP.Parameter();
+        goodext = GoodExt(newc,VrefDeb,Wrefdeb,WF,Angle);
       }
     }
     if(caredeb) {
@@ -4179,8 +4213,8 @@ Standard_EXPORT
       gacurve.Load(newc);
       GCPnts_AbscissaPoint GCP(gacurve,rabdist,Wreffin,WL);
       if(GCP.IsDone()) {
-       WL = GCP.Parameter();
-       goodext = GoodExt(newc, VrefFin, Wreffin,WL,Angle);
+        WL = GCP.Parameter();
+        goodext = GoodExt(newc, VrefFin, Wreffin,WL,Angle);
       }
     }
     if(carefin) {
@@ -4248,7 +4282,7 @@ Standard_EXPORT
     }
     MultMax = BSpline->Degree() - 2;
   }
-  // correction C2 ou C3 (si possible)
+  // correction C2 or C3 (if possible)
   CurveCleaner(BSpline, Abs(WL-WF)*1.e-4, 1);
   CurveCleaner(BSpline, Abs(WL-WF)*1.e-2, MultMax);
   Standard_Integer MultMin = Max(BSpline->Degree() - 4, 1);
@@ -4256,26 +4290,26 @@ Standard_EXPORT
     if( BSpline->Multiplicity(ii) > MultMax ) {
       Bof = BSpline->RemoveKnot(ii, MultMax, Abs(WL-WF)/10);
     }
-    // Voir C4
+    // See C4
     if( BSpline->Multiplicity(ii) > MultMin ) {
       Bof = BSpline->RemoveKnot(ii, MultMin, Abs(WL-WF)*1.e-4);
     }       
   }
-  // elspine periodique => BSpline Periodique
+  // elspine periodic => BSpline Periodic
   if(ES.IsPeriodic()) {
     if(!BSpline->IsPeriodic()) {
       BSpline->SetPeriodic();
       //modified by NIZNHY-PKV Fri Dec 10 12:20:22 2010ft
       if (iToApproxByC2) {
-       Bof = BSpline->RemoveKnot(1, MultMax, Abs(WL-WF)/10);
+        Bof = BSpline->RemoveKnot(1, MultMax, Abs(WL-WF)/10);
       }
       //Bof = BSpline->RemoveKnot(1, MultMax, Abs(WL-WF)/10);
       //modified by NIZNHY-PKV Mon Dec 13 14:12:54 2010t
     }
   }
   else { 
-    // Sinon faut il bouger les poles pour les adapter 
-    // aux nouvelles tangentes ?
+    // Otherwise is it necessary to move the poles to adapt 
+    // them to new tangents ?
     Standard_Boolean adjust = Standard_False; 
     gp_Pnt P1, P2;
     gp_Vec V1, V2;
@@ -4284,11 +4318,11 @@ Standard_EXPORT
     ES.FirstPointAndTgt(PDeb,VrefDeb);
     Standard_Real scaldeb = VrefDeb.Dot(V1);
     Standard_Real disdeb = PDeb.Distance(P1);
-    if((Abs(WF-LocalWF) < 1.e-12) && 
-       ((scaldeb <= 0.9999999) || disdeb >= tol)) {   
-      // Oui s'il n'y as pas eu de prolongement et que la tangente n'est pas
-      // la bonne.
-      adjust = Standard_True;
+    if((Abs(WF-LocalWF) < 1.e-12) &&
+      ((scaldeb <= 0.9999999) ||
+      disdeb >= tol)) {   
+        // Yes if there was no extension and the tangent is not the good one.
+        adjust = Standard_True;
     } 
     BSpline->D1(WL, P2, V2);
     V2.Normalize();
@@ -4296,9 +4330,10 @@ Standard_EXPORT
     Standard_Real scalfin = VrefFin.Dot(V2); 
     Standard_Real disfin = PFin.Distance(P2);
     if((Abs(WL-LocalWL) < 1.e-12) && 
-       ((scalfin <= 0.9999999) || disfin >= tol)) {
-      // de meme a la fin
-      adjust = Standard_True;
+      ((scalfin <= 0.9999999)||
+      disfin >= tol)) {
+        // the same at the end
+        adjust = Standard_True;
     }
     if(adjust) {
       GeomLib::AdjustExtremity(BSpline, PDeb, PFin, VrefDeb, VrefFin);
@@ -4311,12 +4346,12 @@ Standard_EXPORT
 
 //=======================================================================
 //function : cherche_face1
-//purpose  : cherche la face F differente de F1 dans la map.
-// La map  contient  les deux faces adjacentes a une edge 
+//purpose  : find face F different from F1 in the map.
+// The map contains two faces adjacent to an edge 
 //=======================================================================
 void ChFi3d_cherche_face1 (const TopTools_ListOfShape & map,
-                          const TopoDS_Face & F1,
-                          TopoDS_Face &  F)   
+  const TopoDS_Face & F1,
+  TopoDS_Face &  F)   
 { 
   TopoDS_Face Fcur;
   Standard_Boolean trouve=Standard_False;
@@ -4329,14 +4364,14 @@ void ChFi3d_cherche_face1 (const TopTools_ListOfShape & map,
 } 
 //=======================================================================
 //function : cherche_element
-//purpose  : cherche l'edge E  de F1 differente de E1 et contenant le vertex V
-// Vtx est l'autre vertex de E 
+//purpose  : find edge E of F1 other than E1 and containing vertex V
+// Vtx is the other vertex of E 
 //=======================================================================
 void ChFi3d_cherche_element(const TopoDS_Vertex & V,
-                           const TopoDS_Edge & E1,
-                           const TopoDS_Face & F1,
-                           TopoDS_Edge & E , 
-                           TopoDS_Vertex  & Vtx )
+  const TopoDS_Edge & E1,
+  const TopoDS_Face & F1,
+  TopoDS_Edge & E , 
+  TopoDS_Vertex  & Vtx )
 { 
   Standard_Integer ie; 
   TopoDS_Vertex V1,V2;
@@ -4350,32 +4385,32 @@ void ChFi3d_cherche_element(const TopoDS_Vertex & V,
       TopTools_IndexedMapOfShape  MapV;
       TopExp::MapShapes(Ecur, TopAbs_VERTEX, MapV);
       if (MapV.Extent()==2) {
-       V1 = TopoDS::Vertex (MapV(1));
-       V2 = TopoDS::Vertex (MapV(2));
-       if (V1.IsSame(V)) { 
-         Vtx=V2;
-         E=Ecur;
-         trouve=Standard_True;
-       }
-       else if (V2.IsSame(V)) {
-         Vtx=V1;
-         E=Ecur;
-         trouve=Standard_True;
-       }
+        V1 = TopoDS::Vertex (MapV(1));
+        V2 = TopoDS::Vertex (MapV(2));
+        if (V1.IsSame(V)) { 
+          Vtx=V2;
+          E=Ecur;
+          trouve=Standard_True;
+        }
+        else if (V2.IsSame(V)) {
+          Vtx=V1;
+          E=Ecur;
+          trouve=Standard_True;
+        }
       }
     }
   }
 } 
 //=======================================================================
 //function : cherche_edge
-//purpose  : cherche l'edge E  de F1 differente de la liste d'edges E1 et
-//            contenant le vertex V  Vtx est l'autre vertex de E 
+//purpose  : find edge E of F1 other than the list of edges E1 and
+//           containing vertex V  Vtx is the other vertex of E. 
 //=======================================================================
 void ChFi3d_cherche_edge(const TopoDS_Vertex & V,
-                           const  TopTools_Array1OfShape & E1,
-                           const TopoDS_Face & F1,
-                           TopoDS_Edge & E , 
-                           TopoDS_Vertex  & Vtx )
+  const  TopTools_Array1OfShape & E1,
+  const TopoDS_Face & F1,
+  TopoDS_Edge & E , 
+  TopoDS_Vertex  & Vtx )
 { 
   Standard_Integer ie,i; 
   TopoDS_Vertex V1,V2;
@@ -4388,24 +4423,24 @@ void ChFi3d_cherche_edge(const TopoDS_Vertex & V,
     Ecur=TopoDS::Edge (MapE(ie));
     same=Standard_False;
     for (i=E1.Lower();i<=E1.Upper() ;i++) {
-       if (Ecur.IsSame(E1.Value(i))) same=Standard_True;
+      if (Ecur.IsSame(E1.Value(i))) same=Standard_True;
     }
-      if (!same) {
+    if (!same) {
       TopTools_IndexedMapOfShape  MapV;
       TopExp::MapShapes(Ecur, TopAbs_VERTEX, MapV);
       if (MapV.Extent()==2) {
-       V1 = TopoDS::Vertex (MapV(1));
-       V2 = TopoDS::Vertex (MapV(2));
-       if (V1.IsSame(V)) { 
-         Vtx=V2;
-         E=Ecur;
-         trouve=Standard_True;
-       }
-       else if (V2.IsSame(V)) {
-         Vtx=V1;
-         E=Ecur;
-         trouve=Standard_True;
-       }
+        V1 = TopoDS::Vertex (MapV(1));
+        V2 = TopoDS::Vertex (MapV(2));
+        if (V1.IsSame(V)) { 
+          Vtx=V2;
+          E=Ecur;
+          trouve=Standard_True;
+        }
+        else if (V2.IsSame(V)) {
+          Vtx=V1;
+          E=Ecur;
+          trouve=Standard_True;
+        }
       }
     }
   }
@@ -4413,82 +4448,82 @@ void ChFi3d_cherche_edge(const TopoDS_Vertex & V,
 
 //=======================================================================
 //function : nbface
-//purpose  : calcule le nombre de faces communes a un vertex
+//purpose  : calculates the number of faces common to a vertex
 //           
 //=======================================================================
 Standard_Integer  ChFi3d_nbface (const TopTools_ListOfShape & mapVF )
 { Standard_Integer nface=0;     
-  TopTools_ListIteratorOfListOfShape ItF,JtF;
-  Standard_Integer  fj = 0;
-  for (ItF.Initialize(mapVF); ItF.More(); ItF.Next()) {
-    fj++;
-    Standard_Integer kf = 1;
-    const TopoDS_Shape& cur = ItF.Value();
-    for (JtF.Initialize(mapVF); JtF.More( )&&(kf<fj); JtF.Next(), kf++) {
-      if(cur.IsSame(JtF.Value())) break;
-    }
-    if(kf == fj) nface++;
+TopTools_ListIteratorOfListOfShape ItF,JtF;
+Standard_Integer  fj = 0;
+for (ItF.Initialize(mapVF); ItF.More(); ItF.Next()) {
+  fj++;
+  Standard_Integer kf = 1;
+  const TopoDS_Shape& cur = ItF.Value();
+  for (JtF.Initialize(mapVF); JtF.More( )&&(kf<fj); JtF.Next(), kf++) {
+    if(cur.IsSame(JtF.Value())) break;
   }
-  return nface;  
+  if(kf == fj) nface++;
+}
+return nface;  
 }
 
 //=======================================================================
 //function : edge_common_faces 
-//purpose  :  determine les deux faces partageant une edge.
-//            F1 =F2 si on a une arete de couur
+//purpose  :  determines two faces sharing an edge.
+//            F1 = F2 if there is an edge to parc
 //=======================================================================
 void ChFi3d_edge_common_faces (const TopTools_ListOfShape & mapEF,
-                               TopoDS_Face & F1,
-                               TopoDS_Face &  F2)   
+  TopoDS_Face & F1,
+  TopoDS_Face &  F2)   
 { TopTools_ListIteratorOfListOfShape It;
-  TopoDS_Face F;
-  Standard_Boolean trouve;
-  It.Initialize(mapEF);  
-  F1=TopoDS::Face(It.Value());
-  trouve=Standard_False;
-  for(It.Initialize(mapEF);It.More()&&!trouve;It.Next()) { 
-     F=TopoDS::Face (It.Value());
-     if (!F.IsSame(F1)) {
-       F2=F;trouve=Standard_True;
-     }
+TopoDS_Face F;
+Standard_Boolean trouve;
+It.Initialize(mapEF);  
+F1=TopoDS::Face(It.Value());
+trouve=Standard_False;
+for(It.Initialize(mapEF);It.More()&&!trouve;It.Next()) { 
+  F=TopoDS::Face (It.Value());
+  if (!F.IsSame(F1)) {
+    F2=F;trouve=Standard_True;
   }
-  if (!trouve) F2=F1;
+}
+if (!trouve) F2=F1;
 }
 
 /***********************************************************/
-// donne l'angle entre les edges E1 et E2 . Vtx est le vertex
-// commun aux edges
+// gives the angle between edges E1 and E2 . Vtx is the 
+// vertex common to the edges
 /************************************************************/
 Standard_Real ChFi3d_AngleEdge (const TopoDS_Vertex & Vtx,
-                                  const TopoDS_Edge&  E1,
-                                  const TopoDS_Edge &  E2)
+  const TopoDS_Edge&  E1,
+  const TopoDS_Edge &  E2)
 {   Standard_Real angle;
-    BRepAdaptor_Curve BCurv1(E1);
-    BRepAdaptor_Curve BCurv2(E2);
-    Standard_Real parE1,parE2;
-    gp_Vec dir1,dir2 ;
-    gp_Pnt P1,P2 ;
-    parE1=BRep_Tool::Parameter(Vtx,E1);
-    parE2=BRep_Tool::Parameter(Vtx,E2);
-    BCurv1.D1(parE1,P1,dir1);
-    BCurv2.D1(parE2,P2,dir2);
-    if (!Vtx.IsSame(TopExp::FirstVertex(E1))) dir1.Reverse();
-    if (!Vtx.IsSame(TopExp::FirstVertex(E2)))  dir2.Reverse();
-    angle=Abs(dir1.Angle(dir2));
-    return angle;
+BRepAdaptor_Curve BCurv1(E1);
+BRepAdaptor_Curve BCurv2(E2);
+Standard_Real parE1,parE2;
+gp_Vec dir1,dir2 ;
+gp_Pnt P1,P2 ;
+parE1=BRep_Tool::Parameter(Vtx,E1);
+parE2=BRep_Tool::Parameter(Vtx,E2);
+BCurv1.D1(parE1,P1,dir1);
+BCurv2.D1(parE2,P2,dir2);
+if (!Vtx.IsSame(TopExp::FirstVertex(E1))) dir1.Reverse();
+if (!Vtx.IsSame(TopExp::FirstVertex(E2)))  dir2.Reverse();
+angle=Abs(dir1.Angle(dir2));
+return angle;
 }
 
 //==================================================================
 // ChercheBordsLibres
-// determine si le vertex V1 a des aretes de bords libres
-// edgelibre1 et edgelibre2 .
-// On suppose qu'un sommet ne peut avoir que 2 aretes de bords libres
+// determines if vertex V1 has edges on free borders 
+// edgelibre1 and edgelibre2 .
+// It is supposed that a top can have only 2 edges on free borders
 //===================================================================
 void ChFi3d_ChercheBordsLibres(const  ChFiDS_Map & myVEMap,
-                              const TopoDS_Vertex & V1,
-                              Standard_Boolean & bordlibre,
-                              TopoDS_Edge & edgelibre1,
-                              TopoDS_Edge & edgelibre2) 
+  const TopoDS_Vertex & V1,
+  Standard_Boolean & bordlibre,
+  TopoDS_Edge & edgelibre1,
+  TopoDS_Edge & edgelibre2) 
 { 
   bordlibre=Standard_False;
   TopTools_ListIteratorOfListOfShape ItE,ItE1;
@@ -4513,14 +4548,14 @@ void ChFi3d_ChercheBordsLibres(const  ChFiDS_Map & myVEMap,
       nboccur=0;
       const TopoDS_Edge& cur = TopoDS::Edge(ItE.Value());
       if (!BRep_Tool::Degenerated(cur)&&!cur.IsSame(edgelibre1)) {
-       for (ItE1.Initialize(myVEMap(V1)); ItE1.More(); ItE1.Next()) {
-         const TopoDS_Edge& cur1 = TopoDS::Edge(ItE1.Value());
-         if (cur1.IsSame(cur)) nboccur++;
-       }
+        for (ItE1.Initialize(myVEMap(V1)); ItE1.More(); ItE1.Next()) {
+          const TopoDS_Edge& cur1 = TopoDS::Edge(ItE1.Value());
+          if (cur1.IsSame(cur)) nboccur++;
+        }
       }
       if (nboccur==1) {
-       edgelibre2=cur;
-       bordlibre=Standard_True;
+        edgelibre2=cur;
+        bordlibre=Standard_True;
       }
     }
   }
@@ -4528,11 +4563,11 @@ void ChFi3d_ChercheBordsLibres(const  ChFiDS_Map & myVEMap,
 
 //=======================================================================
 //function : NbNotDegeneratedEdges
-//purpose  : calcule le nb d'aretes non degenerees de la Map VEMap(Vtx)
-// Attention les aretes de jointures sont comptees deux fois
+//purpose  : calculate the number of non-degenerated edges of Map VEMap(Vtx)
+// Attention the edges of junctions are taken into account twice
 //=======================================================================
 Standard_Integer ChFi3d_NbNotDegeneratedEdges (const TopoDS_Vertex& Vtx,
-                                     const ChFiDS_Map& VEMap)
+  const ChFiDS_Map& VEMap)
 {
   TopTools_ListIteratorOfListOfShape ItE;
   Standard_Integer nba=VEMap(Vtx).Extent();
@@ -4545,11 +4580,11 @@ Standard_Integer ChFi3d_NbNotDegeneratedEdges (const TopoDS_Vertex& Vtx,
 
 //=======================================================================
 //function : NumberOfEdges
-//purpose  : calcule le nombre d'aretes arrivant au sommet Vtx
-// les aretes degenerees ne sont pas comptees
+//purpose  : calculate the number of edges arriving to the top Vtx
+// degenerated edges are not taken into account
 //=======================================================================
 Standard_Integer ChFi3d_NumberOfEdges(const TopoDS_Vertex& Vtx,
-                                     const ChFiDS_Map& VEMap)
+  const ChFiDS_Map& VEMap)
 {
   Standard_Integer nba;
   Standard_Boolean bordlibre;
@@ -4560,57 +4595,57 @@ Standard_Integer ChFi3d_NumberOfEdges(const TopoDS_Vertex& Vtx,
   else  nba=nba/2;
   return nba;
 }
-//=======================================================================
-//function : ChFi3d_cherche_vertex
-//purpose  : function cherche_vertex
-//           cherche le vertex commun entre deux edges 
-//=======================================================================
+//=====================================================
+// function cherche_vertex
+// finds common vertex between two edges 
+//=====================================================
+
 void ChFi3d_cherche_vertex (const TopoDS_Edge & E1,
-                           const TopoDS_Edge & E2,
-                           TopoDS_Vertex & vertex,
-                           Standard_Boolean & trouve)
+  const TopoDS_Edge & E2,
+  TopoDS_Vertex & vertex,
+  Standard_Boolean & trouve)
 { Standard_Integer i,j; 
-  TopoDS_Vertex Vcur1,Vcur2;
-  trouve=Standard_False;
-  TopTools_IndexedMapOfShape  MapV1,MapV2;
-  TopExp::MapShapes( E1,TopAbs_VERTEX,MapV1);
-  TopExp::MapShapes( E2,TopAbs_VERTEX,MapV2);
-  for ( i=1; i<= MapV1.Extent()&&!trouve; i++) {
-    TopoDS_Shape alocalshape = TopoDS_Shape (MapV1(i));
-    Vcur1=TopoDS::Vertex(alocalshape);
-//    Vcur1=TopoDS::Vertex(TopoDS_Shape (MapV1(i)));
-    for ( j=1; j<= MapV2.Extent()&&!trouve; j++) {
-      TopoDS_Shape aLocalShape = TopoDS_Shape (MapV2(j));
-      Vcur2=TopoDS::Vertex(aLocalShape);
-//      Vcur2=TopoDS::Vertex(TopoDS_Shape (MapV2(j)));
-      if (Vcur2.IsSame(Vcur1)) {
-       vertex=Vcur1;trouve=Standard_True;
-      }
+TopoDS_Vertex Vcur1,Vcur2;
+trouve=Standard_False;
+TopTools_IndexedMapOfShape  MapV1,MapV2;
+TopExp::MapShapes( E1,TopAbs_VERTEX,MapV1);
+TopExp::MapShapes( E2,TopAbs_VERTEX,MapV2);
+for ( i=1; i<= MapV1.Extent()&&!trouve; i++) {
+  TopoDS_Shape alocalshape = TopoDS_Shape (MapV1(i));
+  Vcur1=TopoDS::Vertex(alocalshape);
+  //    Vcur1=TopoDS::Vertex(TopoDS_Shape (MapV1(i)));
+  for ( j=1; j<= MapV2.Extent()&&!trouve; j++) {
+    TopoDS_Shape aLocalShape = TopoDS_Shape (MapV2(j));
+    Vcur2=TopoDS::Vertex(aLocalShape);
+    //      Vcur2=TopoDS::Vertex(TopoDS_Shape (MapV2(j)));
+    if (Vcur2.IsSame(Vcur1)) {
+      vertex=Vcur1;trouve=Standard_True;
     }
   }
+}
 }      
 //=======================================================================
 //function : ChFi3d_Couture
 //purpose  : determine si F a une arete de couture
 //=======================================================================
 void ChFi3d_Couture( const TopoDS_Face & F,
-                     Standard_Boolean & couture,
-                     TopoDS_Edge & edgecouture)
+  Standard_Boolean & couture,
+  TopoDS_Edge & edgecouture)
 {   TopoDS_Edge Ecur;
-    couture=Standard_False;
-    TopTools_IndexedMapOfShape  MapE1;
-    TopExp::MapShapes( F,TopAbs_EDGE,MapE1);
-    TopLoc_Location Loc;
-    Handle(Geom_Surface) Surf =BRep_Tool::Surface(F,Loc);
-    for ( Standard_Integer i=1; i<= MapE1.Extent()&&!couture; i++) {
-      TopoDS_Shape aLocalShape = TopoDS_Shape (MapE1(i));
-      Ecur=TopoDS::Edge(aLocalShape);
-//      Ecur=TopoDS::Edge(TopoDS_Shape (MapE1(i)));
-      if (BRep_Tool::IsClosed(Ecur,Surf,Loc)) {
-       couture=Standard_True;
-       edgecouture=Ecur;
-      
-    }
+couture=Standard_False;
+TopTools_IndexedMapOfShape  MapE1;
+TopExp::MapShapes( F,TopAbs_EDGE,MapE1);
+TopLoc_Location Loc;
+Handle(Geom_Surface) Surf =BRep_Tool::Surface(F,Loc);
+for ( Standard_Integer i=1; i<= MapE1.Extent()&&!couture; i++) {
+  TopoDS_Shape aLocalShape = TopoDS_Shape (MapE1(i));
+  Ecur=TopoDS::Edge(aLocalShape);
+  //      Ecur=TopoDS::Edge(TopoDS_Shape (MapE1(i)));
+  if (BRep_Tool::IsClosed(Ecur,Surf,Loc)) {
+    couture=Standard_True;
+    edgecouture=Ecur;
+  } 
+}
 }
 
 //=======================================================================
@@ -4618,37 +4653,37 @@ void ChFi3d_Couture( const TopoDS_Face & F,
 //purpose  : 
 //=======================================================================
 void ChFi3d_CoutureOnVertex( const TopoDS_Face & F,
-                            const TopoDS_Vertex & V,
-                            Standard_Boolean & couture,
-                            TopoDS_Edge & edgecouture)
+  const TopoDS_Vertex & V,
+  Standard_Boolean & couture,
+  TopoDS_Edge & edgecouture)
 {   TopoDS_Edge Ecur;
-    couture = Standard_False;
-    TopTools_IndexedMapOfShape  MapE1;
-    TopExp::MapShapes( F,TopAbs_EDGE,MapE1);
-    TopLoc_Location Loc;
-    Handle(Geom_Surface) Surf = BRep_Tool::Surface(F,Loc);
-    for ( Standard_Integer i=1; i <= MapE1.Extent(); i++) {
-      TopoDS_Shape aLocalShape = TopoDS_Shape (MapE1(i));
-      Ecur=TopoDS::Edge(aLocalShape);
-//      Ecur=TopoDS::Edge(TopoDS_Shape (MapE1(i)));
-      if (BRep_Tool::IsClosed(Ecur,Surf,Loc)) {
-       TopoDS_Vertex Vf, Vl;
-       TopExp::Vertices( Ecur, Vf, Vl );
-       if (Vf.IsSame(V) || Vl.IsSame(V))
-         {
-           couture = Standard_True;
-           edgecouture = Ecur;
-           break;
-         }
-      } 
+couture = Standard_False;
+TopTools_IndexedMapOfShape  MapE1;
+TopExp::MapShapes( F,TopAbs_EDGE,MapE1);
+TopLoc_Location Loc;
+Handle(Geom_Surface) Surf = BRep_Tool::Surface(F,Loc);
+for ( Standard_Integer i=1; i <= MapE1.Extent(); i++) {
+  TopoDS_Shape aLocalShape = TopoDS_Shape (MapE1(i));
+  Ecur=TopoDS::Edge(aLocalShape);
+  //      Ecur=TopoDS::Edge(TopoDS_Shape (MapE1(i)));
+  if (BRep_Tool::IsClosed(Ecur,Surf,Loc)) {
+    TopoDS_Vertex Vf, Vl;
+    TopExp::Vertices( Ecur, Vf, Vl );
+    if (Vf.IsSame(V) || Vl.IsSame(V))
+    {
+      couture = Standard_True;
+      edgecouture = Ecur;
+      break;
     }
+  } 
+}
 }
 //=======================================================================
 //function : ChFi3d_IsPseudoSeam
 //purpose  : 
 //=======================================================================
 Standard_Boolean ChFi3d_IsPseudoSeam( const TopoDS_Edge& E,
-                                    const TopoDS_Face& F )
+  const TopoDS_Face& F )
 {
   if (! BRep_Tool::IsClosed( E, F ))
     return Standard_False;
@@ -4658,19 +4693,19 @@ Standard_Boolean ChFi3d_IsPseudoSeam( const TopoDS_Edge& E,
   TopExp::Vertices( E, Vf, Vl );
   TopExp_Explorer Explo( F, TopAbs_EDGE );
   for (; Explo.More(); Explo.Next())
+  {
+    TopoDS_Edge Ecur = TopoDS::Edge( Explo.Current() );
+    if (! Ecur.IsSame(E))
     {
-      TopoDS_Edge Ecur = TopoDS::Edge( Explo.Current() );
-      if (! Ecur.IsSame(E))
-       {
-         TopExp::Vertices( Ecur, V1, V2 );
-         if ((V1.IsSame(Vf) || V1.IsSame(Vl) || V2.IsSame(Vf) || V2.IsSame(Vl)) &&
-             BRepTools::IsReallyClosed( Ecur, F ))
-           {
-             NeighborSeamFound = Standard_True;
-             break;
-           }
-       }
+      TopExp::Vertices( Ecur, V1, V2 );
+      if ((V1.IsSame(Vf) || V1.IsSame(Vl) || V2.IsSame(Vf) || V2.IsSame(Vl)) &&
+        BRepTools::IsReallyClosed( Ecur, F ))
+      {
+        NeighborSeamFound = Standard_True;
+        break;
+      }
     }
+  }
   return NeighborSeamFound;
 }
 
@@ -4709,7 +4744,7 @@ Standard_Boolean ChFi3d_IsSmooth( const Handle(Geom_Curve)& C )
   GeomLProp_CLProps LProp(C, 2, Resolution);
   gp_Pnt P1, P2;
   Standard_Integer Discretisation = 30;
-  
+
   gp_Vec PrevVec;
   Standard_Boolean prevVecFound = Standard_False;
   Standard_Integer intrvFound = 0;
@@ -4719,14 +4754,14 @@ Standard_Boolean ChFi3d_IsSmooth( const Handle(Geom_Curve)& C )
     for (ii = 1; ii <= Discretisation; ii++) {
       LProp.SetParameter(t);
       if (!LProp.IsTangentDefined())
-       return Standard_False;
+        return Standard_False;
       Curvature = Abs(LProp.Curvature());
       if (Curvature > Resolution) {
-       C->D0(t, P1);
-       LProp.CentreOfCurvature(P2);
-       PrevVec = gp_Vec(P1, P2);
-       prevVecFound = Standard_True;
-       break;
+        C->D0(t, P1);
+        LProp.CentreOfCurvature(P2);
+        PrevVec = gp_Vec(P1, P2);
+        prevVecFound = Standard_True;
+        break;
       }
       t += step;
     }
@@ -4744,28 +4779,28 @@ Standard_Boolean ChFi3d_IsSmooth( const Handle(Geom_Curve)& C )
     Standard_Real t = TI(intrv);
     Standard_Real step = (TI(intrv+1) - t) / Discretisation;
     for (ii = 1; ii <= Discretisation; ii++)
-      {         
-       LProp.SetParameter(t);
-       if (!LProp.IsTangentDefined())
-         return Standard_False;
-       Curvature = Abs(LProp.Curvature());
-       if (Curvature > Resolution)
-         {
-           C->D0(t, P1);
-           LProp.CentreOfCurvature(P2);
-           gp_Vec Vec(P1, P2);
-           Standard_Real Angle = PrevVec.Angle( Vec );
-           if (Angle > PI/3.)
-             return Standard_False;
-           Standard_Real Ratio = Vec.Magnitude() / PrevVec.Magnitude();
-           if (Ratio < 1.)
-             Ratio = 1. / Ratio;
-           if (Ratio > 2. && (intrv != nbintv || ii != Discretisation))
-             return Standard_False;
-           PrevVec = Vec;
-         }
-       t += step;
+    {   
+      LProp.SetParameter(t);
+      if (!LProp.IsTangentDefined())
+        return Standard_False;
+      Curvature = Abs(LProp.Curvature());
+      if (Curvature > Resolution)
+      {
+        C->D0(t, P1);
+        LProp.CentreOfCurvature(P2);
+        gp_Vec Vec(P1, P2);
+        Standard_Real Angle = PrevVec.Angle( Vec );
+        if (Angle > M_PI/3.)
+          return Standard_False;
+        Standard_Real Ratio = Vec.Magnitude() / PrevVec.Magnitude();
+        if (Ratio < 1.)
+          Ratio = 1. / Ratio;
+        if (Ratio > 2. && (intrv != nbintv || ii != Discretisation))
+          return Standard_False;
+        PrevVec = Vec;
       }
+      t += step;
+    }
   }
 
   return Standard_True;