0024778: Convertation of the generic classes to the non-generic. Part 9
authordln <dln@opencascade.com>
Fri, 28 Mar 2014 07:28:22 +0000 (11:28 +0400)
committerapn <apn@opencascade.com>
Fri, 4 Apr 2014 08:57:43 +0000 (12:57 +0400)
Generic classes:

 "GccIter_Circ2d2TanOn",
 "GccIter_Circ2d3Tan",
 "GccIter_Lin2d2Tan",
 "GccIter_Lin2dTanObl"

from "GccIter" package were converted to the non-generic classes and moved to the "Geom2dGcc" package. Names of this classes were changed to:

 "Geom2dGcc_Circ2d2TanOnIter",
 "Geom2dGcc_Circ2d3TanIter",
 "Geom2dGcc_Lin2d2TanIter",
 "Geom2dGcc_Lin2dTanOblIter".

And their internal classes:

 "GccIter_FunctionTanCuCuOnCu",
 "GccIter_FunctionTanCuCuCu",
 "GccIter_FunctionTanCirCu",
 "GccIter_FunctionTanCuCu",
 "GccIter_FunctionTanCuPnt",
 "GccIter_FunctionTanObl"

also converted to the non-generic and moved to the "Geom2dGcc" package(their declarations were moved to "Geom2dGcc.cdl").

Enumerations" Type1, Type2 and Type3 were moved to "Geom2dGcc.cdl".

Package "GccIter" was deleted.

53 files changed:
adm/UDLIST
src/GccIter/GccIter.cdl [deleted file]
src/GccIter/GccIter_Circ2d2TanOn.cdl [deleted file]
src/GccIter/GccIter_Circ2d2TanOn.gxx [deleted file]
src/GccIter/GccIter_Circ2d3Tan.cdl [deleted file]
src/GccIter/GccIter_Circ2d3Tan.gxx [deleted file]
src/GccIter/GccIter_FunctionTanCirCu.cdl [deleted file]
src/GccIter/GccIter_FunctionTanCirCu.gxx [deleted file]
src/GccIter/GccIter_FunctionTanCuCu.cdl [deleted file]
src/GccIter/GccIter_FunctionTanCuCu.gxx [deleted file]
src/GccIter/GccIter_FunctionTanCuCuCu.cdl [deleted file]
src/GccIter/GccIter_FunctionTanCuCuCu.gxx [deleted file]
src/GccIter/GccIter_FunctionTanCuCuOnCu.cdl [deleted file]
src/GccIter/GccIter_FunctionTanCuCuOnCu.gxx [deleted file]
src/GccIter/GccIter_FunctionTanCuPnt.cdl [deleted file]
src/GccIter/GccIter_FunctionTanCuPnt.gxx [deleted file]
src/GccIter/GccIter_FunctionTanObl.cdl [deleted file]
src/GccIter/GccIter_FunctionTanObl.gxx [deleted file]
src/GccIter/GccIter_Lin2d2Tan.cdl [deleted file]
src/GccIter/GccIter_Lin2d2Tan.gxx [deleted file]
src/GccIter/GccIter_Lin2dTanObl.cdl [deleted file]
src/GccIter/GccIter_Lin2dTanObl.gxx [deleted file]
src/Geom2dGcc/Geom2dGcc.cdl
src/Geom2dGcc/Geom2dGcc_Circ2d2TanOn.cdl
src/Geom2dGcc/Geom2dGcc_Circ2d2TanOn.cxx
src/Geom2dGcc/Geom2dGcc_Circ2d2TanOnIter.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_Circ2d2TanOnIter.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_Circ2d3Tan.cdl
src/Geom2dGcc/Geom2dGcc_Circ2d3Tan.cxx
src/Geom2dGcc/Geom2dGcc_Circ2d3TanIter.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_Circ2d3TanIter.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCirCu.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCirCu.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuCu.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuCu.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuCuCu.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuCuCu.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuCuOnCu.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuCuOnCu.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuPnt.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanCuPnt.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanObl.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_FunctionTanObl.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_Lin2d2Tan.cdl
src/Geom2dGcc/Geom2dGcc_Lin2d2Tan.cxx
src/Geom2dGcc/Geom2dGcc_Lin2d2TanIter.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_Lin2d2TanIter.cxx [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_Lin2dTanObl.cdl
src/Geom2dGcc/Geom2dGcc_Lin2dTanObl.cxx
src/Geom2dGcc/Geom2dGcc_Lin2dTanOblIter.cdl [new file with mode: 0644]
src/Geom2dGcc/Geom2dGcc_Lin2dTanOblIter.cxx [new file with mode: 0644]
src/QABugs/QABugs_17.cxx
src/TKGeomAlgo/PACKAGES

index 5c25272..fbe43e9 100644 (file)
@@ -134,7 +134,6 @@ p FilletSurf
 p GccAna
 p GccEnt
 p GccInt
-p GccIter
 p Geom2dAPI
 p Geom2dGcc
 p Geom2dHatch
diff --git a/src/GccIter/GccIter.cdl b/src/GccIter/GccIter.cdl
deleted file mode 100644 (file)
index ace7551..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
--- Created on: 1991-04-04
--- Created by: Remi GILET
--- Copyright (c) 1991-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.
-
-package GccIter
-
-    ---Purpose :
-    --           This package provides an implementation of analytics 
-    --           algorithms (using only non persistant entities) used 
-    --           to create 2d lines or circles with geometric constraints.
-    --
-    -- Exceptions :
-    --                     IsParallel which inherits DomainError. This exception 
-    --                     is raised in the class Lin2dTanObl when we want to 
-    --                     find the intersection point between the solution and 
-    --                     the second argument with a null angle.
-
-uses GccEnt,
-     GccInt,
-     GccAna,
-     StdFail,
-     gp,
-     math
-
-is
-
-enumeration Type1 is CuCuCu,CiCuCu,CiCiCu,CiLiCu,LiLiCu,LiCuCu;
-
-enumeration Type2 is CuCuOnCu,CiCuOnCu,LiCuOnCu,CuPtOnCu,
-                     CuCuOnLi,CiCuOnLi,LiCuOnLi,CuPtOnLi,
-                    CuCuOnCi,CiCuOnCi,LiCuOnCi,CuPtOnCi;
-
-enumeration Type3 is CuCu,CiCu;
-
-generic class FunctionTanCuCu;
-
-generic class FunctionTanCirCu;
-
-generic class FunctionTanCuCuCu;
-
-generic class FunctionTanCuCuOnCu;
-
-generic class FunctionTanCuPnt;
-
-generic class FunctionTanObl;
-
-generic class Lin2dTanObl, FuncTObl;
-    -- Create a 2d line TANgent to a 2d curve and OBLic to a 2d line.
-
-generic class Lin2d2Tan, FuncTCuCu, FuncTCirCu, FuncTCuPt;
-    -- Create a 2d line TANgent to 2 2d entities.
-
-generic class Circ2d3Tan, FuncTCuCuCu;
-    -- Create a 2d circle TANgent to 3 2d entities.
-
-generic class Circ2d2TanOn, FuncTCuCuOnCu;
-    -- Create a 2d circle TANgent to a 2d entity and centered ON a 2d 
-    -- entity (not a point).
-
-exception IsParallel inherits DomainError from Standard;
-
-end GccIter;
diff --git a/src/GccIter/GccIter_Circ2d2TanOn.cdl b/src/GccIter/GccIter_Circ2d2TanOn.cdl
deleted file mode 100644 (file)
index 1d4ef50..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
--- Created on: 1991-03-29
--- Created by: Remi GILET
--- Copyright (c) 1991-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.
-
-generic class Circ2d2TanOn from GccIter (
-    TheCurve          as any;
-    TheCurveTool      as any;  
-    TheQualifiedCurve as any) -- as QualifiedCurve from GccEnt
-                             --                  (TheCurve)
-
-       ---Purpose: This class implements the algorithms used to 
-       --          create 2d circles TANgent to 2 entities and 
-       --          having the center ON a curv.
-       --          The order of the tangency argument is always
-       --          QualifiedCirc, QualifiedLin, QualifiedCurv, Pnt2d. 
-       --          the arguments are :
-       --            - The two tangency arguments.
-       --            - The center line.
-       --            - The parameter for each tangency argument which 
-       --            is a curve.
-       --            - The tolerance.
-
--- inherits Entity from Standard
-
-uses Pnt2d            from gp,
-     Lin2d            from gp,
-     Circ2d           from gp,  
-     QualifiedCirc    from GccEnt,
-     QualifiedLin     from GccEnt,
-     Position         from GccEnt
-     
-raises NotDone    from StdFail
-
-private class FuncTCuCuOnCu instantiates FunctionTanCuCuOnCu from GccIter (
-                                                TheCurve,TheCurveTool);
-is
-
--- On a 2d line ..........................................................
-
-Create(Qualified1 : QualifiedCirc     ;
-       Qualified2 : TheQualifiedCurve ;
-       OnLine     : Lin2d             ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Param3     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d circle and a curve and 
-    --          having the center ON a 2d line.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : QualifiedLin      ;
-       Qualified2 : TheQualifiedCurve ;
-       OnLine     : Lin2d             ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Param3     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d line and a curve and 
-    --          having the center ON a 2d line.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Qualified2 : TheQualifiedCurve ;
-       OnLine     : Lin2d             ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Param3     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to two curves and 
-    --          having the center ON a 2d line.
-    --          Param1 is the initial guess on the first QualifiedCurv.
-    --          Param2 is the initial guess on the first QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Point2     : Pnt2d             ;
-       OnLine     : Lin2d             ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d point and a curve and 
-    --          having the center ON a 2d line.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
-
--- -- On a 2d Circle .....................................................
-
-Create(Qualified1 : QualifiedCirc     ;
-       Qualified2 : TheQualifiedCurve ;
-       OnCirc     : Circ2d            ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Param3     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d circle and a curve and 
-    --          having the center ON a 2d circle.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : QualifiedLin      ;
-       Qualified2 : TheQualifiedCurve ;
-       OnCirc     : Circ2d            ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Param3     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d line and a curve and 
-    --          having the center ON a 2d circle.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Qualified2 : TheQualifiedCurve ;
-       OnCirc     : Circ2d            ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Param3     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to two curves and 
-    --          having the center ON a 2d circle.
-    --          Param1 is the initial guess on the first QualifiedCurv.
-    --          Param2 is the initial guess on the first QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Point2     : Pnt2d             ;
-       OnCirc     : Circ2d            ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d point and a curve and 
-    --          having the center ON a 2d circle.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          Tolerance is used for the limit cases.
-
--- -- On a curve .....................................................
-
-Create(Qualified1 : QualifiedCirc     ;
-       Qualified2 : TheQualifiedCurve ;
-       OnCurv     : TheCurve          ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       ParamOn    : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d circle and a curve and 
-    --          having the center ON a 2d curve.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          ParamOn is the initial guess on the center curve OnCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : QualifiedLin      ;
-       Qualified2 : TheQualifiedCurve ;
-       OnCurve    : TheCurve          ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       ParamOn    : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d line and a curve and 
-    --          having the center ON a 2d curve.
-    --          Param2 is the initial guess on the curve QualifiedCurv.
-    --          ParamOn is the initial guess on the center curve OnCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Point2     : Pnt2d             ;
-       OnCurve    : TheCurve          ;
-       Param1     : Real              ;
-       ParamOn    : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to a 2d Point and a curve and 
-    --          having the center ON a 2d curve.
-    --          Param1 is the initial guess on the curve QualifiedCurv.
-    --          ParamOn is the initial guess on the center curve OnCurv.
-    --          Tolerance is used for the limit cases.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Qualified2 : TheQualifiedCurve ;
-       OnCurve    : TheCurve          ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       ParamOn    : Real              ;
-       Tolerance  : Real              ) returns Circ2d2TanOn from GccIter ;
-    ---Purpose: This method implements the algorithms used to 
-    --          create 2d circles TANgent to two curves and 
-    --          having the center ON a 2d curve.
-    --          Param1 is the initial guess on the first curve QualifiedCurv.
-    --          Param1 is the initial guess on the second curve QualifiedCurv.
-    --          ParamOn is the initial guess on the center curve OnCurv.
-    --          Tolerance is used for the limit cases.
-
--- -- ....................................................................
-
-IsDone(me) returns Boolean
-is static;
-    ---Purpose: This method returns True if the construction 
-    --          algorithm succeeded.
-
-ThisSolution(me) returns Circ2d 
-    ---Purpose: Returns the solution.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-WhichQualifier(me                                 ; 
-              Qualif1  : out Position from GccEnt;
-              Qualif2  : out Position from GccEnt)
-raises NotDone from StdFail
-is static;
-    -- It returns the informations about the qualifiers of the tangency 
-    -- arguments concerning the solution number Index.
-    -- It returns the real qualifiers (the qualifiers given to the 
-    -- constructor method in case of enclosed, enclosing and outside 
-    -- and the qualifiers computedin case of unqualified).
-
-Tangency1(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-    ---Purpose: Returns information about the tangency point between 
-    --          the result and the first argument.
-    --          ParSol is the intrinsic parameter of the point PntSol 
-    --          on the solution curv.
-    --          ParArg is the intrinsic parameter of the point PntSol 
-    --          on the argument curv.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-Tangency2(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-    ---Purpose: Returns information about the tangency point between 
-    --          the result and the second argument.
-    --          ParSol is the intrinsic parameter of the point PntSol 
-    --          on the solution curv.
-    --          ParArg is the intrinsic parameter of the point PntSol 
-    --          on the argument curv.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-CenterOn3 (me                       ;
-           ParArg        : out Real ;
-           PntSol        : out Pnt2d)
-    ---Purpose: Returns information about the center (on the curv) of the
-    --          result and the third argument.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-IsTheSame1(me) returns Boolean
-    -- Returns True if the solution is equal to the first argument.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-IsTheSame2(me) returns Boolean
-    -- Returns True if the solution is equal to the second argument.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-fields
-
-    WellDone : Boolean;
-    ---Purpose: True if the algorithm succeeded.
-
-    cirsol   : Circ2d from gp;
-    -- The solutions.
-
-    qualifier1 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    qualifier2 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    TheSame1 : Boolean;
-    ---Purpose: True if the solution and the first argument are the 
-    --          same in the tolerance of Tolerance.
-    --          False in the other cases.
-
-    TheSame2 : Boolean;
-    ---Purpose: True if the solution and the second argument are the 
-    --          same in the tolerance of Tolerance.
-    --          False in the other cases.
-
-    pnttg1sol   : Pnt2d;
-    ---Purpose: The tangency point between the solution and the first 
-    --          argument on the solution.
-
-    pnttg2sol   : Pnt2d;
-    ---Purpose: The tangency point between the solution and the second 
-    --          argument on the solution.
-
-    pntcen      : Pnt2d;
-    ---Purpose: The center point of the solution on the third argument.
-
-    par1sol   : Real;
-    ---Purpose: The parameter of the tangency point between the 
-    --          solution and the first argument on the solution.
-
-    par2sol   : Real;
-    ---Purpose: The parameter of the tangency point between the 
-    --          solution and the second argument on the solution.
-
-    pararg1   : Real;
-    ---Purpose: The parameter of the tangency point between the 
-    --          solution and the first argument on the first argument.
-
-    pararg2   : Real;
-    ---Purpose: The parameter of the tangency point between the 
-    --          solution and the second argument on the second argument.
-
-    parcen3   : Real;
-    ---Purpose: The parameter of the center point of the solution 
-    --          on the second argument.
-
-end Circ2d2TanOn;
diff --git a/src/GccIter/GccIter_Circ2d2TanOn.gxx b/src/GccIter/GccIter_Circ2d2TanOn.gxx
deleted file mode 100644 (file)
index 44454dd..0000000
+++ /dev/null
@@ -1,1297 +0,0 @@
-// Created on: 1991-12-13
-// Created by: Remi GILET
-// Copyright (c) 1991-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.
-
-//=========================================================================
-//   Creation d un cercle tangent a deux elements : Droite.               +
-//                                                  Cercle.               +
-//                                                  Point.                +
-//                                                  Courbes.              +
-//                        centre sur un troisieme : Droite.               +
-//                                                  Cercle.               +
-//                                                  Courbes.              +
-//=========================================================================
-
-#include <gp_Dir2d.hxx>
-#include <gp_Ax2d.hxx>
-#include <gp.hxx>
-#include <StdFail_NotDone.hxx>
-#include <GccEnt_BadQualifier.hxx>
-#include <math_FunctionSetRoot.hxx>
-#include <ElCLib.hxx>
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const GccEnt_QualifiedLin&  Qualified1 , 
-                        const TheQualifiedCurve&    Qualified2 , 
-                        const gp_Lin2d&             OnLine     ,
-                        const Standard_Real         Param1     ,
-                        const Standard_Real         Param2     ,
-                        const Standard_Real         Param3     ,
-                        const Standard_Real         Tolang     ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   Standard_Real Tol = Abs(Tolang);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() ||
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Dir2d dirx(1.,0.);
-   gp_Lin2d L1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = RealFirst();
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = RealFirst();
-   Umin(4) = 0.;
-   Umax(1) = RealLast();
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = RealLast();
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 1.e-15;
-   tol(2) = TheCurveTool::EpsX(Cu2,Tolang);
-   tol(3) = tol(1);   
-   tol(4) = tol(1);   
-   gp_Pnt2d point1 = ElCLib::Value(Param1,L1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = ElCLib::Value(Param3,OnLine);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(L1,Cu2,OnLine,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-//     gp_Vec2d Tan1,Tan2,Nor1,Nor2;
-     gp_Vec2d Tan1,Tan2;
-     ElCLib::D1(Ufirst(1),L1,point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     gp_Vec2d Tan3(OnLine.Direction().XY());
-     gp_Pnt2d point3(OnLine.Location().XY()+Ufirst(3)*Tan3.XY());
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle2;
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       Standard_Real pscal=point3.XY().Dot(gp_XY(-L1.Direction().Y(),
-                                       L1.Direction().X()));
-       if (Qualified1.IsUnqualified() ||
-          (Qualified1.IsOutside() && pscal <= 0.) ||
-          (Qualified1.IsEnclosed() && pscal >= 0.)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pnttg1sol = point1;
-          pararg1 = Ufirst(1);
-          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-          pnttg2sol = point2;
-          pararg2 = Ufirst(2);
-          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const TheQualifiedCurve& Qualified1 , 
-                           const TheQualifiedCurve& Qualified2 , 
-                           const gp_Lin2d&          OnLine     ,
-                           const Standard_Real               Param1     ,
-                           const Standard_Real               Param2     ,
-                           const Standard_Real               Param3     ,
-                           const Standard_Real               Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   TheCurve Cu1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = TheCurveTool::FirstParameter(Cu1);
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = RealFirst();
-   Umin(4) = 0.;
-   Umax(1) = TheCurveTool::LastParameter(Cu1);
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = RealLast();
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = 1.e-15;   
-   tol(4) = Tol/10.;   
-   gp_Pnt2d point1 = TheCurveTool::Value(Cu1,Param1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = ElCLib::Value(Param3,OnLine);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(Cu1,Cu2,OnLine,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     gp_Vec2d Tan1,Tan2;
-     TheCurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     gp_Vec2d Tan3(OnLine.Direction().XY());
-     gp_Pnt2d point3(OnLine.Location().XY()+Ufirst(3)*Tan3.XY());
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle1,angle2;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        angle1 = Vec1.Angle(Tan1);
-       }
-       else { angle1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       if (Qualified1.IsUnqualified()||
-          (Qualified1.IsEnclosing()&&angle1<=0.)||
-          (Qualified1.IsOutside() && angle1 >= 0.) ||
-          (Qualified1.IsEnclosed() && angle1 <= 0.)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pnttg1sol = point1;
-          pararg1 = Ufirst(1);
-          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-          pnttg2sol = point2;
-          pararg2 = Ufirst(2);
-          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const TheQualifiedCurve& Qualified1 , 
-                        const gp_Pnt2d&          Point2     , 
-                        const gp_Lin2d&          OnLine     ,
-                        const Standard_Real      Param1     ,
-                        const Standard_Real      Param2     ,
-                        const Standard_Real      Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   TheCurve Cu1 = Qualified1.Qualified();
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = TheCurveTool::FirstParameter(Cu1);
-   Umin(2) = RealFirst();
-   Umin(3) = 0.;
-   Umax(1) = TheCurveTool::LastParameter(Cu1);
-   Umax(2) = RealLast();
-   Umax(3) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   tol(2) = 1.e-15;
-   tol(3) = Tol/10.;
-   gp_Pnt2d point1 = TheCurveTool::Value(Cu1,Param1);
-   gp_Pnt2d point3 = ElCLib::Value(Param2,OnLine);
-   Ufirst(3) = (point3.Distance(Point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(Cu1,Point2,OnLine,Ufirst(3));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     gp_Pnt2d point1,point3;
-     gp_Vec2d Tan1,Tan3;
-     TheCurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
-     ElCLib::D1(Ufirst(2),OnLine,point3,Tan3);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(Point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan1 = Tan1.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real angle1;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        angle1 = Vec1.Angle(Tan1);
-       }
-       else { angle1 = 0.; }
-       if (Qualified1.IsUnqualified()||
-          (Qualified1.IsEnclosing()&&angle1<=0.)||
-          (Qualified1.IsOutside() && angle1 >= 0.) ||
-          (Qualified1.IsEnclosed() && angle1 <= 0.)) {
-        qualifier1 = Qualified1.Qualifier();
-        qualifier2 = GccEnt_noqualifier;
-        pnttg1sol = point1;
-        pararg1 = Ufirst(1);
-        par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-        pnttg2sol = Point2;
-        pararg2 = Ufirst(2);
-        par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-        pntcen  = point3;
-        parcen3 = Ufirst(3);
-        WellDone = Standard_True;
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const GccEnt_QualifiedCirc& Qualified1 , 
-                        const TheQualifiedCurve&    Qualified2 , 
-                        const gp_Lin2d&             OnLine     ,
-                        const Standard_Real         Param1     ,
-                        const Standard_Real         Param2     ,
-                        const Standard_Real         Param3     ,
-                        const Standard_Real         Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   gp_Circ2d C1 = Qualified1.Qualified();
-   Standard_Real R1 = C1.Radius();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = RealFirst();
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = RealFirst();
-   Umin(4) = 0.;
-   Umax(1) = RealLast();
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = RealLast();
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = 1.e-15;
-   tol(4) = Tol/10.;
-   gp_Pnt2d point1 = ElCLib::Value(Param1,C1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = ElCLib::Value(Param3,OnLine);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(C1,Cu2,OnLine,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-//     gp_Vec2d Tan1,Tan2,Nor1,Nor2;
-     gp_Vec2d Tan1,Tan2,Nor2;
-     ElCLib::D2(Ufirst(1),C1,point1,Tan1,Nor2);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-#ifdef DEB
-     gp_Vec2d Tan3(OnLine.Direction().XY());
-#else
-     OnLine.Direction().XY();
-#endif
-     point3 = ElCLib::Value(Ufirst(1),OnLine);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle2;
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       Standard_Real dist = C1.Location().Distance(point3);
-       Standard_Real Rsol = cirsol.Radius();
-       if (Qualified1.IsUnqualified() || 
-          (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
-          (Qualified1.IsOutside() && dist >= Rsol) ||
-          (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pnttg1sol = point1;
-          pararg1 = Ufirst(1);
-          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-          pnttg2sol = point2;
-          pararg2 = Ufirst(2);
-          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const GccEnt_QualifiedCirc& Qualified1 , 
-                        const TheQualifiedCurve&    Qualified2 , 
-                        const gp_Circ2d&            OnCirc     ,
-                        const Standard_Real         Param1     ,
-                        const Standard_Real         Param2     ,
-                        const Standard_Real         Param3     ,
-                        const Standard_Real         Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   gp_Circ2d C1 = Qualified1.Qualified();
-   Standard_Real R1 = C1.Radius();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = RealFirst();
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = RealFirst();
-   Umin(4) = 0.;
-   Umax(1) = RealLast();
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = RealLast();
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = 2.e-15*M_PI;
-   tol(4) = Tol/10.;
-   gp_Pnt2d point1 = ElCLib::Value(Param1,C1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = ElCLib::Value(Param3,OnCirc);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(C1,Cu2,OnCirc,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-//     gp_Vec2d Tan1,Tan2,Nor1;
-     gp_Vec2d Tan1,Tan2;
-     ElCLib::D1(Ufirst(1),C1,point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-#ifdef DEB
-     gp_Vec2d Tan3(-Sin(Ufirst(3)),Cos(Ufirst(3)));
-#endif
-     point3 = ElCLib::Value(Ufirst(3),OnCirc);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle2;
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       Standard_Real dist = C1.Location().Distance(point3);
-       Standard_Real Rsol = cirsol.Radius();
-       if (Qualified1.IsUnqualified() || 
-          (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
-          (Qualified1.IsOutside() && dist >= Rsol) ||
-          (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pnttg1sol = point1;
-          pararg1 = Ufirst(1);
-          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-          pnttg2sol = point2;
-          pararg2 = Ufirst(2);
-          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const GccEnt_QualifiedLin&  Qualified1 , 
-                        const TheQualifiedCurve&    Qualified2 , 
-                        const gp_Circ2d&            OnCirc     ,
-                        const Standard_Real         Param1     ,
-                        const Standard_Real         Param2     ,
-                        const Standard_Real         Param3     ,
-                        const Standard_Real         Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() ||
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   gp_Lin2d L1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = RealFirst();
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = RealFirst();
-   Umin(4) = 0.;
-   Umax(1) = RealLast();
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = RealLast();
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 1.e-15;
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = 2.e-15*M_PI;
-   tol(4) = Tol/10.;
-   gp_Pnt2d point1 = ElCLib::Value(Param1,L1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = ElCLib::Value(Param3,OnCirc);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(L1,Cu2,OnCirc,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     gp_Pnt2d point1,point2;
-     gp_Vec2d Tan1,Tan2;
-     ElCLib::D1(Ufirst(1),L1,point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-#ifdef DEB
-     gp_Vec2d Tan3(-Sin(Ufirst(3)),Cos(Ufirst(3)));
-#endif
-     point3 = ElCLib::Value(Ufirst(3),OnCirc);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle2;
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       Standard_Real pscal=point3.XY().Dot(gp_XY(-L1.Direction().Y(),
-                                       L1.Direction().X()));
-       if (Qualified1.IsUnqualified() ||
-          (Qualified1.IsOutside() && pscal <= 0.) ||
-          (Qualified1.IsEnclosed() && pscal >= 0.)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pnttg1sol = point1;
-          pararg1 = Ufirst(1);
-          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-          pnttg2sol = point2;
-          pararg2 = Ufirst(2);
-          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const TheQualifiedCurve& Qualified1 , 
-                           const TheQualifiedCurve& Qualified2 , 
-                           const gp_Circ2d&         OnCirc     ,
-                           const Standard_Real               Param1     ,
-                           const Standard_Real               Param2     ,
-                           const Standard_Real               Param3     ,
-                           const Standard_Real               Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   TheCurve Cu1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = TheCurveTool::FirstParameter(Cu1);
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = RealFirst();
-   Umin(4) = 0.;
-   Umax(1) = TheCurveTool::LastParameter(Cu1);
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = RealLast();
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = 2.e-15*M_PI;
-   tol(4) = Tol/10.;
-   gp_Pnt2d point1 = TheCurveTool::Value(Cu1,Param1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   Standard_Real R1 = OnCirc.Radius();
-   gp_Pnt2d point3(OnCirc.Location().XY()+R1*gp_XY(Cos(Param3),Sin(Param3)));
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(Cu1,Cu2,OnCirc,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-//     gp_Vec2d Tan1,Tan2,Nor1;
-     gp_Vec2d Tan1,Tan2;
-     TheCurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-#ifdef DEB
-     gp_Vec2d Tan3(-Sin(Ufirst(3)),Cos(Ufirst(3)));
-#endif
-     point3 = gp_Pnt2d(OnCirc.Location().XY()+
-                      R1*gp_XY(Cos(Ufirst(3)),Sin(Ufirst(3))));
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle1,angle2;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        angle1 = Vec1.Angle(Tan1);
-       }
-       else { angle1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       if (Qualified1.IsUnqualified()||
-          (Qualified1.IsEnclosing()&&angle1<=0.)||
-          (Qualified1.IsOutside() && angle1 >= 0.) ||
-          (Qualified1.IsEnclosed() && angle1 <= 0.)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pararg1 = Ufirst(1);
-          par1sol = 0.;
-          pnttg1sol = point1;
-          pararg2 = Ufirst(2);
-          pnttg2sol = point2;
-          par2sol = pnttg2sol.Distance(pnttg1sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const TheQualifiedCurve& Qualified1 ,
-                        const gp_Pnt2d&          Point2     ,
-                        const gp_Circ2d&         OnCirc     ,
-                        const Standard_Real      Param1     ,
-                        const Standard_Real      Param2     ,
-                        const Standard_Real      Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   TheCurve Cu1 = Qualified1.Qualified();
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = TheCurveTool::FirstParameter(Cu1);
-   Umin(2) = RealFirst();
-   Umin(3) = 0.;
-   Umax(1) = TheCurveTool::LastParameter(Cu1);
-   Umax(2) = RealLast();
-   Umax(3) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   tol(2) = 2.e-15*M_PI;
-   tol(3) = Tol/10.;
-   gp_Pnt2d point1 = TheCurveTool::Value(Cu1,Param1);
-   gp_Pnt2d point3 = ElCLib::Value(Param2,OnCirc);
-   Ufirst(3) = (point3.Distance(Point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(Cu1,Point2,OnCirc,Ufirst(3));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     gp_Pnt2d point1,point3;
-     gp_Vec2d Tan1,Tan3;
-     TheCurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
-     ElCLib::D1(Ufirst(2),OnCirc,point3,Tan3);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(Point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan1 = Tan1.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real angle1;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        angle1 = Vec1.Angle(Tan1);
-       }
-       else { angle1 = 0.; }
-       if (Qualified1.IsUnqualified()||
-          (Qualified1.IsEnclosing()&&angle1<=0.)||
-          (Qualified1.IsOutside() && angle1 >= 0.) ||
-          (Qualified1.IsEnclosed() && angle1 <= 0.)) {
-        qualifier1 = Qualified1.Qualifier();
-        qualifier2 = GccEnt_noqualifier;
-        pnttg1sol = point1;
-        pararg1 = Ufirst(1);
-        par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-        pnttg2sol = Point2;
-        pararg2 = 0.;
-        par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-        pntcen  = point3;
-        parcen3 = Ufirst(3);
-        WellDone = Standard_True;
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const TheQualifiedCurve& Qualified1 , 
-                        const TheQualifiedCurve& Qualified2 , 
-                        const TheCurve&          OnCurv     ,
-                        const Standard_Real               Param1     ,
-                        const Standard_Real               Param2     ,
-                        const Standard_Real               Param3     ,
-                        const Standard_Real               Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Dir2d dirx(1.,0.);
-   TheCurve Cu1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = TheCurveTool::FirstParameter(Cu1);
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = TheCurveTool::FirstParameter(OnCurv);
-   Umin(4) = 0.;
-   Umax(1) = TheCurveTool::LastParameter(Cu1);
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = TheCurveTool::LastParameter(OnCurv);
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = TheCurveTool::EpsX(OnCurv,Abs(Tolerance));
-   tol(4) = Tol/10.;
-   gp_Pnt2d point1 = TheCurveTool::Value(Cu1,Param1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = TheCurveTool::Value(OnCurv,Param3);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(Cu1,Cu2,OnCurv,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     gp_Vec2d Tan1,Tan2,Tan3;
-     TheCurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     TheCurveTool::D1(OnCurv,Ufirst(3),point3,Tan3);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle1,angle2;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        angle1 = Vec1.Angle(Tan1);
-       }
-       else { angle1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       if (Qualified1.IsUnqualified()||
-          (Qualified1.IsEnclosing()&&angle1<=0.)||
-          (Qualified1.IsOutside() && angle1 >= 0.) ||
-          (Qualified1.IsEnclosed() && angle1 <= 0.)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pararg1 = Ufirst(1);
-          par1sol = 0.;
-          pnttg1sol = point1;
-          pararg2 = Ufirst(2);
-          pnttg2sol = point2;
-            par2sol = pnttg2sol.Distance(pnttg1sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const GccEnt_QualifiedCirc& Qualified1 , 
-                        const TheQualifiedCurve&       Qualified2 , 
-                        const TheCurve&                OnCurv     ,
-                        const Standard_Real                     Param1     ,
-                        const Standard_Real                     Param2     ,
-                        const Standard_Real                     ParamOn    ,
-                        const Standard_Real                     Tolerance     ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Circ2d C1 = Qualified1.Qualified();
-   Standard_Real R1 = C1.Radius();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = RealFirst();
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = TheCurveTool::FirstParameter(OnCurv);
-   Umin(4) = 0.;
-   Umax(1) = RealLast();
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = TheCurveTool::LastParameter(OnCurv);
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = ParamOn;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = TheCurveTool::EpsX(OnCurv,Abs(Tolerance));
-   tol(4) = Tol/10.;;
-   gp_Pnt2d point1 = ElCLib::Value(Param1,C1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = TheCurveTool::Value(OnCurv,ParamOn);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(C1,Cu2,OnCurv,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     gp_Vec2d Tan1,Tan2,Tan3;
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     TheCurveTool::D1(OnCurv,Ufirst(3),point3,Tan3);
-     ElCLib::D1(Ufirst(1),C1,point1,Tan1);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       gp_Dir2d dirx(1.,0.);
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1.XY(),point3.XY());
-       gp_Vec2d Vec2(point2.XY(),point3.XY());
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle2;
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       Standard_Real dist = C1.Location().Distance(point3);
-       Standard_Real Rsol = cirsol.Radius();
-       if (Qualified1.IsUnqualified() || 
-          (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
-          (Qualified1.IsOutside() && dist >= Rsol) ||
-          (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pnttg1sol = point1;
-          pararg1 = Ufirst(1);
-          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-          pnttg2sol = point2;
-          pararg2 = Ufirst(2);
-          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const GccEnt_QualifiedLin&  Qualified1 , 
-                        const TheQualifiedCurve&       Qualified2 , 
-                        const TheCurve&                OnCurv     ,
-                        const Standard_Real                     Param1     ,
-                        const Standard_Real                     Param2     ,
-                        const Standard_Real                     ParamOn    ,
-                        const Standard_Real                     Tolerance  ) {
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   parcen3 = 0.;
-
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() ||
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Standard_Real Tol = Abs(Tolerance);
-   gp_Dir2d dirx(1.,0.);
-   gp_Lin2d L1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   math_Vector Umin(1,4);
-   math_Vector Umax(1,4);
-   math_Vector Ufirst(1,4);
-   math_Vector tol(1,4);
-   Umin(1) = RealFirst();
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = TheCurveTool::FirstParameter(OnCurv);
-   Umin(4) = 0.;
-   Umax(1) = RealLast();
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = TheCurveTool::LastParameter(OnCurv);
-   Umax(4) = RealLast();
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = ParamOn;
-   tol(1) = 1.e-15;
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = TheCurveTool::EpsX(OnCurv,Abs(Tolerance));
-   tol(4) = Tol/10.;
-   gp_Pnt2d point1 = ElCLib::Value(Param1,L1);
-   gp_Pnt2d point2 = TheCurveTool::Value(Cu2,Param2);
-   gp_Pnt2d point3 = TheCurveTool::Value(OnCurv,ParamOn);
-   Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
-   GccIter_FuncTCuCuOnCu Func(L1,Cu2,OnCurv,Ufirst(4));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   Func.Value(Ufirst,Umin);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     gp_Vec2d Tan1,Tan2,Tan3;
-     ElCLib::D1(Ufirst(1),L1,point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     TheCurveTool::D1(OnCurv,Ufirst(3),point3,Tan3);
-     Standard_Real dist1 = point3.Distance(point1);
-     Standard_Real dist2 = point3.Distance(point2);
-     if ( Abs(dist1-dist2)/2. <= Tol) {
-       cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,point3);
-       gp_Vec2d Vec2(point2,point3);
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real angle2;
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        angle2 = Vec2.Angle(Tan2);
-       }
-       else { angle2 = 0.; }
-       Standard_Real pscal=point3.XY().Dot(gp_XY(-L1.Direction().Y(),
-                                       L1.Direction().X()));
-       if (Qualified1.IsUnqualified() ||
-          (Qualified1.IsOutside() && pscal <= 0.) ||
-          (Qualified1.IsEnclosed() && pscal >= 0.)) {
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing()&&angle2<=0.)||
-            (Qualified2.IsOutside() && angle2 >= 0) ||
-            (Qualified2.IsEnclosed() && angle2 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pnttg1sol = point1;
-          pararg1 = Ufirst(1);
-          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-          pnttg2sol = point2;
-          pararg2 = Ufirst(2);
-          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-          pntcen  = point3;
-          parcen3 = Ufirst(3);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d2TanOn::
-   GccIter_Circ2d2TanOn (const TheQualifiedCurve&    Qualified1 ,
-                        const gp_Pnt2d&             Point2     ,
-                        const TheCurve&             OnCurv     ,
-                        const Standard_Real                  Param1     ,
-                        const Standard_Real                  ParamOn    ,
-                        const Standard_Real                  Tolerance  ) 
-{
-  TheSame1 = Standard_False;
-  TheSame2 = Standard_False;
-  par1sol = 0.;
-  par2sol = 0.;
-  pararg1 = 0.;
-  pararg2 = 0.;
-  parcen3 = 0.;
-  
-  WellDone = Standard_False;
-  if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-       Qualified1.IsOutside() || Qualified1.IsUnqualified())) {
-    GccEnt_BadQualifier::Raise();
-      return;
-    }
-  Standard_Real Tol = Abs(Tolerance);
-  gp_Dir2d dirx(1.,0.);
-  TheCurve Cu1 = Qualified1.Qualified();
-  math_Vector Umin(1,3);
-  math_Vector Umax(1,3);
-  math_Vector Ufirst(1,3);
-  math_Vector tol(1,3);
-  Umin(1) = TheCurveTool::FirstParameter(Cu1);
-  Umin(2) = RealFirst();
-  Umin(3) = TheCurveTool::FirstParameter(OnCurv);
-  Umax(1) = TheCurveTool::LastParameter(Cu1);
-  Umax(2) = RealLast();
-  Umax(3) = TheCurveTool::LastParameter(OnCurv);
-  Ufirst(1) = Param1;
-  Ufirst(2) = ParamOn;
-  tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-  tol(2) = TheCurveTool::EpsX(OnCurv,Abs(Tolerance));
-  tol(3) = Tol/10.;
-  gp_Pnt2d point1 = TheCurveTool::Value(Cu1,Param1);
-  gp_Pnt2d point3 = TheCurveTool::Value(OnCurv,ParamOn);
-  Ufirst(3) = (point3.Distance(Point2)+point3.Distance(point1))/2.;
-  GccIter_FuncTCuCuOnCu Func(Cu1,Point2,OnCurv,Ufirst(3));
-  math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-  Func.Value(Ufirst,Umin);
-  if (Root.IsDone()) {
-    Root.Root(Ufirst);
-//    gp_Vec2d Tan1,Tan2,Tan3;
-    gp_Vec2d Tan1,Tan3;
-    TheCurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
-    TheCurveTool::D1(OnCurv,Ufirst(3),point3,Tan3);
-    Standard_Real dist1 = point3.Distance(point1);
-    Standard_Real dist2 = point3.Distance(Point2);
-    if ( Abs(dist1-dist2)/2. <= Tol) {
-      cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
-      Standard_Real normetan1 = Tan1.Magnitude();
-      gp_Vec2d Vec1(point1,point3);
-      Standard_Real normevec1 = Vec1.Magnitude();
-      Standard_Real angle1;
-      if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-       angle1 = Vec1.Angle(Tan1);
-      }
-      else { angle1 = 0.; }
-      if (Qualified1.IsUnqualified()||
-         (Qualified1.IsEnclosing()&&angle1<=0.)||
-         (Qualified1.IsOutside() && angle1 >= 0.) ||
-         (Qualified1.IsEnclosed() && angle1 <= 0.)) {
-       qualifier1 = Qualified1.Qualifier();
-       qualifier2 = GccEnt_noqualifier;
-       pnttg1sol = point1;
-       pararg1 = Ufirst(1);
-       par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
-       pnttg2sol = Point2;
-       pararg2 = 0.;
-       par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
-       pntcen  = point3;
-       parcen3 = Ufirst(3);
-       WellDone = Standard_True;
-      }
-    }
-  }
-}
-
-Standard_Boolean GccIter_Circ2d2TanOn::
-  IsDone () const{ return WellDone; }
-
-gp_Circ2d GccIter_Circ2d2TanOn::
-  ThisSolution () const{ return cirsol; }
-
-void GccIter_Circ2d2TanOn:: 
-  WhichQualifier (GccEnt_Position& Qualif1  ,
-                 GccEnt_Position& Qualif2  ) const
-{
-  if (!WellDone) { StdFail_NotDone::Raise(); }
-  else {
-    Qualif1 = qualifier1;
-    Qualif2 = qualifier2;
-  }
-}
-
-void GccIter_Circ2d2TanOn:: 
-  Tangency1 (Standard_Real&      ParSol         ,
-            Standard_Real&      ParArg         ,
-            gp_Pnt2d&  PntSol         ) const
-{
-  if (!WellDone) { StdFail_NotDone::Raise(); }
-  else {
-    if (TheSame1 == 0) {
-      ParSol = 0;
-      ParArg = 0;
-      PntSol = pnttg1sol;
-    }
-    else { StdFail_NotDone::Raise(); }
-  }
-}
-
-void GccIter_Circ2d2TanOn:: 
-  Tangency2 (Standard_Real&      ParSol         ,
-            Standard_Real&      ParArg         ,
-            gp_Pnt2d&  PntSol         ) const
-{
-  if (!WellDone) { StdFail_NotDone::Raise(); }
-  else {
-    ParSol = 0;
-    ParArg = 0;
-    PntSol = pnttg2sol;
-  }
-}
-
-void GccIter_Circ2d2TanOn::
-  CenterOn3 (Standard_Real&      ParArg         ,
-            gp_Pnt2d&  PntSol         ) const
-{
-  if (!WellDone) { StdFail_NotDone::Raise(); }
-  else {
-    ParArg = 0;
-    PntSol = pntcen;
-  }
-}
-
-Standard_Boolean GccIter_Circ2d2TanOn::
-  IsTheSame1 () const
-{
-  if (!WellDone) StdFail_NotDone::Raise();
-
-  if (TheSame1 == 0) 
-    return Standard_False;
-  return Standard_True;
-}
-
-
-Standard_Boolean GccIter_Circ2d2TanOn::
-  IsTheSame2 () const
-{
-  if (!WellDone) StdFail_NotDone::Raise();
-  return Standard_False;
-}
diff --git a/src/GccIter/GccIter_Circ2d3Tan.cdl b/src/GccIter/GccIter_Circ2d3Tan.cdl
deleted file mode 100644 (file)
index 79b5c23..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
--- Created on: 1991-03-29
--- Created by: Remi GILET
--- Copyright (c) 1991-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.
-
-generic class Circ2d3Tan from GccIter (
-    TheCurve          as any;
-    TheCurveTool      as any; -- as CurveTool from GccInt (TheCurve)
-    TheQualifiedCurve as any) -- as QualifiedCurve from GccEnt
-                             --                  (TheCurve)
-
-       ---Purpose: This class implements the algorithms used to 
-       --          create 2d circles tangent to 3 points/lines/circles/
-       --          curves with one curve or more.
-       --          The arguments of all construction methods are :
-       --             - The three qualifiied elements for the 
-       --             tangency constrains (QualifiedCirc, QualifiedLine,
-       --             Qualifiedcurv, Points).
-       --             - A parameter for each QualifiedCurv.
-
--- inherits Entity from Standard
-
-uses Pnt2d            from gp,
-     Lin2d            from gp, 
-     Circ2d           from gp,
-     QualifiedCirc    from GccEnt,
-     QualifiedLin     from GccEnt,
-     Position         from GccEnt
-
-raises NotDone    from StdFail
-
-private class FuncTCuCuCu instantiates FunctionTanCuCuCu from GccIter (
-                                           TheCurve,TheCurveTool);
-is
-
-Create(Qualified1 : QualifiedCirc from GccEnt ;
-       Qualified2 : QualifiedCirc from GccEnt ;
-       Qualified3 : TheQualifiedCurve            ;
-       Param1     : Real                         ;
-       Param2     : Real                         ;
-       Param3     : Real                         ;
-       Tolerance  : Real                         ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to 2 circles and a curve.
-
-Create(Qualified1 : QualifiedCirc from GccEnt ;
-       Qualified2 : TheQualifiedCurve            ;
-       Qualified3 : TheQualifiedCurve            ;
-       Param1     : Real                         ;
-       Param2     : Real                         ;
-       Param3     : Real                         ;
-       Tolerance  : Real                         )
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to a circle and 2 curves.
-
-Create(Qualified1 : QualifiedCirc from GccEnt ;
-       Qualified2 : QualifiedLin  from GccEnt ;
-       Qualified3 : TheQualifiedCurve            ;
-       Param1     : Real                         ;
-       Param2     : Real                         ;
-       Param3     : Real                         ;
-       Tolerance  : Real                         ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to a circle and a line and
-       --          a curve.
-
-Create(Qualified1 : QualifiedCirc     from GccEnt ;
-       Qualified2 : TheQualifiedCurve                ;
-       Point3     : Pnt2d                            ;
-       Param1     : Real                             ;
-       Param2     : Real                             ;
-       Tolerance  : Real                             ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to a circle and a point and
-       --          a curve.
-
-Create(Qualified1 : QualifiedLin      from GccEnt ;
-       Qualified2 : QualifiedLin      from GccEnt ;
-       Qualified3 : TheQualifiedCurve                ;
-       Param1     : Real                             ;
-       Param2     : Real                             ;
-       Param3     : Real                             ;
-       Tolerance  : Real                             ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to 2 lines and a curve.
-
-Create(Qualified1 : QualifiedLin      from GccEnt ;
-       Qualified2 : TheQualifiedCurve                ;
-       Qualified3 : TheQualifiedCurve                ;
-       Param1     : Real                             ;
-       Param2     : Real                             ;
-       Param3     : Real                             ;
-       Tolerance  : Real                             ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to a line and 2 curves.
-
-Create(Qualified1 : QualifiedLin      from GccEnt ;
-       Qualified2 : TheQualifiedCurve                ;
-       Point3     : Pnt2d                            ;
-       Param1     : Real                             ;
-       Param2     : Real                             ;
-       Tolerance  : Real                             ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to a line and a curve 
-       --          and a point.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Point1     : Pnt2d             ;
-       Point2     : Pnt2d             ;
-       Param1     : Real              ;
-       Tolerance  : Real              ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to a curve and 2 points.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Qualified2 : TheQualifiedCurve ;
-       Point2     : Pnt2d             ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Tolerance  : Real              ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to 2 curves and a point.
-
-Create(Qualified1 : TheQualifiedCurve ;
-       Qualified2 : TheQualifiedCurve ;
-       Qualified3 : TheQualifiedCurve ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Param3     : Real              ;
-       Tolerance  : Real              ) 
-returns Circ2d3Tan from GccIter;
-       ---Purpose: This method implements the algorithms used to 
-       --          create 2d circles tangent to 3 curves.
-
--- -- ....................................................................
-
-IsDone(me) returns Boolean
-is static;
-    ---Purpose: This method returns True if the construction 
-    --          algorithm succeeded.
-
-ThisSolution(me) returns Circ2d 
-    ---Purpose: Returns the solution.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-WhichQualifier(me                                 ; 
-              Qualif1  : out Position from GccEnt;
-              Qualif2  : out Position from GccEnt;
-              Qualif3  : out Position from GccEnt)
-raises NotDone from StdFail
-is static;
-    -- It returns the informations about the qualifiers of the tangency 
-    -- arguments concerning the solution number Index.
-    -- It returns the real qualifiers (the qualifiers given to the 
-    -- constructor method in case of enclosed, enclosing and outside 
-    -- and the qualifiers computedin case of unqualified).
-
-Tangency1(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-    ---Purpose: Returns informations about the tangency point between 
-    --          the result and the first argument.
-    --          ParSol is the intrinsic parameter of the point PntSol 
-    --          on the solution curv.
-    --          ParArg is the intrinsic parameter of the point PntSol 
-    --          on the argument curv.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-Tangency2(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-    ---Purpose: Returns informations about the tangency point between 
-    --          the result and the second argument.
-    --          ParSol is the intrinsic parameter of the point PntSol 
-    --          on the solution curv.
-    --          ParArg is the intrinsic parameter of the point PntSol 
-    --          on the argument curv.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-Tangency3(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-    ---Purpose: Returns informations about the tangency point between 
-    --          the result and the third argument.
-    --          ParSol is the intrinsic parameter of the point PntSol 
-    --          on the solution curv.
-    --          ParArg is the intrinsic parameter of the point PntSol 
-    --          on the argument curv.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-IsTheSame1(me) returns Boolean
-    -- Returns True if the solution is equal to the first argument.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-IsTheSame2(me) returns Boolean
-    -- Returns True if the solution is equal to the second argument.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-IsTheSame3(me) returns Boolean
-    -- Returns True if the solution is equal to the third argument.
-raises NotDone from StdFail
-is static;
-    ---Purpose: It raises NotDone if the construction algorithm 
-    --          didn't succeed.
-
-fields
-
-    WellDone : Boolean;
-    ---Purpose: True if the algorithm succeeded.
-
-    cirsol   : Circ2d;
-    ---Purpose: The solutions.
-
-    qualifier1 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    qualifier2 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    qualifier3 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    TheSame1 : Boolean;
-    ---Purpose: True if the solution and the first argument are identical.
-    --          Two circles are identical if the difference between the 
-    --          radius of one and the sum of the radius of the other and 
-    --          the distance between the centers is less than Tolerance. 
-    --          False in the other cases.
-
-    TheSame2 : Boolean;
-    ---Purpose: True if the solution and the second argument are identical.
-    --          Two circles are identical if the difference between the 
-    --          radius of one and the sum of the radius of the other and 
-    --          the distance between the centers is less than Tolerance. 
-    --          False in the other cases.
-
-    TheSame3 : Boolean;
-    ---Purpose: True if the solution and the third argument are identical.
-    --          Two circles are identical if the difference between the 
-    --          radius of one and the sum of the radius of the other and 
-    --          the distance between the centers is less than Tolerance. 
-    --          False in the other cases.
-
-    pnttg1sol   : Pnt2d;
-    ---Purpose: The tangency point between the solution and the first 
-    --          argument on the solution.
-
-    pnttg2sol   : Pnt2d;
-    ---Purpose: The tangency point between the solution and the second 
-    --          argument on the solution.
-
-    pnttg3sol   : Pnt2d;
-    ---Purpose: The tangency point between the solution and the third 
-    --          argument on the solution.
-
-    par1sol   : Real;
-    ---Purpose: The parameter of the tangency point between the solution 
-    --          and the first argument on the solution.
-
-    par2sol   : Real;
-    ---Purpose: The parameter of the tangency point between the solution 
-    --          and the second argument on the solution.
-
-    par3sol   : Real;
-    ---Purpose: The parameter of the tangency point between the solution 
-    --          and the third argument on the solution.
-
-    pararg1   : Real;
-    ---Purpose: The parameter of the tangency point between the solution 
-    --          and the first argument on the first argument.
-
-    pararg2   : Real;
-    ---Purpose: The parameter of the tangency point between the solution 
-    --          and the second argument on the second argument.
-
-    pararg3   : Real;
-    ---Purpose: The parameter of the tangency point between the solution 
-    --          and the third argument on the second argument.
-
-end Circ2d3Tan;
diff --git a/src/GccIter/GccIter_Circ2d3Tan.gxx b/src/GccIter/GccIter_Circ2d3Tan.gxx
deleted file mode 100644 (file)
index 8fe0675..0000000
+++ /dev/null
@@ -1,1351 +0,0 @@
-// Created on: 1991-12-13
-// Created by: Remi GILET
-// Copyright (c) 1991-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.
-
-//=========================================================================
-//   Creation d un cercle tangent a deux elements : Droite.               +
-//                                                  Cercle.               +
-//                                                  Point.                +
-//                                                  Courbes.              +
-//                        centre sur un troisieme : Droite.               +
-//                                                  Cercle.               +
-//                                                  Courbes.              +
-//=========================================================================
-
-#include <gp_Dir2d.hxx>
-#include <gp_Ax2d.hxx>
-#include <gp_Vec2d.hxx>
-#include <gp.hxx>
-#include <StdFail_NotDone.hxx>
-#include <GccEnt_BadQualifier.hxx>
-#include <math_FunctionSetRoot.hxx>
-#include <math_NewtonFunctionSetRoot.hxx>
-#include <GccAna_Circ2d3Tan.hxx>
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const TheQualifiedCurve& Qualified1 , 
-                      const TheQualifiedCurve& Qualified2 ,
-                      const TheQualifiedCurve& Qualified3 , 
-                      const Standard_Real      Param1     ,
-                      const Standard_Real      Param2     ,
-                      const Standard_Real      Param3     ,
-                      const Standard_Real      Tolerance  ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified()) ||
-       !(Qualified3.IsEnclosed() || Qualified3.IsEnclosing() || 
-        Qualified3.IsOutside() || Qualified3.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   TheCurve Cu1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   TheCurve Cu3 = Qualified3.Qualified();
-   GccIter_FuncTCuCuCu Func(Cu1,Cu2,Cu3);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = TheCurveTool::FirstParameter(Cu1);
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = TheCurveTool::FirstParameter(Cu3);
-   Umax(1) = TheCurveTool::LastParameter(Cu1);
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = TheCurveTool::LastParameter(Cu3);
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = TheCurveTool::EpsX(Cu3,Abs(Tolerance));   
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d point1,point2,point3;
-     gp_Vec2d Tan1,Tan2,Tan3;
-     TheCurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     TheCurveTool::D1(Cu3,Ufirst(3),point3,Tan3);
-     GccAna_Circ2d3Tan circ(point1,point2,point3,Tol);
-     if (circ.IsDone()) { 
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre = cirsol.Location();
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        Standard_Real Angle1 = Vec1.Angle(Tan1);
-        if (Qualified1.IsUnqualified()||
-            (Qualified1.IsEnclosing()&&Angle1<=0.)||
-            (Qualified1.IsOutside() && Angle1 >= 0.) ||
-            (Qualified1.IsEnclosed() && Angle1 <= 0.)) {
-          Angle1 = Vec2.Angle(Tan2);
-          if (Qualified2.IsUnqualified() || 
-              (Qualified2.IsEnclosing()&&Angle1<=0.)||
-              (Qualified2.IsOutside() && Angle1 >= 0) ||
-              (Qualified2.IsEnclosed() && Angle1 <= 0.)) {
-            Angle1 = Vec3.Angle(Tan3);
-            if (Qualified3.IsUnqualified() || 
-                (Qualified3.IsEnclosing()&&Angle1<=0.)||
-                (Qualified3.IsOutside() && Angle1 >= 0) ||
-                (Qualified3.IsEnclosed() && Angle1 <= 0.)) {
-              qualifier1 = Qualified1.Qualifier();
-              qualifier2 = Qualified2.Qualifier();
-              qualifier3 = Qualified3.Qualifier();
-              pararg1 = Ufirst(1);
-              par1sol = 0.;
-              pnttg1sol = point1;
-              pararg2 = Ufirst(2);
-              pnttg2sol = point2;
-              par2sol = pnttg2sol.Distance(pnttg1sol);
-              pnttg3sol = point3;
-              pararg3 = Ufirst(3);
-              par3sol = pnttg3sol.Distance(pnttg1sol);
-              WellDone = Standard_True;
-            }
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const GccEnt_QualifiedCirc& Qualified1 , 
-                         const TheQualifiedCurve& Qualified2 ,
-                         const TheQualifiedCurve& Qualified3 , 
-                         const Standard_Real      Param1     ,
-                         const Standard_Real      Param2     ,
-                         const Standard_Real      Param3     ,
-                         const Standard_Real      Tolerance     ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified()) ||
-       !(Qualified3.IsEnclosed() || Qualified3.IsEnclosing() || 
-        Qualified3.IsOutside() || Qualified3.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Circ2d C1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   TheCurve Cu3 = Qualified3.Qualified();
-   GccIter_FuncTCuCuCu Func(C1,Cu2,Cu3);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = 0.;
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = TheCurveTool::FirstParameter(Cu3);
-   Umax(1) = 2*M_PI;
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = TheCurveTool::LastParameter(Cu3);
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = TheCurveTool::EpsX(Cu3,Abs(Tolerance));   
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d centre1(C1.Location());
-     Standard_Real R1 = C1.Radius();
-     gp_Pnt2d point1(centre1.XY()+R1*gp_XY(Cos(Ufirst(1)),Sin(Ufirst(1))));
-     gp_Vec2d Tan1(gp_XY(-Sin(Ufirst(1)),Cos(Ufirst(1))));
-     gp_Pnt2d point2,point3;
-//     gp_Vec2d Tan2,Tan3,Nor2,Nor3;
-     gp_Vec2d Tan2,Tan3;
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     TheCurveTool::D1(Cu3,Ufirst(3),point3,Tan3);
-     GccAna_Circ2d3Tan circ(point1,point2,point3,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       Standard_Real dist = centre1.Distance(centre);
-       Standard_Real Rsol = cirsol.Radius();
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        if (Qualified1.IsUnqualified() || 
-            (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
-            (Qualified1.IsOutside() && dist >= Rsol) ||
-            (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
-          Standard_Real Angle1 = Vec2.Angle(Tan2);
-          if (Qualified2.IsUnqualified() || 
-              (Qualified2.IsEnclosing()&&Angle1<=0.)||
-              (Qualified2.IsOutside() && Angle1 >= 0) ||
-              (Qualified2.IsEnclosed() && Angle1 <= 0.)) {
-            Angle1 = Vec3.Angle(Tan3);
-            if (Qualified3.IsUnqualified() || 
-                (Qualified3.IsEnclosing()&&Angle1<=0.)||
-                (Qualified3.IsOutside() && Angle1 >= 0) ||
-                (Qualified3.IsEnclosed() && Angle1 <= 0.)) {
-              qualifier1 = Qualified1.Qualifier();
-              qualifier2 = Qualified2.Qualifier();
-              qualifier3 = Qualified3.Qualifier();
-              pararg1 = Ufirst(1);
-              par1sol = 0.;
-              pnttg1sol = point1;
-              pararg2 = Ufirst(2);
-              pnttg2sol = point2;
-              par2sol = 0.;
-              pararg3 = Ufirst(3);
-              pnttg3sol = point3;
-              par3sol = 0.;
-              WellDone = Standard_True;
-            }
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const GccEnt_QualifiedCirc& Qualified1 , 
-                      const GccEnt_QualifiedCirc& Qualified2 , 
-                      const TheQualifiedCurve&    Qualified3 , 
-                      const Standard_Real         Param1     ,
-                      const Standard_Real         Param2     ,
-                      const Standard_Real         Param3     ,
-                      const Standard_Real         Tolerance     ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified()) ||
-       !(Qualified3.IsEnclosed() || Qualified3.IsEnclosing() || 
-        Qualified3.IsOutside() || Qualified3.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Circ2d C1 = Qualified1.Qualified();
-   gp_Circ2d C2 = Qualified2.Qualified();
-   TheCurve Cu3 = Qualified3.Qualified();
-   GccIter_FuncTCuCuCu Func(C1,C2,Cu3);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = 0.;
-   Umin(2) = 0.;
-   Umin(3) = TheCurveTool::FirstParameter(Cu3);
-   Umax(1) = 2*M_PI;
-   Umax(2) = 2*M_PI;
-   Umax(3) = TheCurveTool::LastParameter(Cu3);
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = 2.e-15*M_PI;
-   tol(3) = TheCurveTool::EpsX(Cu3,Abs(Tolerance));   
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d centre1(C1.Location());
-     Standard_Real R1 = C1.Radius();
-     gp_Pnt2d point1(centre1.XY()+R1*gp_XY(Cos(Ufirst(1)),Sin(Ufirst(1))));
-     gp_Vec2d Tan1(gp_XY(-Sin(Ufirst(1)),Cos(Ufirst(1))));
-     gp_Pnt2d centre2(C2.Location());
-     Standard_Real R2 = C2.Radius();
-     gp_Pnt2d point2(centre2.XY()+R2*gp_XY(Cos(Ufirst(2)),Sin(Ufirst(2))));
-     gp_Vec2d Tan2(gp_XY(-Sin(Ufirst(2)),Cos(Ufirst(2))));
-     gp_Pnt2d point3;
-     gp_Vec2d Tan3;
-     TheCurveTool::D1(Cu3,Ufirst(3),point3,Tan3);
-     GccAna_Circ2d3Tan circ(point1,point2,point3,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       Standard_Real dist = centre1.Distance(centre);
-       Standard_Real Rsol = cirsol.Radius();
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        if (Qualified1.IsUnqualified() || 
-            (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
-            (Qualified1.IsOutside() && dist >= Rsol) ||
-            (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
-          dist = centre2.Distance(centre);
-          if (Qualified1.IsUnqualified() || 
-              (Qualified1.IsEnclosing() && Rsol >= R2 && dist <= Rsol)||
-              (Qualified1.IsOutside() && dist >= Rsol) ||
-              (Qualified1.IsEnclosed() && Rsol <= R2 && dist <= Rsol)) {
-            gp_Vec2d Vec(point3,centre);
-            Standard_Real Angle1 = Vec.Angle(Tan3);
-            if (Qualified3.IsUnqualified() || 
-                (Qualified3.IsEnclosing()&&Angle1<=0.)||
-                (Qualified3.IsOutside() && Angle1 >= 0) ||
-                (Qualified3.IsEnclosed() && Angle1 <= 0.)) {
-              qualifier1 = Qualified1.Qualifier();
-              qualifier2 = Qualified2.Qualifier();
-              qualifier3 = Qualified3.Qualifier();
-              pararg1 = Ufirst(1);
-              par1sol = 0.;
-              pnttg1sol = point1;
-              pararg2 = Ufirst(2);
-              pnttg2sol = point2;
-              par2sol = 0.;
-              pararg3 = Ufirst(3);
-              pnttg3sol = point3;
-              par3sol = 0.;
-              WellDone = Standard_True;
-            }
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const GccEnt_QualifiedLin& Qualified1 , 
-                      const TheQualifiedCurve&   Qualified2 ,
-                      const TheQualifiedCurve&   Qualified3 , 
-                      const Standard_Real        Param1     ,
-                      const Standard_Real        Param2     ,
-                      const Standard_Real        Param3     ,
-                      const Standard_Real        Tolerance  ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() ||
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified()) ||
-       !(Qualified3.IsEnclosed() || Qualified3.IsEnclosing() || 
-        Qualified3.IsOutside() || Qualified3.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Lin2d L1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   TheCurve Cu3 = Qualified3.Qualified();
-   GccIter_FuncTCuCuCu Func(L1,Cu2,Cu3);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = RealFirst();
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umin(3) = TheCurveTool::FirstParameter(Cu3);
-   Umax(1) = RealLast();
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Umax(3) = TheCurveTool::LastParameter(Cu3);
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 1.e-15;
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   tol(3) = TheCurveTool::EpsX(Cu3,Abs(Tolerance));   
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d centre1(L1.Location());
-     gp_Pnt2d point1(centre1.XY()+Ufirst(1)*L1.Direction().XY());
-     gp_Pnt2d point2,point3;
-     gp_Vec2d Tan2,Tan3;
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     TheCurveTool::D1(Cu3,Ufirst(3),point3,Tan3);
-     GccAna_Circ2d3Tan circ(point1,point2,point3,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-
-       // creation vaariables intermediaires pour WNT
-       gp_XY dummy1 = centre.XY()-L1.Location().XY();
-       gp_XY dummy2 (-L1.Direction().Y(),L1.Direction().X());
-       Standard_Real pscal=dummy1.Dot(dummy2);
-
-       gp_Vec2d Tan1(L1.Direction().XY());
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        if (Qualified1.IsUnqualified() || 
-            (Qualified1.IsOutside() && pscal <= 0.) ||
-            (Qualified1.IsEnclosed() && pscal >= 0.)) {
-          gp_Vec2d Vec(point2,centre);
-          Standard_Real Angle1 = Vec.Angle(Tan2);
-          if (Qualified2.IsUnqualified() || 
-              (Qualified2.IsEnclosing()&&Angle1<=0.)||
-              (Qualified2.IsOutside() && Angle1 >= 0) ||
-              (Qualified2.IsEnclosed() && Angle1 <= 0.)) {
-            Vec = gp_Vec2d(point3,centre);
-            Angle1 = Vec.Angle(Tan3);
-            if (Qualified3.IsUnqualified() || 
-                (Qualified3.IsEnclosing()&&Angle1<=0.)||
-                (Qualified3.IsOutside() && Angle1 >= 0) ||
-                (Qualified3.IsEnclosed() && Angle1 <= 0.)) {
-              qualifier1 = Qualified1.Qualifier();
-              qualifier2 = Qualified2.Qualifier();
-              qualifier3 = Qualified3.Qualifier();
-              pararg1 = Ufirst(1);
-              par1sol = 0.;
-              pnttg1sol = point1;
-              pararg2 = Ufirst(2);
-              pnttg2sol = point2;
-              par2sol = 0.;
-              pararg3 = Ufirst(3);
-              pnttg3sol = point3;
-              par3sol = 0.;
-              WellDone = Standard_True;
-            }
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const GccEnt_QualifiedLin&  Qualified1 , 
-                      const GccEnt_QualifiedLin&  Qualified2 , 
-                      const TheQualifiedCurve&    Qualified3 , 
-                      const Standard_Real         Param1     ,
-                      const Standard_Real         Param2     ,
-                      const Standard_Real         Param3     ,
-                      const Standard_Real         Tolerance  ){
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified()) ||
-       !(Qualified3.IsEnclosed() || Qualified3.IsEnclosing() || 
-        Qualified3.IsOutside() || Qualified3.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Lin2d L1 = Qualified1.Qualified();
-   gp_Lin2d L2 = Qualified2.Qualified();
-   TheCurve Cu3 = Qualified3.Qualified();
-   GccIter_FuncTCuCuCu Func(L1,L2,Cu3);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = RealFirst();
-   Umin(2) = RealFirst();
-   Umin(3) = TheCurveTool::FirstParameter(Cu3);
-   Umax(1) = RealLast();
-   Umax(2) = RealLast();
-   Umax(3) = TheCurveTool::LastParameter(Cu3);
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 1.e-15;
-   tol(2) = 1.e-15;
-   tol(3) = TheCurveTool::EpsX(Cu3,Abs(Tolerance));   
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d centre1(L1.Location());
-     gp_Pnt2d point1(centre1.XY()+Ufirst(1)*L1.Direction().XY());
-     gp_Pnt2d centre2(L2.Location());
-     gp_Pnt2d point2(centre2.XY()+Ufirst(2)*L2.Direction().XY());
-     gp_Pnt2d point3;
-     gp_Vec2d Tan3;
-     TheCurveTool::D1(Cu3,Ufirst(3),point3,Tan3);
-     GccAna_Circ2d3Tan circ(point1,point2,point3,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       Standard_Real pscal=centre.XY().Dot(gp_XY(-L1.Direction().Y(),
-                                       L1.Direction().X()));
-       if (Qualified1.IsUnqualified() || 
-          (Qualified1.IsOutside() && pscal <= 0.) ||
-          (Qualified1.IsEnclosed() && pscal >= 0.)) {
-        Standard_Real pscal=centre.XY().Dot(gp_XY(-L1.Direction().Y(),
-                                         L1.Direction().X()));
-        gp_Vec2d Tan1(L1.Direction().XY());
-        gp_Vec2d Tan2(L2.Direction().XY());
-        Standard_Real normetan1 = Tan1.Magnitude();
-        Standard_Real normetan2 = Tan2.Magnitude();
-        Standard_Real normetan3 = Tan3.Magnitude();
-        gp_Vec2d Vec1(point1,centre);
-        gp_Vec2d Vec2(point2,centre);
-        gp_Vec2d Vec3(point3,centre);
-        Standard_Real normevec1 = Vec1.Magnitude();
-        Standard_Real normevec2 = Vec2.Magnitude();
-        Standard_Real normevec3 = Vec3.Magnitude();
-        Standard_Real dot1,dot2,dot3;
-        if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-          dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-        }
-        else { dot1 = 0.; }
-        if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-          dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-        }
-        else { dot2 = 0.; }
-        if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-          dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-        }
-        else { dot3 = 0.; }
-        Tol = 1.e-12;
-        if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-          if (Qualified2.IsUnqualified() || 
-              (Qualified2.IsOutside() && pscal <= 0.) ||
-              (Qualified2.IsEnclosed() && pscal >= 0.)) {
-            Standard_Real Angle1 = Vec3.Angle(Tan3);
-            if (Qualified3.IsUnqualified() || 
-                (Qualified3.IsEnclosing()&&Angle1<=0.)||
-                (Qualified3.IsOutside() && Angle1 >= 0) ||
-                (Qualified3.IsEnclosed() && Angle1 <= 0.)) {
-              qualifier1 = Qualified1.Qualifier();
-              qualifier2 = Qualified2.Qualifier();
-              qualifier3 = Qualified3.Qualifier();
-              pararg1 = Ufirst(1);
-              par1sol = 0.;
-              pnttg1sol = point1;
-              pararg2 = Ufirst(2);
-              pnttg2sol = point2;
-              par2sol = 0.;
-              pararg3 = Ufirst(3);
-              pnttg3sol = point3;
-              par3sol = 0.;
-              WellDone = Standard_True;
-            }
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const TheQualifiedCurve& Qualified1 ,
-                      const TheQualifiedCurve& Qualified2 , 
-                      const gp_Pnt2d&          Point3     ,
-                      const Standard_Real      Param1     ,
-                      const Standard_Real      Param2     ,
-                      const Standard_Real      Tolerance  ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Circ2d C1(gp_Ax2d(Point3,gp_Dir2d(1.,0.)),0.);
-   TheCurve Cu1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   GccIter_FuncTCuCuCu Func(C1,Cu1,Cu2);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = 0.;
-   Umin(2) = TheCurveTool::FirstParameter(Cu1);
-   Umin(3) = TheCurveTool::FirstParameter(Cu2);
-   Umax(1) = 2*M_PI;
-   Umax(2) = TheCurveTool::LastParameter(Cu1);
-   Umax(3) = TheCurveTool::LastParameter(Cu2);
-   Ufirst(1) = M_PI;
-   Ufirst(2) = Param1;
-   Ufirst(3) = Param2;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   tol(3) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d point1,point2;
-//     gp_Vec2d Tan1,Tan2,Nor1,Nor2;
-     gp_Vec2d Tan1,Tan2;
-     TheCurveTool::D1(Cu1,Ufirst(2),point1,Tan1);
-     TheCurveTool::D1(Cu2,Ufirst(3),point2,Tan2);
-     GccAna_Circ2d3Tan circ(Point3,point1,point2,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       gp_Vec2d Tan3(-Sin(Ufirst(1)),Cos(Ufirst(1)));
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(Point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        Standard_Real Angle1 = Vec1.Angle(Tan1);
-        if (Qualified1.IsUnqualified()||
-            (Qualified1.IsEnclosing()&&Angle1<=0.)||
-            (Qualified1.IsOutside() && Angle1 >= 0) ||
-            (Qualified1.IsEnclosed() && Angle1 <= 0.)) {
-          Angle1 = Vec2.Angle(Tan2);
-          if (Qualified1.IsUnqualified() ||
-              (Qualified1.IsEnclosing()&&Angle1<=0.)||
-              (Qualified1.IsOutside() && Angle1 >= 0) ||
-              (Qualified1.IsEnclosed() && Angle1 <= 0.)) {
-            qualifier1 = Qualified1.Qualifier();
-            qualifier2 = Qualified2.Qualifier();
-            qualifier3 = GccEnt_noqualifier;
-            pararg1 = Ufirst(2);
-            par1sol = 0.;
-            pnttg1sol = point1;
-            pararg2 = Ufirst(3);
-            pnttg2sol = point2;
-            par2sol = 0.;
-            pararg3 = 0.;
-            pnttg3sol = Point3;
-            par3sol = 0.;
-            WellDone = Standard_True;
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const TheQualifiedCurve& Qualified1 ,
-                         const gp_Pnt2d&          Point2     ,
-                         const gp_Pnt2d&          Point3     ,
-                         const Standard_Real      Param1     ,
-                         const Standard_Real      Tolerance     ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Dir2d dirx(1.,0.);
-   gp_Circ2d C1(gp_Ax2d(Point2,dirx),0.);
-   gp_Circ2d C2(gp_Ax2d(Point3,dirx),0.);
-   TheCurve Cu1 = Qualified1.Qualified();
-   GccIter_FuncTCuCuCu Func(C1,C2,Cu1);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = 0.;
-   Umin(2) = 0.;
-   Umin(3) = TheCurveTool::FirstParameter(Cu1);
-   Umax(1) = 2*M_PI;
-   Umax(2) = 2*M_PI;
-   Umax(3) = TheCurveTool::LastParameter(Cu1);
-   Ufirst(1) = M_PI;
-   Ufirst(2) = M_PI;
-   Ufirst(3) = Param1;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = 2.e-15*M_PI;
-   tol(3) = TheCurveTool::EpsX(Cu1,Abs(Tolerance));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d point3;
-//     gp_Vec2d Tan3,Nor3;
-     gp_Vec2d Tan3;
-     TheCurveTool::D1(Cu1,Ufirst(3),point3,Tan3);
-     GccAna_Circ2d3Tan circ(Point2,Point3,point3,Tol);
-     if (circ.IsDone()) { 
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       gp_Vec2d Tan2(-Sin(Ufirst(2)),Cos(Ufirst(2)));
-       gp_Vec2d Tan1(-Sin(Ufirst(1)),Cos(Ufirst(1)));
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(Point2,centre);
-       gp_Vec2d Vec2(Point3,centre);
-       gp_Vec2d Vec3(point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        Standard_Real Angle1 = Vec1.Angle(Tan1);
-        if (Qualified1.IsUnqualified() ||
-            (Qualified1.IsEnclosing()&&Angle1<=0.)||
-            (Qualified1.IsOutside() && Angle1 >= 0) ||
-            (Qualified1.IsEnclosed() && Angle1 <= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = GccEnt_noqualifier;
-          qualifier3 = GccEnt_noqualifier;
-          pararg1 = Ufirst(3);
-          par1sol = 0.;
-          pnttg1sol = point3;
-          pararg2 = 0.;
-          pnttg2sol = Point2;
-          par2sol = 0.;
-          pararg3 = 0.;
-          pnttg3sol = Point3;
-          par3sol = 0.;
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const GccEnt_QualifiedLin&  Qualified1 , 
-                      const TheQualifiedCurve&    Qualified2 ,
-                      const gp_Pnt2d&             Point3     ,
-                      const Standard_Real         Param1     ,
-                      const Standard_Real         Param2     ,
-                      const Standard_Real         Tolerance  ) {
-
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() ||
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Dir2d dirx(1.,0.);
-   gp_Lin2d L1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   gp_Circ2d C3(gp_Ax2d(Point3,dirx),0.);
-   GccIter_FuncTCuCuCu Func(C3,L1,Cu2);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(2) = RealFirst();
-   Umin(3) = TheCurveTool::FirstParameter(Cu2);
-   Umin(1) = 0.;
-   Umax(2) = RealLast();
-   Umax(3) = TheCurveTool::LastParameter(Cu2);
-   Umax(1) = 2*M_PI;
-   Ufirst(2) = Param1;
-   Ufirst(3) = Param2;
-   Ufirst(1) = M_PI;
-   tol(1) = 2.e-15;
-   tol(2) = 1.e-15;
-   tol(3) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d centre1(L1.Location());
-     gp_Pnt2d point1(centre1.XY()+Ufirst(2)*L1.Direction().XY());
-     gp_Pnt2d point2;
-     gp_Vec2d Tan2;
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     GccAna_Circ2d3Tan circ(point1,point2,Point3,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       Standard_Real pscal=centre.XY().Dot(gp_XY(-L1.Direction().Y(),
-                                       L1.Direction().X()));
-       gp_Vec2d Tan1(L1.Direction().XY());
-       gp_Vec2d Tan3(-Sin(Ufirst(1)),Cos(Ufirst(1)));
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(Point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        if (Qualified1.IsUnqualified() || 
-            (Qualified1.IsOutside() && pscal <= 0.) ||
-            (Qualified1.IsEnclosed() && pscal >= 0.)) {
-          Standard_Real Angle1 = Vec2.Angle(Tan2);
-          if (Qualified2.IsUnqualified() || 
-              (Qualified2.IsEnclosing()&&Angle1<=0.)||
-              (Qualified2.IsOutside() && Angle1 >= 0) ||
-              (Qualified2.IsEnclosed() && Angle1 <= 0.)) {
-            qualifier1 = Qualified1.Qualifier();
-            qualifier2 = Qualified2.Qualifier();
-            qualifier3 = GccEnt_noqualifier;
-            pararg1 = Ufirst(2);
-            par1sol = 0.;
-            pnttg1sol = point1;
-            pararg2 = Ufirst(3);
-            pnttg2sol = point2;
-            par2sol = 0.;
-            pararg3 = 0.;
-            pnttg3sol = Point3;
-            par3sol = 0.;
-            WellDone = Standard_True;
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const GccEnt_QualifiedCirc& Qualified1 , 
-                      const GccEnt_QualifiedLin&  Qualified2 , 
-                      const TheQualifiedCurve&    Qualified3 , 
-                      const Standard_Real         Param1     ,
-                      const Standard_Real         Param2     ,
-                      const Standard_Real         Param3     ,
-                      const Standard_Real         Tolerance  ) {
-     
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() ||
-        Qualified2.IsOutside() || Qualified2.IsUnqualified()) ||
-       !(Qualified3.IsEnclosed() || Qualified3.IsEnclosing() || 
-        Qualified3.IsOutside() || Qualified3.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Circ2d C1 = Qualified1.Qualified();
-   gp_Lin2d L2 = Qualified2.Qualified();
-   TheCurve Cu3 = Qualified3.Qualified();
-   GccIter_FuncTCuCuCu Func(C1,L2,Cu3);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = 0.;
-   Umin(2) = RealFirst();
-   Umin(3) = TheCurveTool::FirstParameter(Cu3);
-   Umax(1) = 2*M_PI;
-   Umax(2) = RealLast();
-   Umax(3) = TheCurveTool::LastParameter(Cu3);
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   Ufirst(3) = Param3;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = 1.e-15;
-   tol(3) = TheCurveTool::EpsX(Cu3,Abs(Tolerance));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Func.Value(Ufirst,Umin);
-     Root.Root(Ufirst);
-     gp_Pnt2d centre1(C1.Location());
-     Standard_Real R1 = C1.Radius();
-     gp_Pnt2d point1(centre1.XY()+R1*gp_XY(Cos(Ufirst(1)),Sin(Ufirst(1))));
-     gp_Pnt2d centre2(L2.Location());
-     gp_Pnt2d point2(centre2.XY()+Ufirst(2)*L2.Direction().XY());
-     gp_Pnt2d point3;
-     gp_Vec2d Tan3;
-     TheCurveTool::D1(Cu3,Ufirst(3),point3,Tan3);
-     GccAna_Circ2d3Tan circ(point1,point2,point3,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       gp_Vec2d Tan1(-Sin(Ufirst(1)),Cos(Ufirst(1)));
-       gp_Vec2d Tan2(L2.Direction().XY());
-       Standard_Real normetan1 = Tan1.Magnitude();
-       Standard_Real normetan2 = Tan2.Magnitude();
-       Standard_Real normetan3 = Tan3.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1*normetan1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution() && normetan3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3*normetan3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        Standard_Real dist = centre1.Distance(centre);
-        Standard_Real Rsol = cirsol.Radius();
-        if (Qualified1.IsUnqualified() || 
-            (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
-            (Qualified1.IsOutside() && dist >= Rsol) ||
-            (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
-          Standard_Real pscal=centre.XY().Dot(gp_XY(-L2.Direction().Y(),
-                                           L2.Direction().X()));
-          if (Qualified2.IsUnqualified() || 
-              (Qualified2.IsOutside() && pscal <= 0.) ||
-              (Qualified2.IsEnclosed() && pscal >= 0.)) {
-            Standard_Real Angle1 = Vec3.Angle(Tan3);
-            if (Qualified3.IsUnqualified() || 
-                (Qualified3.IsEnclosing()&&Angle1<=0.)||
-                (Qualified3.IsOutside() && Angle1 >= 0) ||
-                (Qualified3.IsEnclosed() && Angle1 <= 0.)) {
-              qualifier1 = Qualified1.Qualifier();
-              qualifier2 = Qualified2.Qualifier();
-              qualifier3 = Qualified3.Qualifier();
-              pararg1 = Ufirst(1);
-              par1sol = 0.;
-              pnttg1sol = point1;
-              pararg2 = Ufirst(2);
-              pnttg2sol = point2;
-              par2sol = 0.;
-              pararg3 = Ufirst(3);
-              pnttg3sol = point3;
-              par3sol = 0.;
-              WellDone = Standard_True;
-            }
-          }
-        }
-       }
-     }
-   }
- }
-
-GccIter_Circ2d3Tan::
-   GccIter_Circ2d3Tan (const GccEnt_QualifiedCirc& Qualified1 , 
-                      const TheQualifiedCurve&    Qualified2 ,
-                      const gp_Pnt2d&             Point3     ,
-                      const Standard_Real         Param1     ,
-                      const Standard_Real         Param2     ,
-                      const Standard_Real         Tolerance  ) {
-     
-   TheSame1 = Standard_False;
-   TheSame2 = Standard_False;
-   TheSame3 = Standard_False;
-   par1sol = 0.;
-   par2sol = 0.;
-   par3sol = 0.;
-   pararg1 = 0.;
-   pararg2 = 0.;
-   pararg3 = 0.;
-
-   Standard_Real Tol = Abs(Tolerance);
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   gp_Circ2d C1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   gp_Dir2d dirx(1.,0.);
-   gp_Circ2d C3(gp_Ax2d(Point3,dirx),0.);
-   GccIter_FuncTCuCuCu Func(C1,C3,Cu2);
-   math_Vector Umin(1,3);
-   math_Vector Umax(1,3);
-   math_Vector Ufirst(1,3);
-   math_Vector tol(1,3);
-   Umin(1) = 0.;
-   Umin(3) = TheCurveTool::FirstParameter(Cu2);
-   Umin(2) = 0.;
-   Umax(1) = 2*M_PI;
-   Umax(3) = TheCurveTool::LastParameter(Cu2);
-   Umax(2) = 2*M_PI;
-   Ufirst(1) = Param1;
-   Ufirst(2) = M_PI;
-   Ufirst(3) = Param2;
-   tol(1) = 2.e-15*M_PI;
-   tol(2) = 2.e-15*M_PI;
-   tol(3) = TheCurveTool::EpsX(Cu2,Abs(Tolerance));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-     Func.Value(Ufirst,Umin);
-     gp_Pnt2d centre1(C1.Location());
-     Standard_Real R1 = C1.Radius();
-     gp_Pnt2d point1(centre1.XY()+R1*gp_XY(Cos(Ufirst(1)),Sin(Ufirst(1))));
-     gp_Pnt2d point2;
-//     gp_Vec2d Tan2,Nor2;
-     gp_Vec2d Tan2;
-     TheCurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
-     GccAna_Circ2d3Tan circ(point1,point2,Point3,Tol);
-     if (circ.IsDone()) {
-       cirsol = circ.ThisSolution(1);
-       gp_Pnt2d centre(cirsol.Location());
-       gp_Vec2d Tan1(-Sin(Ufirst(1)),Cos(Ufirst(1)));
-       gp_Vec2d Tan3(-Sin(Ufirst(3)),Cos(Ufirst(3)));
-       Standard_Real normetan2 = Tan2.Magnitude();
-       gp_Vec2d Vec1(point1,centre);
-       gp_Vec2d Vec2(point2,centre);
-       gp_Vec2d Vec3(Point3,centre);
-       Standard_Real normevec1 = Vec1.Magnitude();
-       Standard_Real normevec2 = Vec2.Magnitude();
-       Standard_Real normevec3 = Vec3.Magnitude();
-       Standard_Real dot1,dot2,dot3;
-       if (normevec1 >= gp::Resolution()) {
-        dot1 = Vec1.Dot(Tan1)/(normevec1);
-       }
-       else { dot1 = 0.; }
-       if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
-        dot2 = Vec2.Dot(Tan2)/(normevec2*normetan2);
-       }
-       else { dot2 = 0.; }
-       if (normevec3 >= gp::Resolution()) {
-        dot3 = Vec3.Dot(Tan3)/(normevec3);
-       }
-       else { dot3 = 0.; }
-       Tol = 1.e-12;
-       if (dot1 <= Tol && dot2 <=Tol && dot3 <= Tol) {
-        Standard_Real dist = centre1.Distance(centre);
-        Standard_Real Rsol = cirsol.Radius();
-        if (Qualified1.IsUnqualified() || 
-            (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
-            (Qualified1.IsOutside() && dist >= Rsol) ||
-            (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
-          Standard_Real Angle1 = Vec2.Angle(Tan2);
-          if (Qualified2.IsUnqualified() || 
-              (Qualified2.IsEnclosing()&&Angle1<=0.)||
-              (Qualified2.IsOutside() && Angle1 >= 0) ||
-              (Qualified2.IsEnclosed() && Angle1 <= 0.)) {
-            qualifier1 = Qualified1.Qualifier();
-            qualifier2 = Qualified2.Qualifier();
-            qualifier3 = GccEnt_noqualifier;
-            pararg1 = Ufirst(1);
-            par1sol = 0.;
-            pnttg1sol = point1;
-            pararg2 = Ufirst(2);
-            pnttg2sol = point2;
-            par2sol = 0.;
-            pararg3 = 0.;
-            pnttg3sol = Point3;
-            par3sol = 0.;
-            WellDone = Standard_True;
-          }
-        }
-       }
-     }
-   }
- }
-
-Standard_Boolean GccIter_Circ2d3Tan::
-   IsDone () const{ return WellDone; }
-
-gp_Circ2d GccIter_Circ2d3Tan::
-   ThisSolution () const{ return cirsol; }
-
-void GccIter_Circ2d3Tan:: 
-  WhichQualifier (GccEnt_Position& Qualif1  ,
-                 GccEnt_Position& Qualif2  ,
-                 GccEnt_Position& Qualif3  ) const
-{
-  if (!WellDone) { StdFail_NotDone::Raise(); }
-  else {
-    Qualif1 = qualifier1;
-    Qualif2 = qualifier2;
-    Qualif3 = qualifier3;
-  }
-}
-
-void GccIter_Circ2d3Tan:: 
-   Tangency1 (Standard_Real&      ParSol ,
-             Standard_Real&      ParArg ,
-             gp_Pnt2d&           PntSol ) const{
-   if (!WellDone) { StdFail_NotDone::Raise(); }
-   else {
-     if (TheSame1 == 0) {
-       ParSol = par1sol;
-       ParArg = pararg1;
-       PntSol = pnttg1sol;
-     }
-     else { StdFail_NotDone::Raise(); }
-   }
- }
-
-void GccIter_Circ2d3Tan:: 
-   Tangency2 (Standard_Real&      ParSol         ,
-             Standard_Real&      ParArg         ,
-             gp_Pnt2d&  PntSol         ) const{
-   if (!WellDone) { StdFail_NotDone::Raise(); }
-   else {
-     ParSol = par2sol;
-     ParArg = pararg2;
-     PntSol = pnttg2sol;
-   }
- }
-
-void GccIter_Circ2d3Tan:: 
-   Tangency3 (Standard_Real&      ParSol         ,
-             Standard_Real&      ParArg         ,
-             gp_Pnt2d&  PntSol         ) const{
-   if (!WellDone) { StdFail_NotDone::Raise(); }
-   else {
-     ParSol = par3sol;
-     ParArg = pararg3;
-     PntSol = pnttg3sol;
-   }
- }
-
-Standard_Boolean GccIter_Circ2d3Tan::
-   IsTheSame1 () const
-{
-  if (!WellDone) StdFail_NotDone::Raise();
-
-  if (TheSame1 == 0) 
-    return Standard_False;
-    
-  return Standard_True;
-}
-
-
-Standard_Boolean GccIter_Circ2d3Tan::
-   IsTheSame2 () const
-{
-  if (!WellDone) StdFail_NotDone::Raise();
-  
-  if (TheSame3 == 0) 
-    return Standard_False;
-  
-  return Standard_True;
-  
-}
-
-Standard_Boolean GccIter_Circ2d3Tan::
-   IsTheSame3 () const
-{
-  if (!WellDone) StdFail_NotDone::Raise();
-  return Standard_True;
-}
diff --git a/src/GccIter/GccIter_FunctionTanCirCu.cdl b/src/GccIter/GccIter_FunctionTanCirCu.cdl
deleted file mode 100644 (file)
index 297a1bd..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
--- Created on: 1992-02-20
--- Created by: Remy GILET
--- Copyright (c) 1992-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.
-
-generic class FunctionTanCirCu from GccIter (
-    TheCurve     as any;
-    TheCurveTool as any) -- as CurvePGTool from GccInt(TheCurve)
-
-inherits FunctionWithDerivative from math
-         
-    ---Purpose: This abstract class describes a Function of 1 Variable 
-    --          used to find a line tangent to a curve and a circle.
-
-uses Circ2d from gp    
-
-is
-
-Create (Circ   : Circ2d   from gp ;
-       Curv   : TheCurve         ) returns FunctionTanCirCu from GccIter;
-
-Value (me : in out      ;
-       X  :        Real ;
-       F  :    out Real ) returns Boolean;
-    ---Purpose: Computes the value of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Derivative (me    : in out      ;
-            X     :        Real ;
-            Deriv :    out Real ) returns Boolean;
-    ---Purpose: Computes the derivative of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Values (me    : in out      ;
-        X     :        Real ;
-        F     : out    Real ;
-        Deriv : out    Real ) returns Boolean;
-    ---Purpose: Computes the value and the derivative of the function F 
-    --          for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-fields
-
-TheCirc  : Circ2d from gp;
-Curve    : TheCurve; 
--- Modified by Sergey KHROMOV - Thu Apr  5 09:50:18 2001 Begin
-myWeight : Real;
--- Modified by Sergey KHROMOV - Thu Apr  5 09:50:19 2001 End
-
-end FunctionTanCirCu;
diff --git a/src/GccIter/GccIter_FunctionTanCirCu.gxx b/src/GccIter/GccIter_FunctionTanCirCu.gxx
deleted file mode 100644 (file)
index fd44747..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-// Created on: 1992-01-20
-// Created by: Remi GILET
-// Copyright (c) 1992-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.
-
-#include <gp_Vec2d.hxx>
-#include <gp_Pnt2d.hxx>
-#include <gp_Vec.hxx>
-#include <gp_Pnt.hxx>
-
-//=========================================================================
-//  soit P1 le point sur la courbe TheCurve d abscisse u.                 +
-//  soit C  le centre du cercle TheCirc.                                  +
-//  Nous recherchons un point P2 appartenant au cercle tel que :          +
-//           --->   -->                                                   +
-//        *  P1P2 . CP2 = 0                                               +
-//                                                                        +
-//        *    -->  2    2                                                +
-//           ||CP2||  = R                                                 +
-//  Nous cherchons donc les zeros de la fonction suivante:                +
-//                         -->  --> 2                                     +
-//             -->  2    ( CP1 . T )      2                               +
-//           ||CP1||  -  -----------  -  R   =  F(u)                      +
-//                          --> 2                                         +
-//                         ||T||                                          +
-//                                                                        +
-//  La derivee de cette fonction est :                                    +
-//                                                                        +
-//             2*(CP1.T)(CP1.N)     2*(CP1.T)*(CP1.T)*T.N                 +
-//  f(u) =  -  ----------------  +  ---------------------                 +
-//                  T.T                  (T.T)*(T.T)                      +
-//=========================================================================
-//                                                                        +
-// skv: Small addition: The function and the derivative are normalized    +
-//                      by an average square distance between the circle  +
-//                      and the curve.                                    +
-//=========================================================================
-
-GccIter_FunctionTanCirCu::
-  GccIter_FunctionTanCirCu(const gp_Circ2d& Circ   ,
-                         const TheCurve&  Curv   ) {
-  Curve = Curv;
-  TheCirc = Circ;
-
-//  Modified by Sergey KHROMOV - Thu Apr  5 09:51:21 2001 Begin
-  Standard_Integer aNbSamp = TheCurveTool::NbSamples(Curve);
-  Standard_Real    aFirst  = TheCurveTool::FirstParameter(Curve);
-  Standard_Real    aLast   = TheCurveTool::LastParameter(Curve);
-  Standard_Real    aStep   = (aLast - aFirst)/aNbSamp;
-  Standard_Real    anX     = aFirst + aStep/2.;
-  Standard_Integer aNbP    = 0;
-  gp_XY            aLoc(0., 0.);
-
-  while (anX <= aLast) {
-    aLoc += (TheCurveTool::Value(Curve, anX)).XY();
-    anX  += aStep;
-    aNbP++;
-  }
-  myWeight = Max((aLoc - TheCirc.Location().XY()).SquareModulus(), TheCirc.Radius());
-//  Modified by Sergey KHROMOV - Thu Apr  5 09:51:25 2001 End
- }
-
-
-Standard_Boolean GccIter_FunctionTanCirCu::
-  Value (const Standard_Real  X    ,
-              Standard_Real& Fval ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vect1;
-  TheCurveTool::D1(Curve,X,Point,Vect1);
-  Standard_Real NormeD1 = Vect1.Magnitude();
-  gp_Vec2d TheDirection(TheCirc.Location(),Point);
-  Standard_Real squaredir = TheDirection.Dot(TheDirection);
-  Standard_Real R = TheCirc.Radius();
-  Fval = squaredir-R*R-
-    (TheDirection.Dot(Vect1))*(TheDirection.Dot(Vect1))/(NormeD1*NormeD1);
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:38:05 2001 Begin
-  Fval /= myWeight;
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:38:06 2001 End
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCirCu::
-  Derivative (const Standard_Real  X     ,
-                   Standard_Real& Deriv ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vect1,Vect2;
-  TheCurveTool::D2(Curve,X,Point,Vect1,Vect2);
-  Standard_Real NormeD1 = Vect1.SquareMagnitude();
-  gp_Vec2d TheDirection(TheCirc.Location(),Point);
-  Standard_Real cp1dott = TheDirection.Dot(Vect1);
-  Deriv = -2.*(cp1dott/NormeD1)*
-    ((TheDirection.Dot(Vect2))-cp1dott*Vect1.Dot(Vect2)/NormeD1);
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:38:15 2001 Begin
-  Deriv /= myWeight;
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:38:15 2001 End
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCirCu::
-  Values (const Standard_Real  X     ,
-               Standard_Real& Fval  ,
-               Standard_Real& Deriv ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vect1,Vect2;
-  TheCurveTool::D2(Curve,X,Point,Vect1,Vect2);
-  Standard_Real NormeD1 = Vect1.SquareMagnitude();
-  gp_Vec2d TheDirection(TheCirc.Location(),Point);
-  Standard_Real squaredir = TheDirection.SquareMagnitude();
-  Standard_Real cp1dott = TheDirection.Dot(Vect1);
-  Standard_Real R = TheCirc.Radius();
-
-  Fval = squaredir-R*R-cp1dott*cp1dott/NormeD1;
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:38:28 2001 Begin
-  Fval /= myWeight;
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:38:28 2001 End
-
-  Deriv = -2.*(cp1dott/NormeD1)*
-    ((TheDirection.Dot(Vect2))-cp1dott*Vect1.Dot(Vect2)/NormeD1);
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:37:36 2001 Begin
-  Deriv /= myWeight;
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:37:37 2001 End
-  return Standard_True;
-}
diff --git a/src/GccIter/GccIter_FunctionTanCuCu.cdl b/src/GccIter/GccIter_FunctionTanCuCu.cdl
deleted file mode 100644 (file)
index bb48f46..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
--- Created on: 1992-02-20
--- Created by: Remy GILET
--- Copyright (c) 1992-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.
-
-generic class FunctionTanCuCu from GccIter (
-    TheCurve     as any;
-    TheCurveTool as any) -- as CurvePGTool from GccInt (TheCurve)
-
-inherits FunctionSetWithDerivatives from math 
-
-    ---Purpose: This abstract class describes a Function of 1 Variable 
-    --          used to find a line tangent to two curves.
-
-uses Vector from math,
-     Matrix from math,
-     Circ2d from gp,
-     Pnt2d  from gp,
-     Vec2d  from gp,
-     Type3  from GccIter
-
-     
-raises ConstructionError
-
-is
-
-Create (Curv1 : TheCurve ;
-        Curv2 : TheCurve ) returns FunctionTanCuCu from GccIter;
-
-Create (Circ1 : Circ2d   from gp ;
-        Curv2 : TheCurve         ) returns FunctionTanCuCu from GccIter;
-
-InitDerivative(me                   : in out                      ;
-              X                    :        Vector from math     ;
-              Point1,Point2        :    out Pnt2d  from gp       ;
-              Tan1,Tan2,D21,D22    :    out Vec2d  from gp       )
-raises ConstructionError
-is static;
-
-NbVariables(me) returns Integer;
-    ---Purpose: returns the number of variables of the function.
-
-NbEquations(me) returns Integer;
-    ---Purpose: returns the number of equations of the function.
-
-Value (me : in out                 ;
-       X  :        Vector from math;
-       F  :    out Vector from math) returns Boolean;
-    ---Purpose: Computes the value of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Derivatives (me    : in out                 ;
-             X     :        Vector from math;
-             Deriv :    out Matrix from math) returns Boolean;
-    ---Purpose: Computes the derivative of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Values (me    : in out                 ;
-        X     :        Vector from math;
-        F     : out    Vector from math;
-        Deriv : out    Matrix from math) returns Boolean;
-    ---Purpose: Computes the value and the derivative of the function F 
-    --          for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-fields
-
-TheCurve1     : TheCurve               ;
-TheCurve2     : TheCurve               ;
-TheCirc1      : Circ2d   from gp       ;
-TheType       : Type3    from GccIter  ;
-
-end FunctionTanCuCu;
-
-
-
diff --git a/src/GccIter/GccIter_FunctionTanCuCu.gxx b/src/GccIter/GccIter_FunctionTanCuCu.gxx
deleted file mode 100644 (file)
index 1ef062e..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-// Created on: 1992-01-20
-// Created by: Remi GILET
-// Copyright (c) 1992-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.
-
-#include <gp_Vec2d.hxx>
-#include <gp_Pnt2d.hxx>
-#include <ElCLib.hxx>
-
-void GccIter_FunctionTanCuCu::
-  InitDerivative(const math_Vector& X     ,
-                      gp_Pnt2d&    Point1,
-                      gp_Pnt2d&    Point2,
-                      gp_Vec2d&    Tan1  ,
-                      gp_Vec2d&    Tan2  ,
-                      gp_Vec2d&    D21   ,
-                      gp_Vec2d&    D22   ) {
-  switch (TheType) {
-  case GccIter_CuCu:
-    {
-      TheCurveTool::D2(TheCurve1,X(1),Point1,Tan1,D21);
-      TheCurveTool::D2(TheCurve2,X(2),Point2,Tan2,D22);
-    }
-    break;
-  case GccIter_CiCu:
-    {
-      ElCLib::D2(X(1),TheCirc1,Point1,Tan1,D21);
-      TheCurveTool::D2(TheCurve2,X(2),Point2,Tan2,D22);
-    }
-    break;
-  default:
-    {
-    }
-  }
-}
-
-GccIter_FunctionTanCuCu::
-  GccIter_FunctionTanCuCu(const TheCurve& C1  ,
-                           const TheCurve& C2  ) {
-  TheCurve1 = C1;
-  TheCurve2 = C2;
-  TheType = GccIter_CuCu;
-}
-
-GccIter_FunctionTanCuCu::
-  GccIter_FunctionTanCuCu(const gp_Circ2d& C1  ,
-                           const TheCurve&  C2  ) {
-  TheCirc1 = C1;
-  TheCurve2 = C2;
-  TheType = GccIter_CiCu;
-}
-
-
-//=========================================================================
-//  soit P1 le point sur la courbe TheCurve1 d abscisse u1.               +
-//  soit P2 le point sur la courbe TheCurve2 d abscisse u2.               +
-//  soit T1 la tangente a la courbe TheCurve1 en P1.                      +
-//  soit T2 la tangente a la courbe TheCurve2 en P2.                      +
-//  Nous voulons P1 et P2 tels que :                                      +
-//           --->    -->                                                  +
-//        *  P1P2 /\ T1 = 0                                               +
-//                                                                        +
-//           -->   -->                                                    +
-//        *  T1 /\ T2 = 0                                                 +
-//                                                                        +
-//  Nous cherchons donc les zeros des fonctions suivantes:                +
-//             --->    -->                                                +
-//        *    P1P2 /\ T1                                                 +
-//          --------------- = F1(u)                                       +
-//            --->     -->                                                +
-//          ||P1P2||*||T1||                                               +
-//                                                                        +
-//              -->   -->                                                 +
-//        *     T1 /\ T2                                                  +
-//          --------------- = F2(u)                                       +
-//             -->    -->                                                 +
-//           ||T2||*||T1||                                                +
-//                                                                        +
-//  Les derivees de ces fonctions sont :                                  +
-//                                           2              2             +
-//   dF1        P1P2/\N1       (P1P2/\T1)*[T1*(-T1).P1P2+P1P2*(T1.N1)]    +
-//  ----- = --------------- - -----------------------------------------   +
-//   du1                                     3        3                   +
-//           ||P1P2||*||T1||         ||P1P2|| * ||T1||                    +
-//                                                                        +
-//                                                    2                   +
-//   dF1        T2/\T1                  (P1P2/\T1)*[T1*(T2.P1P2)          +
-//  ----- = --------------- - -----------------------------------------   +
-//   du2                                     3        3                   +
-//           ||P1P2||*||T1||         ||P1P2|| * ||T1||                    +
-//                                                                        +
-//                                                          2             +
-//   dF2             N1/\T2                 T1/\T2*(N1.T1)T2              +
-//  ----- =     ----------------  -  -----------------------------        +
-//   du1                                          3        3              +
-//                ||T1||*||T2||             ||T1|| * ||T2||               +
-//                                                                        +
-//                                                          2             +
-//   dF2             T1/\N2                 T1/\T2*(N2.T2)T1              +
-//  ----- =     ----------------  -  -----------------------------        +
-//   du2                                          3        3              +
-//                ||T1||*||T2||             ||T1|| * ||T2||               +
-//                                                                        +
-//=========================================================================
-
-Standard_Integer GccIter_FunctionTanCuCu::
-  NbVariables() const { return 2; }
-
-Standard_Integer GccIter_FunctionTanCuCu::
-  NbEquations() const { return 2; }
-
-Standard_Boolean GccIter_FunctionTanCuCu::
-  Value (const math_Vector& X    ,
-              math_Vector& Fval ) {
-  gp_Pnt2d Point1;
-  gp_Pnt2d Point2;
-  gp_Vec2d Vect11;
-  gp_Vec2d Vect21;
-  gp_Vec2d Vect12;
-  gp_Vec2d Vect22;
-  InitDerivative(X,Point1,Point2,Vect11,Vect21,Vect12,Vect22);
-  Standard_Real NormeD11 = Vect11.Magnitude();
-  Standard_Real NormeD21 = Vect21.Magnitude();
-  gp_Vec2d TheDirection(Point1,Point2);
-  Standard_Real squaredir = TheDirection.Dot(TheDirection);
-  Fval(1) = TheDirection.Crossed(Vect11)/(NormeD11*squaredir);
-  Fval(2) = Vect11.Crossed(Vect21)/(NormeD11*NormeD21);
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCuCu::
-  Derivatives (const math_Vector& X     ,
-                    math_Matrix& Deriv ) {
-  gp_Pnt2d Point1;
-  gp_Pnt2d Point2;
-  gp_Vec2d Vect11;
-  gp_Vec2d Vect21;
-  gp_Vec2d Vect12;
-  gp_Vec2d Vect22;
-  InitDerivative(X,Point1,Point2,Vect11,Vect21,Vect12,Vect22);
-  Standard_Real NormeD11 = Vect11.Magnitude();
-  Standard_Real NormeD21 = Vect21.Magnitude();
-#ifdef DEB
-  gp_Vec2d V2V1(Vect11.XY(),Vect21.XY());
-#else
-  Vect11.XY();
-  Vect21.XY();
-#endif
-  gp_Vec2d TheDirection(Point1,Point2);
-  Standard_Real squaredir = TheDirection.Dot(TheDirection);
-  Deriv(1,1) = TheDirection.Crossed(Vect12)/(NormeD11*squaredir)+
-    (TheDirection.Crossed(Vect11)*NormeD11*NormeD11*Vect11.Dot(TheDirection))/
-     (NormeD11*NormeD11*NormeD11*squaredir*squaredir*squaredir);
-  Deriv(1,2) = Vect21.Crossed(Vect11)/(NormeD11*squaredir)-
-    (TheDirection.Crossed(Vect11)*NormeD11*NormeD11*Vect21.Dot(TheDirection))/
-     (NormeD11*NormeD11*NormeD11*squaredir*squaredir*squaredir);
-  Deriv(2,1)=(Vect12.Crossed(Vect21))/(NormeD11*NormeD21)-
-      (Vect11.Crossed(Vect21))*(Vect12.Dot(Vect11))*NormeD21*NormeD21/
-     (NormeD11*NormeD11*NormeD11*NormeD21*NormeD21*NormeD21);
-  Deriv(2,2)=(Vect11.Crossed(Vect22))/(NormeD11*NormeD21)-
-      (Vect11.Crossed(Vect21))*(Vect22.Dot(Vect21))*NormeD11*NormeD11/
-     (NormeD11*NormeD11*NormeD11*NormeD21*NormeD21*NormeD21);
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCuCu::
-  Values (const math_Vector& X     ,
-               math_Vector& Fval  ,
-               math_Matrix& Deriv ) {
-  gp_Pnt2d Point1;
-  gp_Pnt2d Point2;
-  gp_Vec2d Vect11;
-  gp_Vec2d Vect21;
-  gp_Vec2d Vect12;
-  gp_Vec2d Vect22;
-  InitDerivative(X,Point1,Point2,Vect11,Vect21,Vect12,Vect22);
-  Standard_Real NormeD11 = Vect11.Magnitude();
-  Standard_Real NormeD21 = Vect21.Magnitude();
-#ifdef DEB
-  gp_Vec2d V2V1(Vect11.XY(),Vect21.XY());
-#else
-  Vect11.XY();
-  Vect21.XY();
-#endif
-  gp_Vec2d TheDirection(Point1,Point2);
-  Standard_Real squaredir = TheDirection.Dot(TheDirection);
-  Fval(1) = TheDirection.Crossed(Vect11)/(NormeD11*squaredir);
-  Fval(2) = Vect11.Crossed(Vect21)/(NormeD11*NormeD21);
-  Deriv(1,1) = TheDirection.Crossed(Vect12)/(NormeD11*squaredir)+
-    (TheDirection.Crossed(Vect11)*NormeD11*NormeD11*Vect11.Dot(TheDirection))/
-     (NormeD11*NormeD11*NormeD11*squaredir*squaredir*squaredir);
-  Deriv(1,2) = Vect21.Crossed(Vect11)/(NormeD11*squaredir)-
-    (TheDirection.Crossed(Vect11)*NormeD11*NormeD11*Vect21.Dot(TheDirection))/
-     (NormeD11*NormeD11*NormeD11*squaredir*squaredir*squaredir);
-  Deriv(2,1)=(Vect12.Crossed(Vect21))/(NormeD11*NormeD21)-
-      (Vect11.Crossed(Vect21))*(Vect12.Dot(Vect11))*NormeD21*NormeD21/
-     (NormeD11*NormeD11*NormeD11*NormeD21*NormeD21*NormeD21);
-  Deriv(2,2)=(Vect11.Crossed(Vect22))/(NormeD11*NormeD21)-
-      (Vect11.Crossed(Vect21))*(Vect22.Dot(Vect21))*NormeD11*NormeD11/
-     (NormeD11*NormeD11*NormeD11*NormeD21*NormeD21*NormeD21);
-  return Standard_True;
-}
diff --git a/src/GccIter/GccIter_FunctionTanCuCuCu.cdl b/src/GccIter/GccIter_FunctionTanCuCuCu.cdl
deleted file mode 100644 (file)
index 382a7a3..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
--- Created on: 1991-05-13
--- Created by: Laurent PAINNOT
--- Copyright (c) 1991-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.
-
-generic class FunctionTanCuCuCu from GccIter(
-    TheCurve     as any;
-    TheCurveTool as any) -- as CurvePGTool from GccInt (TheCurve)
-     
-inherits FunctionSetWithDerivatives from math
-     
-    ---Purpose: This abstract class describes a set on N Functions of 
-    --          M independant variables.
-
-uses Vector from math,
-     Matrix from math,
-     Circ2d from gp,
-     Lin2d  from gp,
-     Pnt2d  from gp,
-     Vec2d  from gp,
-     Type1  from GccIter 
-
-raises ConstructionError
-
-is
-
-    Create (C1  : TheCurve ;
-           C2  : TheCurve ;
-           C3  : TheCurve ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (C1  : Circ2d    from gp ;
-           C2  : TheCurve          ;
-           C3  : TheCurve          ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (C1  : Circ2d    from gp ;
-           C2  : Circ2d    from gp ;
-           C3  : TheCurve          ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (C1  : Circ2d    from gp ;
-           L2  : Lin2d     from gp ;
-           C3  : TheCurve          ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (L1  : Lin2d     from gp ;
-           L2  : Lin2d     from gp ;
-           C3  : TheCurve          ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (L1  : Lin2d     from gp ;
-           C2  : TheCurve          ;
-           C3  : TheCurve          ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (C1  : Circ2d    from gp ;
-           C2  : TheCurve          ;
-           P3  : Pnt2d     from gp ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (L1  : Lin2d     from gp ;
-           C2  : TheCurve          ;
-           P3  : Pnt2d     from gp ) returns FunctionTanCuCuCu from GccIter;
-
-    Create (C1  : TheCurve          ;
-           P2  : Pnt2d     from gp ;
-           P3  : Pnt2d     from gp ) returns FunctionTanCuCuCu from GccIter;
-
-InitDerivative(me                         : in out                   ;
-              X                          :        Vector from math  ;
-              Point1,Point2,Point3       :    out Pnt2d  from gp    ;
-              Tan1,Tan2,Tan3,D21,D22,D23 :    out Vec2d  from gp    )
-raises ConstructionError
-is static;
-
-    NbVariables(me) returns Integer;
-       ---Purpose: Returns the number of variables of the function.
-
-    NbEquations(me) returns Integer;
-       ---Purpose: Returns the number of equations of the function.
-
-    Value(me : in out                 ; 
-         X  :        Vector from math; 
-         F  :    out Vector from math) returns Boolean;
-       ---Purpose: Computes the values of the Functions for the variable <X>.
-    
-    Derivatives(me : in out                 ;
-               X  :        Vector from math;
-               D  :    out Matrix from math) returns Boolean;
-       ---Purpose: Returns the values of the derivatives for the variable <X>.
-    
-    Values(me : in out                 ;
-          X  :        Vector from math;
-          F  :    out Vector from math;
-          D  :    out Matrix from math)    returns Boolean;
-       ---Purpose: Returns the values of the functions and the derivatives
-       --          for the variable <X>.
-    
-fields
-
-Curv1   : TheCurve             ;
-Curv2   : TheCurve             ;
-Curv3   : TheCurve             ;
-Circ1   : Circ2d   from gp     ;
-Circ2   : Circ2d   from gp     ;
-Lin1    : Lin2d    from gp     ;
-Lin2    : Lin2d    from gp     ;
-TheType : Type1    from GccIter;
-
-end FunctionTanCuCuCu;
-
diff --git a/src/GccIter/GccIter_FunctionTanCuCuCu.gxx b/src/GccIter/GccIter_FunctionTanCuCuCu.gxx
deleted file mode 100644 (file)
index 230ebe7..0000000
+++ /dev/null
@@ -1,480 +0,0 @@
-// Created on: 1992-01-20
-// Created by: Remi GILET
-// Copyright (c) 1992-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.
-
-#include <Standard_ConstructionError.hxx>
-#include <ElCLib.hxx>
-#include <gp.hxx>
-
-void GccIter_FunctionTanCuCuCu::
-  InitDerivative(const math_Vector&  X,
-                      gp_Pnt2d&     Point1,
-                      gp_Pnt2d&     Point2,
-                      gp_Pnt2d&     Point3,
-                      gp_Vec2d&     Tan1,
-                      gp_Vec2d&     Tan2,
-                      gp_Vec2d&     Tan3,
-                      gp_Vec2d&     D21,
-                      gp_Vec2d&     D22,
-                      gp_Vec2d&     D23) {
-  switch (TheType) {
-  case GccIter_CiCuCu:
-    {
-      ElCLib::D2(X(1),Circ1,Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      TheCurveTool::D2(Curv3,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CiCiCu:
-    {
-      ElCLib::D2(X(1),Circ1,Point1,Tan1,D21);
-      ElCLib::D2(X(2),Circ2,Point2,Tan2,D22);
-      TheCurveTool::D2(Curv3,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CiLiCu:
-    {
-      ElCLib::D2(X(1),Circ1,Point1,Tan1,D21);
-      ElCLib::D1(X(2),Lin2,Point2,Tan2);
-      D22 = gp_Vec2d(0.,0.);
-      TheCurveTool::D2(Curv3,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_LiCuCu:
-    {
-      ElCLib::D1(X(1),Lin1,Point1,Tan1);
-      D21 = gp_Vec2d(0.,0.);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      TheCurveTool::D2(Curv3,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_LiLiCu:
-    {
-      ElCLib::D1(X(1),Lin1,Point1,Tan1);
-      D21 = gp_Vec2d(0.,0.);
-      ElCLib::D1(X(2),Lin2,Point2,Tan2);
-      D22 = gp_Vec2d(0.,0.);
-      TheCurveTool::D2(Curv3,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CuCuCu:
-    {
-      TheCurveTool::D2(Curv1,X(1),Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      TheCurveTool::D2(Curv3,X(3),Point3,Tan3,D23);
-    }
-    break;
-  default:
-    {
-      Standard_ConstructionError::Raise();
-    }
-  }
-}
-
-GccIter_FunctionTanCuCuCu::
-  GccIter_FunctionTanCuCuCu(const TheCurve& C1  ,
-                             const TheCurve& C2  ,
-                             const TheCurve& C3  ) {
-  Curv1 = C1;
-  Curv2 = C2;
-  Curv3 = C3;
-  TheType = GccIter_CuCuCu;
-}
-
-GccIter_FunctionTanCuCuCu::
-  GccIter_FunctionTanCuCuCu(const gp_Circ2d& C1  ,
-                             const TheCurve&  C2  ,
-                             const TheCurve&  C3  ) {
-  Circ1 = C1;
-  Curv2 = C2;
-  Curv3 = C3;
-  TheType = GccIter_CiCuCu;
-}
-
-GccIter_FunctionTanCuCuCu::
-  GccIter_FunctionTanCuCuCu(const gp_Circ2d& C1  ,
-                             const gp_Circ2d& C2  ,
-                             const TheCurve&  C3  ) {
-  Circ1 = C1;
-  Circ2 = C2;
-  Curv3 = C3;
-  TheType = GccIter_CiCiCu;
-}
-
-GccIter_FunctionTanCuCuCu::
-  GccIter_FunctionTanCuCuCu(const gp_Circ2d& C1  ,
-                             const gp_Lin2d&  L2  ,
-                             const TheCurve&  C3  ) {
-  Circ1 = C1;
-  Lin2 = L2;
-  Curv3 = C3;
-  TheType = GccIter_CiLiCu;
-}
-
-GccIter_FunctionTanCuCuCu::
-  GccIter_FunctionTanCuCuCu(const gp_Lin2d& L1  ,
-                             const gp_Lin2d& L2  ,
-                             const TheCurve& C3  ) {
-  Lin1 = L1;
-  Lin2 = L2;
-  Curv3 = C3;
-  TheType = GccIter_LiLiCu;
-}
-
-GccIter_FunctionTanCuCuCu::
-  GccIter_FunctionTanCuCuCu(const gp_Lin2d& L1  ,
-                             const TheCurve& C2  ,
-                             const TheCurve& C3  ) {
-  Lin1 = L1;
-  Curv2 = C2;
-  Curv3 = C3;
-  TheType = GccIter_LiCuCu;
-}
-
-//==========================================================================
-
-Standard_Integer GccIter_FunctionTanCuCuCu::
-  NbVariables () const { return 3; }
-
-Standard_Integer GccIter_FunctionTanCuCuCu::
-  NbEquations () const { return 3; }
-
-Standard_Boolean GccIter_FunctionTanCuCuCu::
-  Value (const math_Vector& X    ,
-              math_Vector& Fval ) {
-  gp_Pnt2d Point1;
-  gp_Pnt2d Point2;
-  gp_Pnt2d Point3;
-  gp_Vec2d Tan1;
-  gp_Vec2d Tan2;
-  gp_Vec2d Tan3;
-  gp_Vec2d D21;
-  gp_Vec2d D22;
-  gp_Vec2d D23;
-  InitDerivative(X,Point1,Point2,Point3,Tan1,Tan2,Tan3,D21,D22,D23);
-//pipj (normes) et PiPj (non Normes).
-  gp_XY P1P2(gp_Vec2d(Point1,Point2).XY());
-  gp_XY P2P3(gp_Vec2d(Point2,Point3).XY());
-  gp_XY P3P1(gp_Vec2d(Point3,Point1).XY());
-  Standard_Real NorP1P2 = P1P2.Modulus();
-  Standard_Real NorP2P3 = P2P3.Modulus();
-  Standard_Real NorP3P1 = P3P1.Modulus();
-  gp_XY p1p2,p2p3,p3p1;
-  if (NorP1P2 >= gp::Resolution()) { p1p2 = P1P2/NorP1P2; }
-  else { p1p2 = gp_XY(0.,0.); }
-  if (NorP2P3 >= gp::Resolution()) { p2p3 = P2P3/NorP2P3; }
-  else { p2p3 = gp_XY(0.,0.); }
-  if (NorP3P1 >= gp::Resolution()) { p3p1 = P3P1/NorP3P1; }
-  else { p3p1 = gp_XY(0.,0.); }
-//derivees premieres non normees Deriv1ui.
-  gp_XY Deriv1u1(Tan1.XY());
-  gp_XY Deriv1u2(Tan2.XY());
-  gp_XY Deriv1u3(Tan3.XY());
-//normales aux courbes.
-  Standard_Real nnor1 = Deriv1u1.Modulus();
-  Standard_Real nnor2 = Deriv1u2.Modulus();
-  Standard_Real nnor3 = Deriv1u3.Modulus();
-  gp_XY Nor1(-Deriv1u1.Y(),Deriv1u1.X());
-  gp_XY Nor2(-Deriv1u2.Y(),Deriv1u2.X());
-  gp_XY Nor3(-Deriv1u3.Y(),Deriv1u3.X());
-  gp_XY nor1,nor2,nor3;
-  if (nnor1 >= gp::Resolution()) { nor1 = Nor1/nnor1; }
-  else { nor1 = gp_XY(0.,0.); }
-  if (nnor2 >= gp::Resolution()) { nor2 = Nor2/nnor2; }
-  else { nor2 = gp_XY(0.,0.); }
-  if (nnor3 >= gp::Resolution()) { nor3 = Nor3/nnor3; }
-  else { nor3 = gp_XY(0.,0.); }
-//determination des signes pour les produits scalaires.
-  Standard_Real signe1 = 1.;
-  Standard_Real signe2 = 1.;
-  Standard_Real signe3 = 1.;
-  gp_Pnt2d Pcenter(gp_XY(Point1.XY()+Point2.XY()+Point3.XY())/3.);
-  gp_XY fic1(Pcenter.XY()-Point1.XY());
-  gp_XY fic2(Pcenter.XY()-Point2.XY());
-  gp_XY fic3(Pcenter.XY()-Point3.XY());
-  Standard_Real pscal11 = nor1.Dot(fic1);
-  Standard_Real pscal22 = nor2.Dot(fic2);
-  Standard_Real pscal33 = nor3.Dot(fic3);
-  if (pscal11 <= 0.) { signe1 = -1; }
-  if (pscal22 <= 0.) { signe2 = -1; }
-  if (pscal33 <= 0.) { signe3 = -1; }
-// Fonctions Fui.
-// ==============
-  Fval(1) = signe1*nor1.Dot(p1p2)+signe2*nor2.Dot(p1p2);
-  Fval(2) = signe2*nor2.Dot(p2p3)+signe3*nor3.Dot(p2p3);
-  Fval(3) = signe3*nor3.Dot(p3p1)+signe1*nor1.Dot(p3p1);
-  return Standard_True;
-}
-
-
-
-Standard_Boolean GccIter_FunctionTanCuCuCu::Derivatives (const math_Vector&,
-                                                            math_Matrix&) 
-{
-#if 0
-  gp_Pnt2d Point1;
-  gp_Pnt2d Point2;
-  gp_Pnt2d Point3;
-  gp_Vec2d Tan1;
-  gp_Vec2d Tan2;
-  gp_Vec2d Tan3;
-  gp_Vec2d D21;
-  gp_Vec2d D22;
-  gp_Vec2d D23;
-  InitDerivative(X,Point1,Point2,Point3,Tan1,Tan2,Tan3,D21,D22,D23);
-//derivees premieres non normees Deriv1ui.
-  gp_XY Deriv1u1(Tan1.XY());
-  gp_XY Deriv1u2(Tan2.XY());
-  gp_XY Deriv1u3(Tan3.XY());
-//pipj (normes) et PiPj (non Normes).
-  gp_XY P1P2(gp_Vec2d(Point1,Point2).XY());
-  gp_XY P2P3(gp_Vec2d(Point2,Point3).XY());
-  gp_XY P3P1(gp_Vec2d(Point3,Point1).XY());
-  Standard_Real NorP1P2 = P1P2.Modulus();
-  Standard_Real NorP2P3 = P2P3.Modulus();
-  Standard_Real NorP3P1 = P3P1.Modulus();
-  gp_XY p1p2,p2p3,p3p1;
-  if (NorP1P2 >= gp::Resolution()) { p1p2 = P1P2/NorP1P2; }
-  else { p1p2 = gp_XY(0.,0.); }
-  if (NorP2P3 >= gp::Resolution()) { p2p3 = P2P3/NorP2P3; }
-  else { p2p3 = gp_XY(0.,0.); }
-  if (NorP3P1 >= gp::Resolution()) { p3p1 = P3P1/NorP3P1; }
-  else { p3p1 = gp_XY(0.,0.); }
-//normales au courbes normees Nori et non nromees nori et norme des nori.
-  Standard_Real nnor1 = Deriv1u1.Modulus();
-  Standard_Real nnor2 = Deriv1u2.Modulus();
-  Standard_Real nnor3 = Deriv1u3.Modulus();
-  gp_XY Nor1(-Deriv1u1.Y(),Deriv1u1.X());
-  gp_XY Nor2(-Deriv1u2.Y(),Deriv1u2.X());
-  gp_XY Nor3(-Deriv1u3.Y(),Deriv1u3.X());
-  gp_XY nor1,nor2,nor3;
-  if (nnor1 >= gp::Resolution()) { nor1 = Nor1/nnor1; }
-  else { nor1 = gp_XY(0.,0.); }
-  if (nnor2 >= gp::Resolution()) { nor2 = Nor2/nnor2; }
-  else { nor2 = gp_XY(0.,0.); }
-  if (nnor3 >= gp::Resolution()) { nor3 = Nor3/nnor3; }
-  else { nor3 = gp_XY(0.,0.); }
-//derivees des normales.
-  gp_XY NorD21,NorD22,NorD23;
-  NorD21 = gp_XY(-D21.Y(),D21.X());
-  NorD22 = gp_XY(-D22.Y(),D22.X());
-  NorD23 = gp_XY(-D23.Y(),D23.X());
-//determination des signes pour les produits scalaires.
-  Standard_Real signe1 = 1.;
-  Standard_Real signe2 = 1.;
-  Standard_Real signe3 = 1.;
-  gp_XY P = Point1.XY();
-  P += Point2.XY();
-  P += Point3.XY();
-  P /= 3.;
-  gp_Pnt2d Pcenter(P);
-  gp_XY fic1 = Pcenter.XY();
-  fic1 -= Point1.XY();
-  gp_XY fic2 = Pcenter.XY();
-  fic2 -= Point2.XY();
-  gp_XY fic3 = Pcenter.XY();
-  fic3 -= Point3.XY();
-  Standard_Real pscal11 = nor1.Dot(fic1);
-  Standard_Real pscal22 = nor2.Dot(fic2);
-  Standard_Real pscal33 = nor3.Dot(fic3);
-  if (pscal11 <= 0.) { signe1 = -1; }
-  if (pscal22 <= 0.) { signe2 = -1; }
-  if (pscal33 <= 0.) { signe3 = -1; }
-
-// Derivees dFui/uj  1 <= ui <= 3 , 1 <= uj <= 3
-// =============================================
-  Standard_Real partie1,partie2;
-  if (nnor1 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1 = (signe1*NorD21/nnor1-(Nor1.Dot(NorD21)/(nnor1*nnor1*nnor1))
-                    *Nor1).Dot(p1p2); }
-  if (NorP1P2 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((Deriv1u1.Dot(p1p2)/(NorP1P2*NorP1P2))*P1P2-Deriv1u1/NorP1P2)
-         .Dot(signe1*nor1+signe2*nor2); }
-  Deriv(1,1) = partie1 + partie2;
-  if (nnor2 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=(signe2*NorD22/(nnor2)-(Nor2.Dot(NorD22)/(nnor2*nnor2*nnor2))
-                       *Nor2).Dot(p1p2); }
-  if (NorP1P2 <= gp::Resolution()) { partie2 = 0.; }
-  else{partie2=((-Deriv1u2.Dot(p1p2)/(NorP1P2*NorP1P2))*P1P2+Deriv1u2/NorP1P2)
-        .Dot(signe1*nor1+signe2*nor2); }
-  Deriv(1,2) = partie1 + partie2;
-  Deriv(1,3) = 0.;
-  Deriv(2,1) = 0.;
-  if (nnor2 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=(signe2*NorD22/(nnor2)-(Nor2.Dot(NorD22)/(nnor2*nnor2*nnor2))
-                 *Nor2).Dot(p2p3); }
-  if (NorP2P3 <= gp::Resolution()) { partie2 = 0.; }
-  else { partie2=((Deriv1u2.Dot(p2p3)/(NorP2P3*NorP2P3))*P2P3-Deriv1u2/NorP2P3)
-          .Dot(signe2*nor2+signe3*nor3); }
-  Deriv(2,2) = partie1 +partie2;
-  if (nnor3 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=(signe3*NorD23/(nnor3)-(Nor3.Dot(NorD23)/(nnor3*nnor3*nnor3))
-                 *Nor3).Dot(p2p3); }
-  if (NorP2P3 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((-Deriv1u3.Dot(p2p3)/(NorP2P3*NorP2P3))*P2P3+Deriv1u3/NorP2P3)
-         .Dot(signe2*nor2+signe3*nor3); }
-  Deriv(2,3) = partie1 + partie2;
-  if (nnor1 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1 =(signe1*NorD21/(nnor1)-(Nor1.Dot(NorD21)/(nnor1*nnor1*nnor1))
-                  *Nor1).Dot(p3p1); }
-  if (NorP3P1 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((-Deriv1u1.Dot(p3p1)/(NorP3P1*NorP3P1))*P3P1+Deriv1u1/NorP3P1)
-         .Dot(signe1*nor1+signe3*nor3); }
-  Deriv(3,1) = partie1 + partie2;
-  Deriv(3,2) = 0.;
-  if (nnor3 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=(signe3*NorD23/(nnor3)-(Nor3.Dot(NorD23)/(nnor3*nnor3*nnor3))
-                 *Nor3).Dot(p3p1); }
-  if (NorP3P1 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((Deriv1u3.Dot(p3p1)/(NorP3P1*NorP3P1))*P3P1-Deriv1u3/NorP3P1)
-         .Dot(signe1*nor1+signe3*nor3); }
-  Deriv(3,3) = partie1+partie2;
-#endif
-  return Standard_True;
-}
-
-
-Standard_Boolean GccIter_FunctionTanCuCuCu:: Values (const math_Vector&,
-                                                        math_Vector&,
-                                                        math_Matrix& ) 
-{
-#if 0
-  gp_Pnt2d Point1;
-  gp_Pnt2d Point2;
-  gp_Pnt2d Point3;
-  gp_Vec2d Tan1;
-  gp_Vec2d Tan2;
-  gp_Vec2d Tan3;
-  gp_Vec2d D21;
-  gp_Vec2d D22;
-  gp_Vec2d D23;
-  InitDerivative(X,Point1,Point2,Point3,Tan1,Tan2,Tan3,D21,D22,D23);
-//derivees premieres non normees Deriv1ui.
-  gp_XY Deriv1u1(Tan1.XY());
-  gp_XY Deriv1u2(Tan2.XY());
-  gp_XY Deriv1u3(Tan3.XY());
-//pipj (normes) et PiPj (non Normes).
-  gp_XY P1P2(gp_Vec2d(Point1,Point2).XY());
-  gp_XY P2P3(gp_Vec2d(Point2,Point3).XY());
-  gp_XY P3P1(gp_Vec2d(Point3,Point1).XY());
-  Standard_Real NorP1P2 = P1P2.Modulus();
-  Standard_Real NorP2P3 = P2P3.Modulus();
-  Standard_Real NorP3P1 = P3P1.Modulus();
-  gp_XY p1p2,p2p3,p3p1;
-  if (NorP1P2 >= gp::Resolution()) { p1p2 = P1P2/NorP1P2; }
-  else { p1p2 = gp_XY(0.,0.); }
-  if (NorP2P3 >= gp::Resolution()) { p2p3 = P2P3/NorP2P3; }
-  else { p2p3 = gp_XY(0.,0.); }
-  if (NorP3P1 >= gp::Resolution()) { p3p1 = P3P1/NorP3P1; }
-  else { p3p1 = gp_XY(0.,0.); }
-//normales au courbes normees Nori et non nromees nori et norme des nori.
-  Standard_Real nnor1 = Deriv1u1.Modulus();
-  Standard_Real nnor2 = Deriv1u2.Modulus();
-  Standard_Real nnor3 = Deriv1u3.Modulus();
-  gp_XY Nor1(-Deriv1u1.Y(),Deriv1u1.X());
-  gp_XY Nor2(-Deriv1u2.Y(),Deriv1u2.X());
-  gp_XY Nor3(-Deriv1u3.Y(),Deriv1u3.X());
-  gp_XY nor1,nor2,nor3;
-  if (nnor1 >= gp::Resolution()) { nor1 = Nor1/nnor1; }
-  else { nor1 = gp_XY(0.,0.); }
-  if (nnor2 >= gp::Resolution()) { nor2 = Nor2/nnor2; }
-  else { nor2 = gp_XY(0.,0.); }
-  if (nnor3 >= gp::Resolution()) { nor3 = Nor3/nnor3; }
-  else { nor3 = gp_XY(0.,0.); }
-//derivees des normales.
-  gp_XY NorD21,NorD22,NorD23;
-  NorD21 = gp_XY(-D21.Y(),D21.X());
-  NorD22 = gp_XY(-D22.Y(),D22.X());
-  NorD23 = gp_XY(-D23.Y(),D23.X());
-//determination des signes pour les produits scalaires.
-  Standard_Real signe1 = 1.;
-  Standard_Real signe2 = 1.;
-  Standard_Real signe3 = 1.;
-  gp_XY P = Point1.XY();
-  P += Point2.XY();
-  P += Point3.XY();
-  P /= 3.;
-  gp_Pnt2d Pcenter(P);
-  gp_XY fic1 = Pcenter.XY();
-  fic1 -= Point1.XY();
-  gp_XY fic2 = Pcenter.XY();
-  fic2 -= Point2.XY();
-  gp_XY fic3 = Pcenter.XY();
-  fic3 -= Point3.XY();
-  Standard_Real pscal11 = nor1.Dot(fic1);
-  Standard_Real pscal22 = nor2.Dot(fic2);
-  Standard_Real pscal33 = nor3.Dot(fic3);
-  if (pscal11 <= 0.) { signe1 = -1; }
-  if (pscal22 <= 0.) { signe2 = -1; }
-  if (pscal33 <= 0.) { signe3 = -1; }
-
-// Fonctions Fui.
-// ==============
-  Fval(1) = signe1*nor1.Dot(p1p2)+signe2*nor2.Dot(p1p2);
-  Fval(2) = signe2*nor2.Dot(p2p3)+signe3*nor3.Dot(p2p3);
-  Fval(3) = signe3*nor3.Dot(p3p1)+signe1*nor1.Dot(p3p1);
-// Derivees dFui/uj  1 <= ui <= 3 , 1 <= uj <= 3
-// =============================================
-  Standard_Real partie1,partie2;
-  if (nnor1 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1 = signe1*(NorD21/nnor1-(Nor1.Dot(NorD21)/(nnor1*nnor1*nnor1))
-                    *Nor1).Dot(p1p2); }
-  if (NorP1P2 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((Deriv1u1.Dot(p1p2)/(NorP1P2*NorP1P2))*P1P2-Deriv1u1/NorP1P2)
-         .Dot(signe1*nor1+signe2*nor2); }
-  Deriv(1,1) = partie1 + partie2;
-  if (nnor2 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=signe2*(NorD22/(nnor2)-(Nor2.Dot(NorD22)/(nnor2*nnor2*nnor2))
-                       *Nor2).Dot(p1p2); }
-  if (NorP1P2 <= gp::Resolution()) { partie2 = 0.; }
-  else{partie2=((-Deriv1u2.Dot(p1p2)/(NorP1P2*NorP1P2))*P1P2+Deriv1u2/NorP1P2)
-        .Dot(signe1*nor1+signe2*nor2); }
-  Deriv(1,2) = partie1 + partie2;
-  Deriv(1,3) = 0.;
-  Deriv(2,1) = 0.;
-  if (nnor2 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=signe2*(NorD22/(nnor2)-(Nor2.Dot(NorD22)/(nnor2*nnor2*nnor2))
-                 *Nor2).Dot(p2p3); }
-  if (NorP2P3 <= gp::Resolution()) { partie2 = 0.; }
-  else { partie2=((Deriv1u2.Dot(p2p3)/(NorP2P3*NorP2P3))*P2P3-Deriv1u2/NorP2P3)
-          .Dot(signe2*nor2+signe3*nor3); }
-  Deriv(2,2) = partie1 +partie2;
-  if (nnor3 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=signe3*(NorD23/(nnor3)-(Nor3.Dot(NorD23)/(nnor3*nnor3*nnor3))
-                 *Nor3).Dot(p2p3); }
-  if (NorP2P3 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((-Deriv1u3.Dot(p2p3)/(NorP2P3*NorP2P3))*P2P3+Deriv1u3/NorP2P3)
-         .Dot(signe2*nor2+signe3*nor3); }
-  Deriv(2,3) = partie1 + partie2;
-  if (nnor1 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1 =signe1*(NorD21/(nnor1)-(Nor1.Dot(NorD21)/(nnor1*nnor1*nnor1))
-                  *Nor1).Dot(p3p1); }
-  if (NorP3P1 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((-Deriv1u1.Dot(p3p1)/(NorP3P1*NorP3P1))*P3P1+Deriv1u1/NorP3P1)
-         .Dot(signe1*nor1+signe3*nor3); }
-  Deriv(3,1) = partie1 + partie2;
-  Deriv(3,2) = 0.;
-  if (nnor3 <= gp::Resolution()) { partie1 = 0.; }
-  else { partie1=signe3*(NorD23/(nnor3)-(Nor3.Dot(NorD23)/(nnor3*nnor3*nnor3))
-                 *Nor3).Dot(p3p1); }
-  if (NorP3P1 <= gp::Resolution()) { partie2 = 0.; }
-  else {partie2=((Deriv1u3.Dot(p3p1)/(NorP3P1*NorP3P1))*P3P1-Deriv1u3/NorP3P1)
-         .Dot(signe1*nor1+signe3*nor3); }
-  Deriv(3,3) = partie1+partie2;
-#endif
-  return Standard_True;
-}
-
-
diff --git a/src/GccIter/GccIter_FunctionTanCuCuOnCu.cdl b/src/GccIter/GccIter_FunctionTanCuCuOnCu.cdl
deleted file mode 100644 (file)
index 78506ce..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
--- Created on: 1991-05-13
--- Created by: Laurent PAINNOT
--- Copyright (c) 1991-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.
-
-generic class FunctionTanCuCuOnCu from GccIter (
-    TheCurve     as any;
-    TheCurveTool as any) -- as CurvePGTool from GccInt (TheCurve)
-
-inherits FunctionSetWithDerivatives from math
-
-    ---Purpose: This abstract class describes a set on N Functions of 
-    --          M independant variables.
-
-uses Vector from math,
-     Matrix from math,
-     Circ2d from gp,
-     Lin2d  from gp,
-     Pnt2d  from gp,
-     Vec2d  from gp,
-     Type2  from GccIter
-
-raises ConstructionError
-
-is
-
-    Create (C1    : TheCurve               ;
-           C2    : TheCurve               ;
-           OnCi  : Circ2d   from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (C1    : Circ2d   from gp       ;
-           C2    : TheCurve               ;
-           OnCi  : Circ2d   from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (L1    : Lin2d    from gp       ;
-           C2    : TheCurve               ;
-           OnCi  : Circ2d   from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (C1    : TheCurve               ;
-           P2    : Pnt2d    from gp       ;
-           OnCi  : Circ2d   from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-------------------------------------------------------------------------
-
-    Create (C1    : TheCurve               ;
-           C2    : TheCurve               ;
-           OnLi  : Lin2d    from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (C1    : Circ2d   from gp       ;
-           C2    : TheCurve               ;
-           OnLi  : Lin2d    from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (L1    : Lin2d    from gp       ;
-           C2    : TheCurve               ;
-           OnLi  : Lin2d    from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (C1    : TheCurve               ;
-           P2    : Pnt2d    from gp       ;
-           OnLi  : Lin2d    from gp       ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
------------------------------------------------------------------------
-
-    Create (C1    : TheCurve               ;
-           C2    : TheCurve               ;
-           OnCu  : TheCurve               ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (C1    : Circ2d   from gp       ;
-           C2    : TheCurve               ;
-           OnCu  : TheCurve               ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (L1    : Lin2d    from gp       ;
-           C2    : TheCurve               ;
-           OnCu  : TheCurve               ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-    Create (C1    : TheCurve               ;
-           P1    : Pnt2d    from gp       ;
-           OnCu  : TheCurve               ;
-           Rad   : Real     from Standard ) 
-returns FunctionTanCuCuOnCu from GccIter;
-
-InitDerivative(me                         : in out                      ;
-              X                          :        Vector from math     ;
-              Point1,Point2,Point3       :    out Pnt2d  from gp       ;
-              Tan1,Tan2,Tan3,D21,D22,D23 :    out Vec2d  from gp       )
-raises ConstructionError
-is static;
-
-    NbVariables(me) returns Integer;
-       ---Purpose: Returns the number of variables of the function.
-
-    NbEquations(me) returns Integer;
-       ---Purpose: Returns the number of equations of the function.
-
-    Value(me : in out                 ; 
-         X  :        Vector from math; 
-         F  :    out Vector from math) returns Boolean;
-       ---Purpose: Computes the values of the Functions for the variable <X>.
-    
-    Derivatives(me : in out                 ;
-               X  :        Vector from math;
-               D  :    out Matrix from math) returns Boolean;
-       ---Purpose: Returns the values of the derivatives for the variable <X>.
-    
-    Values(me : in out                 ;
-          X  :        Vector from math;
-          F  :    out Vector from math;
-          D  :    out Matrix from math)    returns Boolean;
-       ---Purpose: Returns the values of the functions and the derivatives
-       --          for the variable <X>.
-    
-fields
-
-Curv1    : TheCurve               ;
-Curv2    : TheCurve               ;
-Circ1    : Circ2d   from gp       ;
-Lin1     : Lin2d    from gp       ;
-Pnt2     : Pnt2d    from gp       ;
-Circon   : Circ2d   from gp       ;
-Linon    : Lin2d    from gp       ;
-Curvon   : TheCurve               ;
-FirstRad : Real     from Standard ;
-TheType  : Type2    from GccIter  ;
-
-end FunctionTanCuCuOnCu;
-
diff --git a/src/GccIter/GccIter_FunctionTanCuCuOnCu.gxx b/src/GccIter/GccIter_FunctionTanCuCuOnCu.gxx
deleted file mode 100644 (file)
index 5c05f57..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-// Created on: 1992-01-20
-// Created by: Remi GILET
-// Copyright (c) 1992-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.
-
-#include <Standard_ConstructionError.hxx>
-#include <ElCLib.hxx>
-
-void GccIter_FunctionTanCuCuOnCu::
-  InitDerivative(const math_Vector&  X,
-                      gp_Pnt2d&     Point1,
-                      gp_Pnt2d&     Point2,
-                      gp_Pnt2d&     Point3,
-                      gp_Vec2d&     Tan1,
-                      gp_Vec2d&     Tan2,
-                      gp_Vec2d&     Tan3,
-                      gp_Vec2d&     D21,
-                      gp_Vec2d&     D22,
-                      gp_Vec2d&     D23) {
-  switch (TheType) {
-  case GccIter_CuCuOnCu:
-    {
-      TheCurveTool::D2(Curv1,X(1),Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      TheCurveTool::D2(Curvon,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CiCuOnCu:
-    {
-      ElCLib::D2(X(1),Circ1,Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      TheCurveTool::D2(Curvon,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_LiCuOnCu:
-    {
-      ElCLib::D1(X(1),Lin1,Point1,Tan1);
-      D21 = gp_Vec2d(0.,0.);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      TheCurveTool::D2(Curvon,X(3),Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CuPtOnCu:
-    {
-      TheCurveTool::D2(Curv1,X(1),Point1,Tan1,D21);
-      TheCurveTool::D2(Curvon,X(3),Point3,Tan3,D23);
-      Point2 = Pnt2;
-      Tan2 = gp_Vec2d(0.,0.);
-      D22 = gp_Vec2d(0.,0.);
-    }
-    break;
-  case GccIter_CuCuOnCi:
-    {
-      TheCurveTool::D2(Curv1,X(1),Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      ElCLib::D2(X(3),Circon,Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CiCuOnCi:
-    {
-      ElCLib::D2(X(1),Circ1,Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      ElCLib::D2(X(3),Circon,Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_LiCuOnCi:
-    {
-      ElCLib::D1(X(1),Lin1,Point1,Tan1);
-      D21 = gp_Vec2d(0.,0.);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      ElCLib::D2(X(3),Circon,Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CuPtOnCi:
-    {
-      TheCurveTool::D2(Curv1,X(1),Point1,Tan1,D21);
-      Point2 = Pnt2;
-      Tan2 = gp_Vec2d(0.,0.);
-      D22 = gp_Vec2d(0.,0.);
-      ElCLib::D2(X(3),Circon,Point3,Tan3,D23);
-    }
-    break;
-  case GccIter_CuCuOnLi:
-    {
-      TheCurveTool::D2(Curv1,X(1),Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      ElCLib::D1(X(3),Linon,Point3,Tan3);
-      D23 = gp_Vec2d(0.,0.);
-    }
-    break;
-  case GccIter_CiCuOnLi:
-    {
-      ElCLib::D2(X(1),Circ1,Point1,Tan1,D21);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      ElCLib::D1(X(3),Linon,Point3,Tan3);
-      D23 = gp_Vec2d(0.,0.);
-    }
-    break;
-  case GccIter_LiCuOnLi:
-    {
-      ElCLib::D1(X(1),Lin1,Point1,Tan1);
-      TheCurveTool::D2(Curv2,X(2),Point2,Tan2,D22);
-      D21 = gp_Vec2d(0.,0.);
-      ElCLib::D1(X(3),Linon,Point3,Tan3);
-      D23 = gp_Vec2d(0.,0.);
-    }
-    break;
-  case GccIter_CuPtOnLi:
-    {
-      TheCurveTool::D2(Curv1,X(1),Point1,Tan1,D21);
-      Point2 = Pnt2;
-      Tan2 = gp_Vec2d(0.,0.);
-      D22 = gp_Vec2d(0.,0.);
-      ElCLib::D1(X(3),Linon,Point3,Tan3);
-      D23 = gp_Vec2d(0.,0.);
-    }
-    break;
-  default:
-    {
-      Standard_ConstructionError::Raise();
-    }
-  }
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const TheCurve&     C1  ,
-                            const TheCurve&     C2  ,
-                            const TheCurve&     C3  ,
-                            const Standard_Real Rad ) {
-  Curv1  = C1;
-  Curv2  = C2;
-  Curvon = C3;
-  FirstRad = Rad;
-  TheType = GccIter_CuCuOnCu;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const gp_Circ2d&    C1  ,
-                            const TheCurve&     C2  ,
-                            const TheCurve&     C3  ,
-                            const Standard_Real Rad ) {
-  Circ1  = C1;
-  Curv2  = C2;
-  Curvon = C3;
-  FirstRad = Rad;
-  TheType = GccIter_CiCuOnCu;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const gp_Lin2d&     L1  ,
-                            const TheCurve&     C2  ,
-                            const TheCurve&     C3  ,
-                            const Standard_Real Rad ) {
-  Lin1  = L1;
-  Curv2  = C2;
-  Curvon = C3;
-  FirstRad = Rad;
-  TheType = GccIter_LiCuOnCu;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const TheCurve& C1  ,
-                            const gp_Pnt2d&  P2  ,
-                            const TheCurve&  C3  ,
-                            const Standard_Real       Rad ) {
-  Curv1  = C1;
-  Pnt2  = P2;
-  Curvon = C3;
-  FirstRad = Rad;
-  TheType = GccIter_CuPtOnCu;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const TheCurve& C1   ,
-                            const TheCurve&  C2   ,
-                            const gp_Lin2d&  OnLi ,
-                            const Standard_Real       Rad  ) {
-  Curv1  = C1;
-  Curv2  = C2;
-  Linon = OnLi;
-  FirstRad = Rad;
-  TheType = GccIter_CuCuOnLi;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const gp_Circ2d&           C1   ,
-                              const TheCurve& C2   ,
-                              const gp_Lin2d&            OnLi ,
-                              const Standard_Real                 Rad  ) {
-  Circ1  = C1;
-  Curv2  = C2;
-  Linon = OnLi;
-  FirstRad = Rad;
-  TheType = GccIter_CiCuOnLi;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const gp_Lin2d& L1  ,
-                              const TheCurve&  C2  ,
-                              const gp_Lin2d&  OnLi ,
-                              const Standard_Real       Rad ) {
-  Lin1  = L1;
-  Curv2  = C2;
-  Linon = OnLi;
-  FirstRad = Rad;
-  TheType = GccIter_LiCuOnLi;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const TheCurve& C1  ,
-                              const gp_Pnt2d&            P2  ,
-                              const gp_Lin2d&            OnLi ,
-                              const Standard_Real                 Rad ) {
-  Curv1  = C1;
-  Pnt2  = P2;
-  Linon = OnLi;
-  FirstRad = Rad;
-  TheType = GccIter_CuPtOnLi;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const TheCurve& C1   ,
-                              const TheCurve& C2   ,
-                              const gp_Circ2d&           OnCi ,
-                              const Standard_Real                 Rad  ) {
-  Curv1  = C1;
-  Curv2  = C2;
-  Circon = OnCi;
-  FirstRad = Rad;
-  TheType = GccIter_CuCuOnCi;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const gp_Circ2d&           C1  ,
-                              const TheCurve& C2  ,
-                              const gp_Circ2d&           OnCi ,
-                              const Standard_Real                 Rad ) {
-  Circ1  = C1;
-  Curv2  = C2;
-  Circon = OnCi;
-  FirstRad = Rad;
-  TheType = GccIter_CuCuOnCi;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const gp_Lin2d& L1  ,
-                              const TheCurve&  C2  ,
-                              const gp_Circ2d& OnCi ,
-                              const Standard_Real       Rad ) {
-  Lin1  = L1;
-  Curv2  = C2;
-  Circon = OnCi;
-  FirstRad = Rad;
-  TheType = GccIter_LiCuOnCi;
-}
-
-GccIter_FunctionTanCuCuOnCu::
-  GccIter_FunctionTanCuCuOnCu(const TheCurve& C1  ,
-                              const gp_Pnt2d&            P2  ,
-                              const gp_Circ2d&           OnCi ,
-                              const Standard_Real                 Rad ) {
-  Curv1  = C1;
-  Pnt2  = P2;
-  Circon = OnCi;
-  FirstRad = Rad;
-  TheType = GccIter_CuPtOnCi;
-}
-
-Standard_Integer GccIter_FunctionTanCuCuOnCu::
-  NbVariables () const { return 4; }
-
-Standard_Integer GccIter_FunctionTanCuCuOnCu::
-  NbEquations () const { return 4; }
-
-Standard_Boolean GccIter_FunctionTanCuCuOnCu::
-  Value (const math_Vector& X    ,
-              math_Vector& Fval ) {
-  gp_Pnt2d Point1,Point2,Point3;
-  gp_Vec2d Tan1,Tan2,Tan3,D21,D22,D23;
-  InitDerivative(X,Point1,Point2,Point3,Tan1,Tan2,Tan3,D21,D22,D23);
-//pipj (normes) et PiPj (non Normes).
-  gp_Vec2d P1P2(Point1,Point2);
-  gp_Vec2d P2P3(Point2,Point3);
-  gp_Vec2d P3P1(Point3,Point1);
-  gp_Vec2d p1p2,p2p3,p3p1;
-//  if (FirstRad < 1.) {FirstRad = 1.; }
-  p1p2 = P1P2/FirstRad;
-  p2p3 = P2P3/FirstRad;
-  p3p1 = P3P1/FirstRad;
-//norme des Tani.
-  Standard_Real nnor1 = Tan1.Magnitude();
-  Standard_Real nnor2 = Tan2.Magnitude();
-// Fonctions Fui.
-// ==============
-  Fval(1) = (P3P1.Dot(P3P1)-X(4)*X(4))/(FirstRad*FirstRad);
-  Fval(2) = (P2P3.Dot(P2P3)-X(4)*X(4))/(FirstRad*FirstRad);
-  Fval(3) = P3P1.Dot(Tan1)/(nnor1*FirstRad);
-  Fval(4) = P2P3.Dot(Tan2)/(nnor2*FirstRad);
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCuCuOnCu::
-  Derivatives (const math_Vector& X     ,
-                    math_Matrix& Deriv ) {
-  gp_Pnt2d Point1,Point2,Point3;
-  gp_Vec2d Tan1,Tan2,Tan3;
-  gp_Vec2d D21,D22,D23;
-  InitDerivative(X,Point1,Point2,Point3,Tan1,Tan2,Tan3,D21,D22,D23);
-//pipj (normes) et PiPj (non Normes).
-  gp_Vec2d P1P2(Point1,Point2);
-  gp_Vec2d P2P3(Point2,Point3);
-  gp_Vec2d P3P1(Point3,Point1);
-  gp_Vec2d p1p2,p2p3,p3p1;
-//  if (FirstRad < 1.) {FirstRad = 1.; }
-  p1p2 = P1P2/FirstRad;
-  p2p3 = P2P3/FirstRad;
-  p3p1 = P3P1/FirstRad;
-//normales au courbes normees Nori et non nromees nori et norme des nori.
-  Standard_Real nnor1 = Tan1.Magnitude();
-  Standard_Real nnor2 = Tan2.Magnitude();
-// Derivees dFui/uj  1 <= ui <= 3 , 1 <= uj <= 3
-// =============================================
-  Deriv(1,1) = 2.*Tan1.Dot(P3P1)/(FirstRad*FirstRad);
-  Deriv(1,2) = 0.;
-  Deriv(1,3) = -2.*Tan3.Dot(P3P1)/(FirstRad*FirstRad);
-  Deriv(1,4) = -2.*X(4)/(FirstRad*FirstRad);
-
-  Deriv(2,1) = 0.;
-  Deriv(2,2) = -2.*Tan2.Dot(P2P3)/(FirstRad*FirstRad);
-  Deriv(2,3) = 2.*Tan3.Dot(P2P3)/(FirstRad*FirstRad);
-  Deriv(2,4) = -2.*X(4)/(FirstRad*FirstRad);
-
-  Deriv(3,1) = (P3P1.Dot(D21)+Tan1.Dot(Tan1))/(FirstRad*nnor1)-
-    (P3P1.Dot(Tan1)*D21.Dot(Tan1))/(FirstRad*nnor1*nnor1*nnor1);
-  Deriv(3,2) = 0.;
-  Deriv(3,3) = -(Tan3.Dot(Tan1))/(FirstRad*nnor1);
-  Deriv(3,4) = 0.;
-
-  Deriv(4,1) = 0.;
-  Deriv(4,2) = (P2P3.Dot(D22)-Tan2.Dot(Tan2))/(FirstRad*nnor2)-
-    P2P3.Dot(Tan2)*Tan2.Dot(D22)/(FirstRad*nnor2*nnor2*nnor2);
-  Deriv(4,3) = Tan3.Dot(Tan2)/(FirstRad*nnor1);
-  Deriv(4,4) = 0.;
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCuCuOnCu::
-  Values (const math_Vector& X     ,
-               math_Vector& Fval  ,
-               math_Matrix& Deriv ) {
-  gp_Pnt2d Point1,Point2,Point3;
-  gp_Vec2d Tan1,Tan2,Tan3;
-  gp_Vec2d D21,D22,D23;
-  InitDerivative(X,Point1,Point2,Point3,Tan1,Tan2,Tan3,D21,D22,D23);
-//pipj (normes) et PiPj (non Normes).
-  gp_Vec2d P1P2(Point1,Point2);
-  gp_Vec2d P2P3(Point2,Point3);
-  gp_Vec2d P3P1(Point3,Point1);
-  gp_Vec2d p1p2,p2p3,p3p1;
-//  if (FirstRad < 1.) {FirstRad = 1.; }
-  p1p2 = P1P2/FirstRad;
-  p2p3 = P2P3/FirstRad;
-  p3p1 = P3P1/FirstRad;
-//normales au courbes normees Nori et non nromees nori et norme des nori.
-  Standard_Real nnor1 = Tan1.Magnitude();
-  Standard_Real nnor2 = Tan2.Magnitude();
-// Fonctions Fui.
-// ==============
-  Fval(1) = (P3P1.Dot(P3P1)-X(4)*X(4))/(FirstRad*FirstRad);
-  Fval(2) = (P2P3.Dot(P2P3)-X(4)*X(4))/(FirstRad*FirstRad);
-  Fval(3) = P3P1.Dot(Tan1)/(nnor1*FirstRad);
-  Fval(4) = P2P3.Dot(Tan2)/(nnor2*FirstRad);
-// Derivees dFui/uj  1 <= ui <= 3 , 1 <= uj <= 3
-// =============================================
-  Deriv(1,1) = 2.*Tan1.Dot(P3P1)/(FirstRad*FirstRad);
-  Deriv(1,2) = 0.;
-  Deriv(1,3) = -2.*Tan3.Dot(P3P1)/(FirstRad*FirstRad);
-  Deriv(1,4) = -2.*X(4)/(FirstRad*FirstRad);
-
-  Deriv(2,1) = 0.;
-  Deriv(2,2) = -2.*Tan2.Dot(P2P3)/(FirstRad*FirstRad);
-  Deriv(2,3) = 2.*Tan3.Dot(P2P3)/(FirstRad*FirstRad);
-  Deriv(2,4) = -2.*X(4)/(FirstRad*FirstRad);
-
-  Deriv(3,1) = (P3P1.Dot(D21)+Tan1.Dot(Tan1))/(FirstRad*nnor1)-
-    (P3P1.Dot(Tan1)*D21.Dot(Tan1))/(FirstRad*nnor1*nnor1*nnor1);
-  Deriv(3,2) = 0.;
-  Deriv(3,3) = -(Tan3.Dot(Tan1))/(FirstRad*nnor1);
-  Deriv(3,4) = 0.;
-
-  Deriv(4,1) = 0.;
-  Deriv(4,2) = (P2P3.Dot(D22)-Tan2.Dot(Tan2))/(FirstRad*nnor2)-
-    P2P3.Dot(Tan2)*Tan2.Dot(D22)/(FirstRad*nnor2*nnor2*nnor2);
-  Deriv(4,3) = Tan3.Dot(Tan2)/(FirstRad*nnor1);
-  Deriv(4,4) = 0.;
-  return Standard_True;
-}
-
diff --git a/src/GccIter/GccIter_FunctionTanCuPnt.cdl b/src/GccIter/GccIter_FunctionTanCuPnt.cdl
deleted file mode 100644 (file)
index 0d7f306..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
--- Created on: 1992-02-20
--- Created by: Remy GILET
--- Copyright (c) 1992-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.
-
-generic class FunctionTanCuPnt from GccIter (
-    TheCurve     as any ;
-    TheCurveTool as any ) 
-
-inherits FunctionWithDerivative from math
-         
-    ---Purpose: This abstract class describes a Function of 1 Variable 
-    --          used to find a line tangent to a curve and passing 
-    --          through a point.
-
-uses Pnt2d from gp    
-
-is
-
-Create (C      : TheCurve         ;
-        Point  : Pnt2d    from gp ) returns FunctionTanCuPnt from GccIter;
-
-Value (me : in out      ;
-       X  :        Real ;
-       F  :    out Real ) returns Boolean;
-    ---Purpose: Computes the value of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Derivative (me    : in out      ;
-            X     :        Real ;
-            Deriv :    out Real ) returns Boolean;
-    ---Purpose: Computes the derivative of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Values (me    : in out      ;
-        X     :        Real ;
-        F     : out    Real ;
-        Deriv : out    Real ) returns Boolean;
-    ---Purpose: Computes the value and the derivative of the function F 
-    --          for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-fields
-
-TheCurv      : TheCurve;
-ThePoint     : Pnt2d from gp;
-
-end FunctionTanCuPnt;
diff --git a/src/GccIter/GccIter_FunctionTanCuPnt.gxx b/src/GccIter/GccIter_FunctionTanCuPnt.gxx
deleted file mode 100644 (file)
index 2ff8050..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-// Created on: 1992-01-20
-// Created by: Remi GILET
-// Copyright (c) 1992-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.
-
-#include <gp_Vec2d.hxx>
-#include <gp_Pnt2d.hxx>
-#include <gp_Vec.hxx>
-#include <gp_Pnt.hxx>
-
-//=========================================================================
-//  soit P1 le point sur la courbe TheCurve d abscisse u.                 +
-//  soit C  le point ThePoint.                                            +
-//  Nous cherchons donc les zeros de la fonction suivante:                +
-//                                                                        +
-//                 -->   -->                                              +
-//                 CP1 /\ T                                               +
-//             ---------------  =  F(u)                                   +
-//             ||CP1|| * ||T||                                            +
-//                                                                        +
-//  La derivee de cette fonction est :                                    +
-//            CP1 /\ N        (T.N)*((CP1/\T).((CP1/\T))                  +
-//     f(u) = --------  -  --------------------------------               +
-//               N.N            N*N*N*CP1*CP1*CP1                         +
-//=========================================================================
-
-GccIter_FunctionTanCuPnt::
-  GccIter_FunctionTanCuPnt(const TheCurve& C      ,
-                            const gp_Pnt2d& Point  ) {
-  TheCurv = C;
-  ThePoint = Point;
- }
-
-
-Standard_Boolean GccIter_FunctionTanCuPnt::
-  Value (const Standard_Real  X    ,
-              Standard_Real& Fval ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vect;
-  TheCurveTool::D1(TheCurv,X,Point,Vect);
-  Standard_Real NormeD1 = Vect.Magnitude();
-  gp_Vec2d TheDirection(ThePoint,Point);
-  Standard_Real NormeDir = TheDirection.Magnitude();
-  Fval = TheDirection.Crossed(Vect)/(NormeD1*NormeDir);
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCuPnt::
-  Derivative (const Standard_Real  X     ,
-                   Standard_Real& Deriv ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vec1;
-  gp_Vec2d Vec2;
-  TheCurveTool::D2(TheCurv,X,Point,Vec1,Vec2);
-  gp_Vec2d TheDirection(ThePoint.XY(),gp_XY(Point.XY()));
-  Standard_Real NormeD1 = Vec1.Magnitude();
-  Standard_Real NormeDir = TheDirection.Magnitude();
-  Deriv = TheDirection.Crossed(Vec2)/(NormeD1*NormeDir)-
-    (TheDirection.Crossed(Vec1)/(NormeD1*NormeDir))*
-      (Vec1.Dot(Vec2)/(NormeD1*NormeD1)+
-       Vec1.Dot(TheDirection)/(NormeDir*NormeDir));
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanCuPnt::
-  Values (const Standard_Real  X     ,
-               Standard_Real& Fval  ,
-               Standard_Real& Deriv ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vec1;
-  gp_Vec2d Vec2;
-  TheCurveTool::D2(TheCurv,X,Point,Vec1,Vec2);
-  gp_Vec2d TheDirection(ThePoint.XY(),gp_XY(Point.XY()));
-  Standard_Real NormeD1 = Vec1.Magnitude();
-  Standard_Real NormeDir = TheDirection.Magnitude();
-  Fval = TheDirection.Crossed(Vec1)/(NormeD1*NormeDir);
-  Deriv = TheDirection.Crossed(Vec2)/(NormeD1*NormeDir)-
-    (TheDirection.Crossed(Vec1)/(NormeD1*NormeDir))*
-      (Vec1.Dot(Vec2)/(NormeD1*NormeD1)+
-       Vec1.Dot(TheDirection)/(NormeDir*NormeDir));
-
-//  cout  << "U = "<< X << " F ="<< Fval <<" DF ="<< Deriv<<endl;
-
-  return Standard_True;
-}
diff --git a/src/GccIter/GccIter_FunctionTanObl.cdl b/src/GccIter/GccIter_FunctionTanObl.cdl
deleted file mode 100644 (file)
index 35d327a..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
--- Created on: 1992-01-09
--- Created by: Remi GILET
--- Copyright (c) 1992-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.
-
-generic class FunctionTanObl from GccIter (
-    TheCurve     as any;
-    TheCurveTool as any) -- as CurvePGTool from GccInt (TheCurve)
-
-inherits FunctionWithDerivative from math
-    ---Purpose: This class describe a function of a single variable.
-
-uses Dir2d from gp     
-
-     
-is
-
-Create (Curve : TheCurve      ;
-       Dir   : Dir2d from gp ) returns FunctionTanObl from GccIter;
-
-Value (me : in out      ;
-       X  :        Real ;
-       F  :    out Real ) returns Boolean;
-    ---Purpose: Computes the value of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Derivative (me    : in out      ;
-            X     :        Real ;
-            Deriv :    out Real ) returns Boolean;
-    ---Purpose: Computes the derivative of the function F for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-Values (me    : in out      ;
-        X     :        Real ;
-        F     : out    Real ;
-        Deriv : out    Real ) returns Boolean;
-    ---Purpose: Computes the value and the derivative of the function F 
-    --          for the variable X.
-    --          It returns True if the computation is successfully done,
-    --          False otherwise.
-
-fields
-
-TheCurv      : TheCurve        ;
-TheDirection : Dir2d    from gp;
-
-end FunctionTanObl;
-
-
-
-
-
-
diff --git a/src/GccIter/GccIter_FunctionTanObl.gxx b/src/GccIter/GccIter_FunctionTanObl.gxx
deleted file mode 100644 (file)
index 14159e4..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-// Created on: 1992-01-20
-// Created by: Remi GILET
-// Copyright (c) 1992-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.
-
-#include <gp_Vec2d.hxx>
-#include <gp_Pnt2d.hxx>
-
-GccIter_FunctionTanObl::
-  GccIter_FunctionTanObl(const TheCurve& C      ,
-                       const gp_Dir2d& Dir    ) {
-  TheCurv = C;
-  TheDirection = Dir;
- }
-
-
-Standard_Boolean GccIter_FunctionTanObl::
-  Value (const Standard_Real  X    ,
-              Standard_Real& Fval ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vect;
-  TheCurveTool::D1(TheCurv,X,Point,Vect);
-  Standard_Real NormeD1 = Vect.Magnitude();
-  Fval = TheDirection.XY().Crossed(Vect.XY())/NormeD1;
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanObl::
-  Derivative (const Standard_Real  X     ,
-                   Standard_Real& Deriv ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vec1;
-  gp_Vec2d Vec2;
-  TheCurveTool::D2(TheCurv,X,Point,Vec1,Vec2);
-  Standard_Real NormeD1 = Vec1.Magnitude();
-  Deriv = TheDirection.XY().Crossed(Vec2.XY())/NormeD1-
-      Vec1.XY().Dot(Vec2.XY())*TheDirection.XY().Crossed(Vec1.XY())/NormeD1;
-  return Standard_True;
-}
-
-Standard_Boolean GccIter_FunctionTanObl::
-  Values (const Standard_Real  X     ,
-               Standard_Real& Fval  ,
-               Standard_Real& Deriv ) {
-  gp_Pnt2d Point;
-  gp_Vec2d Vec1;
-  gp_Vec2d Vec2;
-  TheCurveTool::D2(TheCurv,X,Point,Vec1,Vec2);
-  Standard_Real NormeD1 = Vec1.Magnitude();
-  Fval = TheDirection.XY().Crossed(Vec1.XY())/NormeD1;
-  Deriv = TheDirection.XY().Crossed(Vec2.XY())/NormeD1-
-      Vec1.XY().Dot(Vec2.XY())*TheDirection.XY().Crossed(Vec1.XY())/NormeD1;
-  return Standard_True;
-}
-
diff --git a/src/GccIter/GccIter_Lin2d2Tan.cdl b/src/GccIter/GccIter_Lin2d2Tan.cdl
deleted file mode 100644 (file)
index 10a9e42..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
--- Created on: 1991-04-24
--- Created by: Remi GILET
--- Copyright (c) 1991-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.
-
-generic class Lin2d2Tan from GccIter (
-    TheCurve          as any;
-    TheCurveTool      as any;
-    TheQualifiedCurve as any) -- as QualifiedCurve from GccEnt
-                             --                  (TheCurve)
-
-       ---Purpose: This class implements the algorithms used to 
-       --          create 2d lines tangent to 2 other elements which
-       --          can be circles, curves or points.
-       --          More than one argument must be a curve.
-       --
-       -- Note: Some constructors may check the type of the qualified argument 
-       --         and raise BadQualifier Error in case of incorrect couple (qualifier,
-       --         curv).
-       --         For example: "EnclosedCirc".
-
-uses Pnt2d            from gp,
-     Lin2d            from gp,
-     QualifiedCirc    from GccEnt,
-     Position         from GccEnt
-
-raises BadQualifier from GccEnt,
-       NotDone      from StdFail
-
-
-private class FuncTCuCu instantiates FunctionTanCuCu from GccIter(
-                                           TheCurve,TheCurveTool);
-
-private class FuncTCuPt instantiates FunctionTanCuPnt from GccIter(
-                                           TheCurve,TheCurveTool);
-
-private class FuncTCirCu instantiates FunctionTanCirCu from GccIter(
-                                           TheCurve,TheCurveTool);
-is
-
-Create (Qualified1 : TheQualifiedCurve ;
-       ThePoint   : Pnt2d             ;
-        Param1     : Real              ;
-       Tolang     : Real              ) returns Lin2d2Tan from GccIter
-    ---Purpose: This class implements the algorithms used to create 2d 
-    --          lines passing thrue a point and tangent to a curve.
-    --          Tolang is used to determine the tolerance for the 
-    --          tangency points.
-    --          Param2 is used for the initial guess on the curve.
-raises BadQualifier from GccEnt;
-
-Create (Qualified1 : QualifiedCirc     ;
-        Qualified2 : TheQualifiedCurve ;
-       Param2     : Real              ;
-       Tolang     : Real              ) returns Lin2d2Tan from GccIter
-raises BadQualifier from GccEnt;
-    ---Purpose: This class implements the algorithms used to create 2d 
-    --          line tangent to a circle and to a cuve.
-    --          Tolang is used to determine the tolerance for the 
-    --          tangency points.
-    --          Param2 is used for the initial guess on the curve.
-    --          Exception BadQualifier is raised in the case of 
-    --          EnclosedCirc
-
-Create (Qualified1 : TheQualifiedCurve ;
-        Qualified2 : TheQualifiedCurve ;
-       Param1     : Real              ;
-       Param2     : Real              ;
-       Tolang     : Real              ) returns Lin2d2Tan from GccIter
-raises BadQualifier from GccEnt;
-    ---Purpose: This class implements the algorithms used to create 2d 
-    --          line tangent to two curves.
-    --          Tolang is used to determine the tolerance for the 
-    --          tangency points.
-    --          Param1 is used for the initial guess on the first curve.
-    --          Param2 is used for the initial guess on the second curve.
-
---------------------------------------------------------------------------
-
-IsDone (me) returns Boolean
-is static;
-       ---Purpose: This methode returns true when there is a solution 
-       --          and false in the other cases.
-
-ThisSolution(me) returns Lin2d 
-raises NotDone from StdFail
-is static;
-    ---Purpose: Returns the solution.
-
-WhichQualifier(me                                 ; 
-              Qualif1  : out Position from GccEnt;
-              Qualif2  : out Position from GccEnt)
-raises NotDone from StdFail
-is static;
-    -- It returns the informations about the qualifiers of the tangency 
-    -- arguments concerning the solution number Index.
-    -- It returns the real qualifiers (the qualifiers given to the 
-    -- constructor method in case of enclosed, enclosing and outside 
-    -- and the qualifiers computedin case of unqualified).
-
-Tangency1(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-raises NotDone from StdFail
-is static;
-    ---Purpose: Returns informations about the tangency point between the 
-    --          result and the first argument.
-    --          ParSol is the intrinsic parameter of the point PntSol on 
-    --          the solution curv.
-    --          ParArg is the intrinsic parameter of the point PntSol on 
-    --          the argument curv.
-
-Tangency2(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-raises NotDone from StdFail
-is static;
-    -- Returns informations about the tangency point between the 
-    -- result and the first argument.
-    -- ParSol is the intrinsic parameter of the point PntSol on the solution
-    -- curv.
-    -- ParArg is the intrinsic parameter of the point PntSol on the argument
-    -- curv.
-
-fields
-
-    WellDone : Boolean;
-    -- True if the algorithm succeeded.
-
-    linsol   : Lin2d;
-    ---Purpose : The solutions.
-
-    qualifier1 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    qualifier2 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    pnttg1sol   : Pnt2d;
-    -- The tangency point between the solution and the first argument on 
-    -- the solution.
-
-    pnttg2sol   : Pnt2d;
-    -- The tangency point between the solution and the second argument on 
-    -- the solution.
-
-    par1sol   : Real;
-    -- The parameter of the tangency point between the solution and the 
-    -- first argument on the solution.
-
-    par2sol   : Real;
-    -- The parameter of the tangency point between the solution and the 
-    -- second argument on the solution.
-
-    pararg1   : Real;
-    -- The parameter of the tangency point between the solution and the first 
-    -- argument on the first argument.
-
-    pararg2   : Real;
-    -- The parameter of the tangency point between the solution and the second 
-    -- argument on the second argument.
-
-end Lin2d2Tan;
diff --git a/src/GccIter/GccIter_Lin2d2Tan.gxx b/src/GccIter/GccIter_Lin2d2Tan.gxx
deleted file mode 100644 (file)
index a23117f..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-// Created on: 1991-12-20
-// Created by: Remi GILET
-// Copyright (c) 1991-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.
-
-//========================================================================
-//  CREATION D UNE LIGNE TANGENTE A DEUX COURBES.                        +
-//========================================================================
-
-#include <StdFail_NotDone.hxx>
-#include <GccEnt_BadQualifier.hxx>
-#include <gp_XY.hxx>
-#include <gp_Dir2d.hxx>
-#include <gp_Vec2d.hxx>
-#include <gp_Circ2d.hxx>
-#include <math_Vector.hxx>
-#include <math_Matrix.hxx>
-#include <math_FunctionSetRoot.hxx>
-#include <math_FunctionRoot.hxx>
-
-GccIter_Lin2d2Tan::
-   GccIter_Lin2d2Tan (const GccEnt_QualifiedCirc& Qualified1 ,
-                     const TheQualifiedCurve&    Qualified2 ,
-                     const Standard_Real         Param2     ,
-                     const Standard_Real         Tolang     ) {
-     
-   par1sol = 0.;
-   pararg1 = 0.;
-
-   //Standard_Real Tol = Abs(Tolang);
-
-   WellDone = Standard_False;
-   if (Qualified1.IsEnclosed()) { GccEnt_BadQualifier::Raise(); }
-   gp_Circ2d C1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   Standard_Real U1 = TheCurveTool::FirstParameter(Cu2);
-   Standard_Real U2 = TheCurveTool::LastParameter(Cu2);
-   GccIter_FuncTCirCu func(C1,Cu2);
-   math_FunctionRoot sol(func,Param2,TheCurveTool::EpsX(Cu2,Abs(Tolang)),U1,U2,100);
-   if (sol.IsDone()) {
-     Standard_Real Usol = sol.Root();
-//     gp_Pnt2d Origine,Pt;
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:39:47 2001 Begin
-     Standard_Real Norm;
-     func.Value(Usol, Norm);
-     if (Abs(Norm) < Tolang) {
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:39:48 2001 End
-     gp_Pnt2d Origine;
-     gp_Vec2d Vect1;
-     gp_Vec2d Vect2;
-     TheCurveTool::D2(Cu2,Usol,Origine,Vect1,Vect2);
-     gp_Vec2d Vdir(C1.Location().XY() - Origine.XY());
-     Standard_Real sign1 = Vect1.Dot(Vdir);
-     if (sign1 <= 0. ) { Vect1.Reverse(); }
-     Standard_Real sign2 = Vect2.Crossed(Vect1);
-     if (Qualified2.IsUnqualified() || 
-        (Qualified2.IsEnclosing() && sign2<=0.) ||
-        (Qualified2.IsOutside() && sign1 <= 0. && sign2 >= 0.) ||
-        (Qualified2.IsEnclosed() && sign1 >= 0. && sign2 >= 0.)) {
-       if (Qualified1.IsUnqualified() ||
-          (Qualified1.IsOutside() && Vect1.Angle(Vdir) <= 0.) ||
-          (Qualified1.IsEnclosing() && Vect1.Angle(Vdir) >= 0.)) {
-        gp_Dir2d direc(Vect1);
-        Standard_Real R1 = C1.Radius();
-        gp_XY normal(-R1*direc.Y(),R1*direc.X());
-        sign1 = Vect1.Crossed(Vdir);
-        if (Qualified1.IsEnclosing()) {
-          pnttg1sol = gp_Pnt2d(C1.Location().XY()-normal);
-        }
-        else if (Qualified1.IsOutside()) {
-          pnttg1sol = gp_Pnt2d(C1.Location().XY()+normal);
-        }
-        else {
-          if (sign1 >= 0.) {
-            pnttg1sol = gp_Pnt2d(C1.Location().XY()-normal);
-          }
-          else {
-            pnttg1sol = gp_Pnt2d(C1.Location().XY()+normal);
-          }
-        }
-//      if (gp_Vec2d(direc.XY()).Angle(gp_Vec2d(pnttg1sol,Origine)) <= Tol) {
-          pnttg2sol = Origine;
-          linsol = gp_Lin2d(pnttg1sol,direc);
-          WellDone = Standard_True;
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pararg2 = Usol;
-          par1sol = 0.;
-          par2sol = pnttg2sol.Distance(pnttg1sol);
-          pararg1 = 0.;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Lin2d2Tan::
-   GccIter_Lin2d2Tan (const TheQualifiedCurve& Qualified1 ,
-                     const TheQualifiedCurve& Qualified2 ,
-                     const Standard_Real      Param1     ,
-                     const Standard_Real      Param2     ,
-                     const Standard_Real      Tolang     ) {
-   par1sol = 0.;
-   pararg1 = 0.;
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
-       !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
-        Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   TheCurve Cu1 = Qualified1.Qualified();
-   TheCurve Cu2 = Qualified2.Qualified();
-   GccIter_FuncTCuCu Func(Cu1,Cu2);
-   math_Vector Umin(1,2);
-   math_Vector Umax(1,2);
-   math_Vector Ufirst(1,2);
-   math_Vector tol(1,2);
-   Umin(1) = TheCurveTool::FirstParameter(Cu1);
-   Umin(2) = TheCurveTool::FirstParameter(Cu2);
-   Umax(1) = TheCurveTool::LastParameter(Cu1);
-   Umax(2) = TheCurveTool::LastParameter(Cu2);
-   Ufirst(1) = Param1;
-   Ufirst(2) = Param2;
-   tol(1) = TheCurveTool::EpsX(Cu1,Abs(Tolang));
-   tol(2) = TheCurveTool::EpsX(Cu2,Abs(Tolang));
-   math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
-   if (Root.IsDone()) {
-     Root.Root(Ufirst);
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:45:00 2001 Begin
-     math_Vector Norm(1,2);
-     Func.Value(Ufirst, Norm);
-     if (Abs(Norm(1)) < Tolang && Abs(Norm(2)) < Tolang) {
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:45:01 2001 End
-       gp_Pnt2d point1,point2;
-       gp_Vec2d Vect11,Vect12,Vect21,Vect22;
-       TheCurveTool::D2(Cu1,Ufirst(1),point1,Vect11,Vect12);
-       TheCurveTool::D2(Cu2,Ufirst(2),point2,Vect21,Vect22);
-       gp_Vec2d Vec(point1.XY(),point2.XY());
-       Standard_Real Angle1 = Vec.Angle(Vect12);
-       Standard_Real sign1 = Vect11.Dot(Vec);
-       if (Qualified1.IsUnqualified() || 
-          (Qualified1.IsEnclosing() && Angle1 >= 0.) ||
-          (Qualified1.IsOutside() && Angle1 <= 0. && sign1 <= 0.) ||
-          (Qualified1.IsEnclosed() && Angle1 <= 0. && sign1 >= 0.)) {
-        Angle1 = Vec.Angle(Vect22);
-        sign1 = Vect21.Dot(Vec);
-        if (Qualified2.IsUnqualified() || 
-            (Qualified2.IsEnclosing() && Angle1 >= 0.) ||
-            (Qualified2.IsOutside() && Angle1 <= 0. && sign1 <= 0.) ||
-            (Qualified2.IsEnclosed() && Angle1 <= 0. && sign1 >= 0.)) {
-          qualifier1 = Qualified1.Qualifier();
-          qualifier2 = Qualified2.Qualifier();
-          pararg1 = Ufirst(1);
-          par1sol = 0.;
-          pnttg1sol = point1;
-          pararg2 = Ufirst(2);
-          pnttg2sol = point2;
-          par2sol = pnttg2sol.Distance(pnttg1sol);
-          gp_Dir2d dir(pnttg2sol.X()-pnttg1sol.X(),pnttg2sol.Y()-pnttg1sol.Y());
-          linsol = gp_Lin2d(pnttg1sol,dir);
-          WellDone = Standard_True;
-        }
-       }
-     }
-   }
- }
-
-GccIter_Lin2d2Tan::
-   GccIter_Lin2d2Tan (const TheQualifiedCurve& Qualified1 ,
-                     const gp_Pnt2d&          ThePoint   ,
-                     const Standard_Real      Param1     ,
-                     const Standard_Real      Tolang     ) {
-     
-   par1sol = 0.;
-   pararg1 = 0.;
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   TheCurve Cu1 = Qualified1.Qualified();
-   Standard_Real U1 = TheCurveTool::FirstParameter(Cu1);
-   Standard_Real U2 = TheCurveTool::LastParameter(Cu1);
-   GccIter_FuncTCuPt func(Cu1,ThePoint);
-   math_FunctionRoot sol(func,Param1,TheCurveTool::EpsX(Cu1,Abs(Tolang)),U1,U2,100);
-   if (sol.IsDone()) {
-     Standard_Real Usol = sol.Root();
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:45:17 2001 Begin
-     Standard_Real Norm;
-     func.Value(Usol, Norm);
-     if (Abs(Norm) < Tolang) {
-//  Modified by Sergey KHROMOV - Thu Apr  5 17:45:19 2001 End
-       gp_Pnt2d Origine;
-       gp_Vec2d Vect1;
-       gp_Vec2d Vect2;
-       TheCurveTool::D2(Cu1,Usol,Origine,Vect1,Vect2);
-       gp_Vec2d Vdir(ThePoint.XY()-Origine.XY());
-       Standard_Real sign1 = Vect1.Dot(Vdir);
-       Standard_Real sign2 = Vect2.Crossed(Vdir);
-       if (Qualified1.IsUnqualified() || 
-          (Qualified1.IsEnclosing() && 
-           ((sign1 >= 0. && sign2 <= 0.) || (sign1 <= 0. && sign2 <= 0.))) ||
-          (Qualified1.IsOutside() && sign1 <= 0. && sign2 >= 0.) ||
-          (Qualified1.IsEnclosed() && sign1 >= 0. && sign2 >= 0.)) {
-        WellDone = Standard_True;
-        linsol = gp_Lin2d(Origine,gp_Dir2d(Vdir));
-        qualifier1 = Qualified1.Qualifier();
-        qualifier2 = GccEnt_noqualifier;
-        pnttg1sol = Origine;
-        pnttg2sol = ThePoint;
-        pararg1 = Usol;
-        par1sol = 0.;
-        pararg2 = ThePoint.Distance(Origine);
-        par2sol = 0.;
-       }
-     }
-   }
- }
-
-Standard_Boolean GccIter_Lin2d2Tan::
-   IsDone () const { return WellDone; }
-
-gp_Lin2d GccIter_Lin2d2Tan::
-   ThisSolution () const 
-{
-  if (!WellDone) StdFail_NotDone::Raise();
-  return linsol;
-}
-
-void GccIter_Lin2d2Tan:: 
-  WhichQualifier (GccEnt_Position& Qualif1  ,
-                 GccEnt_Position& Qualif2  ) const
-{
-  if (!WellDone) { StdFail_NotDone::Raise(); }
-  else {
-    Qualif1 = qualifier1;
-    Qualif2 = qualifier2;
-  }
-}
-
-void GccIter_Lin2d2Tan::
-   Tangency1 (Standard_Real& ParSol ,
-              Standard_Real& ParArg ,
-              gp_Pnt2d& Pnt) const {
-   if (!WellDone) { StdFail_NotDone::Raise(); }
-   else {
-     ParSol = par1sol;
-     ParArg = pararg1;
-     Pnt    = pnttg1sol;
-   }
- }
-
-void GccIter_Lin2d2Tan::
-   Tangency2 (Standard_Real& ParSol ,
-              Standard_Real& ParArg ,
-              gp_Pnt2d& Pnt) const {
-   if (!WellDone) { StdFail_NotDone::Raise(); }
-   else {
-     ParSol = par2sol;
-     ParArg = pararg2;
-     Pnt    = pnttg2sol;
-   }
- }
-
diff --git a/src/GccIter/GccIter_Lin2dTanObl.cdl b/src/GccIter/GccIter_Lin2dTanObl.cdl
deleted file mode 100644 (file)
index 6bf9c2d..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
--- Created on: 1991-04-24
--- Created by: Remi GILET
--- Copyright (c) 1991-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.
-
-generic class Lin2dTanObl from GccIter (
-    TheCurve          as any;
-    TheCurveTool      as any; 
-    TheQualifiedCurve as any) -- as QualifiedCurve from GccEnt
-                             --                  (TheCurve)
-
-       ---Purpose: This class implements the algorithms used to 
-       --          create 2d line tangent to a curve QualifiedCurv and 
-       --          doing an angle Angle with a line TheLin.
-       --          The angle must be in Radian.
-
-uses Lin2d    from gp,
-     Pnt2d    from gp,
-     Position from GccEnt
-
-raises BadQualifier from GccEnt,
-       NotDone      from StdFail,
-       IsParallel   from GccIter
-
-private class FuncTObl instantiates FunctionTanObl from GccIter(
-                                           TheCurve,TheCurveTool);
-
-is
-
-Create (Qualified1 : TheQualifiedCurve ;
-       TheLin     : Lin2d             ;
-       Param1     : Real              ;
-       TolAng     : Real              ;
-        Angle      : Real = 0          ) returns Lin2dTanObl from GccIter
-raises BadQualifier from GccEnt;
-       ---Purpose: This class implements the algorithm used to 
-       --          create 2d line tangent to a curve and doing an 
-       --          angle Angle with the line TheLin.
-       --          Angle must be in Radian.
-       --          Param2 is the initial guess on the curve QualifiedCurv.
-       --          Tolang is the angular tolerance.
-
--- ........................................................................
-
-IsDone(me) returns Boolean
-is static;
-       ---Purpose: This method returns true when there is a solution 
-       --          and false in the other cases.
-
-ThisSolution(me) returns Lin2d 
-raises NotDone from StdFail
-is static;
-    -- Returns the solution.
-
-WhichQualifier(me                                 ; 
-              Qualif1  : out Position from GccEnt)
-raises NotDone from StdFail
-is static;
-    -- It returns the informations about the qualifiers of the tangency 
-    -- arguments concerning the solution number Index.
-    -- It returns the real qualifiers (the qualifiers given to the 
-    -- constructor method in case of enclosed, enclosing and outside 
-    -- and the qualifiers computedin case of unqualified).
-
-Tangency1(me                       ;
-          ParSol,ParArg : out Real ;
-          PntSol        : out Pnt2d)
-raises NotDone from StdFail
-is static;
-    -- Returns informations about the tangency point between the 
-    -- result and the first argument.
-    -- ParSol is the intrinsic parameter of the point ParSol on the solution
-    -- curv.
-    -- ParArg is the intrinsic parameter of the point PntSol on the argument
-    -- curv.
-
-Intersection2 (me                       ;
-               ParSol,ParArg : out Real ;
-               PntSol        : out Pnt2d)
-raises NotDone from StdFail, IsParallel from GccIter
-is static;
-    -- Returns informations about the center (on the curv) of the
-    -- result and the third argument.
-
-IsParallel2(me) returns Boolean
-raises NotDone from StdFail
-is static;
-    -- Returns informations about the center (on the curv) of the
-    -- result and the third argument.
-
-fields
-
-    WellDone : Boolean;
-    -- True if the algorithm succeeded.
-
-    Paral2 : Boolean;
-    -- True if the solution is parallel to the second argument (Angle = 0).
-
-    linsol   : Lin2d;
-    ---Purpose : The solution.
-
-    qualifier1 : Position from GccEnt;
-    -- The qualifiers of the first argument.
-
-    pnttg1sol   : Pnt2d;
-    -- The tangency point between the solution and the first argument on 
-    -- the solution.
-
-    pntint2sol   : Pnt2d;
-    -- The tangency point between the solution and the second argument on 
-    -- the solution.
-
-    par1sol   : Real;
-    -- The parameter of the tangency point between the solution and the 
-    -- first argument on the solution.
-
-    par2sol   : Real;
-    -- The parameter of the intersection point between the solution and the 
-    -- second argument on the solution.
-
-    pararg1   : Real;
-    -- The parameter of the tangency point between the solution and the first 
-    -- argument on the first argument.
-
-    pararg2   : Real;
-    -- The parameter of the intersection point between the solution and 
-    -- the second argument on the second argument.
-
-end Lin2dTanObl;
diff --git a/src/GccIter/GccIter_Lin2dTanObl.gxx b/src/GccIter/GccIter_Lin2dTanObl.gxx
deleted file mode 100644 (file)
index 288e864..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-// Created on: 1991-12-20
-// Created by: Remi GILET
-// Copyright (c) 1991-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.
-
-//========================================================================
-// CREATION D UNE LIGNE TANGENTE A UNE COURBE ET PARALLELE A UNE DROITE. +
-//========================================================================
-
-#include <IntAna2d_AnaIntersection.hxx>
-#include <IntAna2d_IntPoint.hxx>
-#include <GccIter_IsParallel.hxx>
-#include <StdFail_NotDone.hxx>
-#include <GccEnt_BadQualifier.hxx>
-#include <math_FunctionRoot.hxx>
-#include <gp_XY.hxx>
-#include <gp_Dir2d.hxx>
-#include <gp_Vec2d.hxx>
-#include <gp_Circ2d.hxx>
-
-GccIter_Lin2dTanObl::
-   GccIter_Lin2dTanObl (const TheQualifiedCurve& Qualified1 ,
-                       const gp_Lin2d&          TheLin     ,
-                       const Standard_Real      Param1     ,
-                       const Standard_Real      TolAng     ,
-                       const Standard_Real      Angle      ) {
-
-   par1sol = 0.;
-   pararg1 = 0.;
-   WellDone = Standard_False;
-   if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
-        Qualified1.IsOutside() || Qualified1.IsUnqualified())) {
-     GccEnt_BadQualifier::Raise();
-     return;
-   }
-   Paral2 = Standard_False;
-   TheCurve Cu1 = Qualified1.Qualified();
-   Standard_Real U1 = TheCurveTool::FirstParameter(Cu1);
-   Standard_Real U2 = TheCurveTool::LastParameter(Cu1);
-   gp_Dir2d Dir(TheLin.Direction());
-   Standard_Real A = Dir.X();
-   Standard_Real B = Dir.Y();
-   gp_Dir2d TheDirection(Dir);
-   if (Abs(Angle) > Abs(TolAng)) {
-     if (Abs(Abs(Angle)-M_PI) <= Abs(TolAng)) {
-       Paral2 = Standard_True;
-       TheDirection = Dir.Reversed();
-     }
-     else if (Abs(Angle-M_PI/2) <= Abs(TolAng)) { TheDirection=gp_Dir2d(-B,A); }
-     else if (Abs(Angle+M_PI/2) <= Abs(TolAng)) { TheDirection=gp_Dir2d(B,-A); }
-     else {
-       TheDirection=gp_Dir2d(A*Cos(Angle)-B*Sin(Angle),
-                            A*Sin(Angle)+B*Cos(Angle));
-     }
-   }
-   else { Paral2 = Standard_True; }
-   GccIter_FuncTObl func(Cu1,TheDirection);
-   math_FunctionRoot sol(func,Param1,
-                        TheCurveTool::EpsX(Cu1,Abs(TolAng)),U1,U2,100);
-   if (sol.IsDone()) {
-     Standard_Real Usol = sol.Root();
-     gp_Pnt2d Origine;
-     gp_Vec2d Vect1,Vect2;
-     TheCurveTool::D2(Cu1,Usol,Origine,Vect1,Vect2);
-     Standard_Real sign1 = Vect1.XY().Dot(TheDirection.XY());
-     Standard_Real sign2 = Vect2.XY().Crossed(TheDirection.XY());
-     if (Qualified1.IsUnqualified() || 
-        (Qualified1.IsEnclosing() && sign2<=0.) ||
-        (Qualified1.IsOutside() && sign1 <= 0. && sign2 >= 0.) ||
-        (Qualified1.IsEnclosed() && sign1 >= 0. && sign2 >= 0.)) {
-       WellDone = Standard_True;
-       linsol = gp_Lin2d(Origine,TheDirection);
-       pnttg1sol = Origine;
-       qualifier1 = Qualified1.Qualifier();
-       pararg1 = Usol;
-       par1sol = 0.;
-       if (!Paral2) {
-        IntAna2d_AnaIntersection Intp(linsol,TheLin);
-        if (Intp.IsDone() && !Intp.IsEmpty()) {
-          if (Intp.NbPoints()==1) {
-            pntint2sol = Intp.Point(1).Value();
-            par2sol = gp_Vec2d(linsol.Direction()).
-              Dot(gp_Vec2d(linsol.Location(),pntint2sol));
-            pararg2 = gp_Vec2d(TheLin.Direction()).
-              Dot(gp_Vec2d(TheLin.Location(),pntint2sol));
-          }
-        }
-       }
-     }
-   }
- }
-
-Standard_Boolean GccIter_Lin2dTanObl::
-   IsDone () const { return WellDone; }
-
-gp_Lin2d GccIter_Lin2dTanObl::ThisSolution () const 
-{      
-  if (!WellDone) StdFail_NotDone::Raise();
-
-  return linsol;
-}
-
-void GccIter_Lin2dTanObl:: 
-  WhichQualifier (GccEnt_Position& Qualif1) const
-{
-  if (!WellDone) { StdFail_NotDone::Raise(); }
-  else {
-    Qualif1 = qualifier1;
-  }
-}
-
-Standard_Boolean GccIter_Lin2dTanObl::
-   IsParallel2 () const { return Paral2; }
-
-void GccIter_Lin2dTanObl::
-   Tangency1 (Standard_Real& ParSol    ,
-              Standard_Real& ParArg    ,
-              gp_Pnt2d& PntSol) const {
-   if (!WellDone) { StdFail_NotDone::Raise(); }
-   else {
-     ParSol = par1sol;
-     ParArg = pararg1;
-     PntSol = gp_Pnt2d(pnttg1sol);
-   }
- }
-
-void GccIter_Lin2dTanObl::
-  Intersection2 (Standard_Real&     ParSol ,
-                Standard_Real&     ParArg ,
-                gp_Pnt2d& PntSol ) const {
-   if (!WellDone) { StdFail_NotDone::Raise(); }
-   else if (Paral2) { GccIter_IsParallel::Raise(); }
-   else {
-     PntSol = pntint2sol;
-     ParSol = par2sol;
-     ParArg = pararg2;
-   }
- }
-
index b8dae28..4a859d4 100644 (file)
@@ -33,7 +33,6 @@ package Geom2dGcc
 
 uses GccEnt,
      GccAna,
-     GccIter,
      StdFail,
      Geom2dInt,
      Geom2d,
@@ -45,7 +44,8 @@ uses GccEnt,
      Adaptor3d,
      Adaptor2d,
      TColgp,
-     gp
+     gp,
+     math
 
 is
 
@@ -79,25 +79,29 @@ class Circ2dTanCenGeo;
 
 class Circ2dTanOnRadGeo;
 
-class MyC2d3Tan instantiates Circ2d3Tan from GccIter
-           (Curve          from Geom2dAdaptor,
-            CurveTool      from Geom2dGcc,
-            QCurve         from Geom2dGcc);
-            
-class MyC2d2TanOn instantiates Circ2d2TanOn from GccIter
-           (Curve          from Geom2dAdaptor,
-            CurveTool      from Geom2dGcc,
-            QCurve         from Geom2dGcc);
-
-class MyL2dTanObl instantiates Lin2dTanObl from GccIter
-           (Curve          from Geom2dAdaptor,
-            CurveTool      from Geom2dGcc,
-            QCurve         from Geom2dGcc);
-            
-class MyL2d2Tan instantiates Lin2d2Tan from GccIter
-        (Curve          from Geom2dAdaptor,
-         CurveTool      from Geom2dGcc,
-         QCurve         from Geom2dGcc);
+class Circ2d3TanIter;
+private class FunctionTanCuCuCu;
+
+class Circ2d2TanOnIter;
+private class FunctionTanCuCuOnCu;
+
+class Lin2dTanOblIter;
+private class FunctionTanObl;
+
+class Lin2d2TanIter;
+private class FunctionTanCuCu;
+private class FunctionTanCuPnt;
+private class FunctionTanCirCu;
+
+enumeration Type1 is CuCuCu,CiCuCu,CiCiCu,CiLiCu,LiLiCu,LiCuCu;
+
+enumeration Type2 is CuCuOnCu,CiCuOnCu,LiCuOnCu,CuPtOnCu,
+                     CuCuOnLi,CiCuOnLi,LiCuOnLi,CuPtOnLi,
+                     CuCuOnCi,CiCuOnCi,LiCuOnCi,CuPtOnCi;
+
+enumeration Type3 is CuCu,CiCu;
+
+exception IsParallel inherits DomainError from Standard;
 
 Unqualified(Obj : Curve from Geom2dAdaptor) returns QualifiedCurve;
        ---Purpose: Constructs such a qualified curve that the relative
index e2778ff..b68b3a4 100644 (file)
@@ -43,7 +43,7 @@ uses Curve            from Geom2dAdaptor,
      Circ2d           from gp,
      Circ2d2TanOn     from GccAna,
      Circ2d2TanOnGeo from Geom2dGcc,
-     MyC2d2TanOn      from Geom2dGcc,
+     Circ2d2TanOnIter from Geom2dGcc,
      Position         from GccEnt,
      Array1OfPosition from GccEnt
      
@@ -285,7 +285,7 @@ fields
 
 --    CircAna  : Circ2d2TanOn from GccAna;
 --    CircGeo  : Circ2d2TanOnGeo from Geom2dGcc;
---    CircIter : MyC2d2TanOn from Geom2dGcc;
+--    CircIter : Circ2d2TanOnIter from Geom2dGcc;
 --    TypeAna  : Boolean;
 
 end Circ2d2TanOn;
index 54e6bdf..95fb5fd 100644 (file)
@@ -18,7 +18,7 @@
 #include <Geom2dAdaptor_Curve.hxx>
 #include <GccAna_Circ2d2TanOn.hxx>
 #include <Geom2dGcc_Circ2d2TanOnGeo.hxx>
-#include <Geom2dGcc_MyC2d2TanOn.hxx>
+#include <Geom2dGcc_Circ2d2TanOnIter.hxx>
 #include <Geom2dGcc_QCurve.hxx>
 #include <GccEnt_BadQualifier.hxx>
 #include <Geom2d_Circle.hxx>
@@ -267,18 +267,13 @@ Geom2dGcc_Circ2d2TanOn::
       }
     }
   }
-
-//=============================================================================
-//                            Appel a GccIter.                                +
-//=============================================================================
-
   else {
     Geom2dGcc_QCurve Qc1(C1,Qualified1.Qualifier());
     Geom2dGcc_QCurve Qc2(C2,Qualified2.Qualifier());
     if ((Type3 == GeomAbs_Circle || Type3 == GeomAbs_Line)) {
       if (Type3 == GeomAbs_Circle) {
        Handle(Geom2d_Circle) CCon = Handle(Geom2d_Circle)::DownCast(Con);
-       Geom2dGcc_MyC2d2TanOn Circ(Qc1,Qc2,CCon->Circ2d(),
+       Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Qc2,CCon->Circ2d(),
                                   Param1,Param2,ParamOn,Tolerance);
        WellDone = Circ.IsDone();
        NbrSol = 1;
@@ -292,7 +287,7 @@ Geom2dGcc_Circ2d2TanOn::
       }
       else {
        Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
-       Geom2dGcc_MyC2d2TanOn Circ(Qc1,Qc2,LLon->Lin2d(),
+       Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Qc2,LLon->Lin2d(),
                                       Param1,Param2,ParamOn,Tolerance);
        WellDone = Circ.IsDone();
        NbrSol = 1;
@@ -306,7 +301,7 @@ Geom2dGcc_Circ2d2TanOn::
        Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
       }
     }
-    Geom2dGcc_MyC2d2TanOn Circ(Qc1,Qc2,OnCurve,
+    Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Qc2,OnCurve,
                                   Param1,Param2,ParamOn,Tolerance);
     WellDone = Circ.IsDone();
     NbrSol = 1;
@@ -438,18 +433,13 @@ Geom2dGcc_Circ2d2TanOn::
        Results(CircGeo);
       }
     }
-  }
-
-//=============================================================================
-//                            Appel a GccIter.                                +
-//=============================================================================
-
+  }                                   
   else {
     Geom2dGcc_QCurve Qc1(C1,Qualified1.Qualifier());
     if ((Type3 == GeomAbs_Circle || Type3 == GeomAbs_Line)) {
       if (Type3 == GeomAbs_Circle) {
        Handle(Geom2d_Circle) CCon = Handle(Geom2d_Circle)::DownCast(Con);
-       Geom2dGcc_MyC2d2TanOn Circ(Qc1,Point->Pnt2d(),CCon->Circ2d(),
+       Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Point->Pnt2d(),CCon->Circ2d(),
                                   Param1,ParamOn,Tolerance);
        WellDone = Circ.IsDone();
        NbrSol = 1;
@@ -462,7 +452,7 @@ Geom2dGcc_Circ2d2TanOn::
       }
       else {
        Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
-       Geom2dGcc_MyC2d2TanOn Circ(Qc1,Point->Pnt2d(),LLon->Lin2d(),
+       Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Point->Pnt2d(),LLon->Lin2d(),
                                       Param1,ParamOn,Tolerance);
        WellDone = Circ.IsDone();
        NbrSol = 1;
@@ -475,7 +465,7 @@ Geom2dGcc_Circ2d2TanOn::
       }
     }
     else {
-      Geom2dGcc_MyC2d2TanOn Circ(Qc1,Point->Pnt2d(),OnCurve,
+      Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Point->Pnt2d(),OnCurve,
                                 Param1,ParamOn,Tolerance);
       WellDone = Circ.IsDone();
       NbrSol = 1;
diff --git a/src/Geom2dGcc/Geom2dGcc_Circ2d2TanOnIter.cdl b/src/Geom2dGcc/Geom2dGcc_Circ2d2TanOnIter.cdl
new file mode 100644 (file)
index 0000000..2209e40
--- /dev/null
@@ -0,0 +1,346 @@
+-- Created on: 1991-03-29
+-- Created by: Remi GILET
+-- Copyright (c) 1991-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.
+
+class Circ2d2TanOnIter from Geom2dGcc
+
+       ---Purpose: This class implements the algorithms used to 
+       --          create 2d circles TANgent to 2 entities and 
+       --          having the center ON a curv.
+       --          The order of the tangency argument is always
+       --          QualifiedCirc, QualifiedLin, QualifiedCurv, Pnt2d. 
+       --          the arguments are :
+       --            - The two tangency arguments.
+       --            - The center line.
+       --            - The parameter for each tangency argument which 
+       --            is a curve.
+       --            - The tolerance.
+
+-- inherits Entity from Standard
+
+uses Pnt2d            from gp,
+     Lin2d            from gp,
+     Circ2d           from gp,  
+     QualifiedCirc    from GccEnt,
+     QualifiedLin     from GccEnt,
+     Position         from GccEnt,
+     Curve            from Geom2dAdaptor,
+     CurveTool        from Geom2dGcc,
+     QCurve           from Geom2dGcc
+     
+raises NotDone    from StdFail
+
+is
+
+-- On a 2d line ..........................................................
+
+Create(Qualified1 : QualifiedCirc     ;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnLine     : Lin2d             ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Param3     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d circle and a curve and 
+    --          having the center ON a 2d line.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QualifiedLin      ;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnLine     : Lin2d             ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Param3     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d line and a curve and 
+    --          having the center ON a 2d line.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QCurve from Geom2dGcc;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnLine     : Lin2d             ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Param3     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to two curves and 
+    --          having the center ON a 2d line.
+    --          Param1 is the initial guess on the first QualifiedCurv.
+    --          Param2 is the initial guess on the first QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QCurve from Geom2dGcc;
+       Point2     : Pnt2d             ;
+       OnLine     : Lin2d             ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d point and a curve and 
+    --          having the center ON a 2d line.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+
+-- -- On a 2d Circle .....................................................
+
+Create(Qualified1 : QualifiedCirc     ;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnCirc     : Circ2d            ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Param3     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d circle and a curve and 
+    --          having the center ON a 2d circle.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QualifiedLin      ;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnCirc     : Circ2d            ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Param3     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d line and a curve and 
+    --          having the center ON a 2d circle.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QCurve from Geom2dGcc;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnCirc     : Circ2d            ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Param3     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to two curves and 
+    --          having the center ON a 2d circle.
+    --          Param1 is the initial guess on the first QualifiedCurv.
+    --          Param2 is the initial guess on the first QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QCurve from Geom2dGcc;
+       Point2     : Pnt2d             ;
+       OnCirc     : Circ2d            ;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d point and a curve and 
+    --          having the center ON a 2d circle.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          Tolerance is used for the limit cases.
+
+-- -- On a curve .....................................................
+
+Create(Qualified1 : QualifiedCirc     ;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnCurv     : Curve from Geom2dAdaptor;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       ParamOn    : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d circle and a curve and 
+    --          having the center ON a 2d curve.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          ParamOn is the initial guess on the center curve OnCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QualifiedLin      ;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnCurve    : Curve from Geom2dAdaptor;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       ParamOn    : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d line and a curve and 
+    --          having the center ON a 2d curve.
+    --          Param2 is the initial guess on the curve QualifiedCurv.
+    --          ParamOn is the initial guess on the center curve OnCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QCurve from Geom2dGcc;
+       Point2     : Pnt2d             ;
+       OnCurve    : Curve from Geom2dAdaptor;
+       Param1     : Real              ;
+       ParamOn    : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to a 2d Point and a curve and 
+    --          having the center ON a 2d curve.
+    --          Param1 is the initial guess on the curve QualifiedCurv.
+    --          ParamOn is the initial guess on the center curve OnCurv.
+    --          Tolerance is used for the limit cases.
+
+Create(Qualified1 : QCurve from Geom2dGcc;
+       Qualified2 : QCurve from Geom2dGcc;
+       OnCurve    : Curve from Geom2dAdaptor;
+       Param1     : Real              ;
+       Param2     : Real              ;
+       ParamOn    : Real              ;
+       Tolerance  : Real              ) returns Circ2d2TanOnIter from Geom2dGcc ;
+    ---Purpose: This method implements the algorithms used to 
+    --          create 2d circles TANgent to two curves and 
+    --          having the center ON a 2d curve.
+    --          Param1 is the initial guess on the first curve QualifiedCurv.
+    --          Param1 is the initial guess on the second curve QualifiedCurv.
+    --          ParamOn is the initial guess on the center curve OnCurv.
+    --          Tolerance is used for the limit cases.
+
+-- -- ....................................................................
+
+IsDone(me) returns Boolean
+is static;
+    ---Purpose: This method returns True if the construction 
+    --          algorithm succeeded.
+
+ThisSolution(me) returns Circ2d 
+    ---Purpose: Returns the solution.
+raises NotDone from StdFail
+is static;
+    ---Purpose: It raises NotDone if the construction algorithm 
+    --          didn't succeed.
+
+WhichQualifier(me                                 ; 
+              Qualif1  : out Position from GccEnt;
+              Qualif2  : out Position from GccEnt)
+raises NotDone from StdFail
+is static;
+    -- It returns the informations about the qualifiers of the tangency 
+    -- arguments concerning the solution number Index.
+    -- It returns the real qualifiers (the qualifiers given to the 
+    -- constructor method in case of enclosed, enclosing and outside 
+    -- and the qualifiers computedin case of unqualified).
+
+Tangency1(me                       ;
+          ParSol,ParArg : out Real ;
+          PntSol        : out Pnt2d)
+    ---Purpose: Returns information about the tangency point between 
+    --          the result and the first argument.
+    --          ParSol is the intrinsic parameter of the point PntSol 
+    --          on the solution curv.
+    --          ParArg is the intrinsic parameter of the point PntSol 
+    --          on the argument curv.
+raises NotDone from StdFail
+is static;
+    ---Purpose: It raises NotDone if the construction algorithm 
+    --          didn't succeed.
+
+Tangency2(me                       ;
+          ParSol,ParArg : out Real ;
+          PntSol        : out Pnt2d)
+    ---Purpose: Returns information about the tangency point between 
+    --          the result and the second argument.
+    --          ParSol is the intrinsic parameter of the point PntSol 
+    --          on the solution curv.
+    --          ParArg is the intrinsic parameter of the point PntSol 
+    --          on the argument curv.
+raises NotDone from StdFail
+is static;
+    ---Purpose: It raises NotDone if the construction algorithm 
+    --          didn't succeed.
+
+CenterOn3 (me                       ;
+           ParArg        : out Real ;
+           PntSol        : out Pnt2d)
+    ---Purpose: Returns information about the center (on the curv) of the
+    --          result and the third argument.
+raises NotDone from StdFail
+is static;
+    ---Purpose: It raises NotDone if the construction algorithm 
+    --          didn't succeed.
+
+IsTheSame1(me) returns Boolean
+    -- Returns True if the solution is equal to the first argument.
+raises NotDone from StdFail
+is static;
+    ---Purpose: It raises NotDone if the construction algorithm 
+    --          didn't succeed.
+
+IsTheSame2(me) returns Boolean
+    -- Returns True if the solution is equal to the second argument.
+raises NotDone from StdFail
+is static;
+    ---Purpose: It raises NotDone if the construction algorithm 
+    --          didn't succeed.
+
+fields
+
+    WellDone : Boolean;
+    ---Purpose: True if the algorithm succeeded.
+
+    cirsol   : Circ2d from gp;
+    -- The solutions.
+
+    qualifier1 : Position from GccEnt;
+    -- The qualifiers of the first argument.
+
+    qualifier2 : Position from GccEnt;
+    -- The qualifiers of the first argument.
+
+    TheSame1 : Boolean;
+    ---Purpose: True if the solution and the first argument are the 
+    --          same in the tolerance of Tolerance.
+    --          False in the other cases.
+
+    TheSame2 : Boolean;
+    ---Purpose: True if the solution and the second argument are the 
+    --          same in the tolerance of Tolerance.
+    --          False in the other cases.
+
+    pnttg1sol   : Pnt2d;
+    ---Purpose: The tangency point between the solution and the first 
+    --          argument on the solution.
+
+    pnttg2sol   : Pnt2d;
+    ---Purpose: The tangency point between the solution and the second 
+    --          argument on the solution.
+
+    pntcen      : Pnt2d;
+    ---Purpose: The center point of the solution on the third argument.
+
+    par1sol   : Real;
+    ---Purpose: The parameter of the tangency point between the 
+    --          solution and the first argument on the solution.
+
+    par2sol   : Real;
+    ---Purpose: The parameter of the tangency point between the 
+    --          solution and the second argument on the solution.
+
+    pararg1   : Real;
+    ---Purpose: The parameter of the tangency point between the 
+    --          solution and the first argument on the first argument.
+
+    pararg2   : Real;
+    ---Purpose: The parameter of the tangency point between the 
+    --          solution and the second argument on the second argument.
+
+    parcen3   : Real;
+    ---Purpose: The parameter of the center point of the solution 
+    --          on the second argument.
+
+end Circ2d2TanOnIter;
diff --git a/src/Geom2dGcc/Geom2dGcc_Circ2d2TanOnIter.cxx b/src/Geom2dGcc/Geom2dGcc_Circ2d2TanOnIter.cxx
new file mode 100644 (file)
index 0000000..aa6de82
--- /dev/null
@@ -0,0 +1,1302 @@
+// Created on: 1991-12-13
+// Created by: Remi GILET
+// Copyright (c) 1991-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.
+
+//=========================================================================
+//   Creation d un cercle tangent a deux elements : Droite.               +
+//                                                  Cercle.               +
+//                                                  Point.                +
+//                                                  Courbes.              +
+//                        centre sur un troisieme : Droite.               +
+//                                                  Cercle.               +
+//                                                  Courbes.              +
+//=========================================================================
+
+#include <Geom2dGcc_Circ2d2TanOnIter.ixx>
+
+#include <gp_Dir2d.hxx>
+#include <gp_Ax2d.hxx>
+#include <gp.hxx>
+#include <StdFail_NotDone.hxx>
+#include <GccEnt_BadQualifier.hxx>
+#include <math_FunctionSetRoot.hxx>
+#include <ElCLib.hxx>
+
+#include <Geom2dGcc_CurveTool.hxx>
+#include <Geom2dGcc_FunctionTanCuCuOnCu.hxx>
+
+Geom2dGcc_Circ2d2TanOnIter::
+Geom2dGcc_Circ2d2TanOnIter (const GccEnt_QualifiedLin&  Qualified1 , 
+                            const Geom2dGcc_QCurve&     Qualified2 , 
+                            const gp_Lin2d&             OnLine     ,
+                            const Standard_Real         Param1     ,
+                            const Standard_Real         Param2     ,
+                            const Standard_Real         Param3     ,
+                            const Standard_Real         Tolang     ) {
+
+                              TheSame1 = Standard_False;
+                              TheSame2 = Standard_False;
+                              par1sol = 0.;
+                              par2sol = 0.;
+                              pararg1 = 0.;
+                              pararg2 = 0.;
+                              parcen3 = 0.;
+
+                              WellDone = Standard_False;
+                              Standard_Real Tol = Abs(Tolang);
+                              WellDone = Standard_False;
+                              if (!(Qualified1.IsEnclosed() ||
+                                Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
+                                !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
+                                Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
+                                  GccEnt_BadQualifier::Raise();
+                                  return;
+                              }
+                              gp_Dir2d dirx(1.,0.);
+                              gp_Lin2d L1 = Qualified1.Qualified();
+                              Geom2dAdaptor_Curve Cu2 = Qualified2.Qualified();
+                              math_Vector Umin(1,4);
+                              math_Vector Umax(1,4);
+                              math_Vector Ufirst(1,4);
+                              math_Vector tol(1,4);
+                              Umin(1) = RealFirst();
+                              Umin(2) = Geom2dGcc_CurveTool::FirstParameter(Cu2);
+                              Umin(3) = RealFirst();
+                              Umin(4) = 0.;
+                              Umax(1) = RealLast();
+                              Umax(2) = Geom2dGcc_CurveTool::LastParameter(Cu2);
+                              Umax(3) = RealLast();
+                              Umax(4) = RealLast();
+                              Ufirst(1) = Param1;
+                              Ufirst(2) = Param2;
+                              Ufirst(3) = Param3;
+                              tol(1) = 1.e-15;
+                              tol(2) = Geom2dGcc_CurveTool::EpsX(Cu2,Tolang);
+                              tol(3) = tol(1);   
+                              tol(4) = tol(1);   
+                              gp_Pnt2d point1 = ElCLib::Value(Param1,L1);
+                              gp_Pnt2d point2 = Geom2dGcc_CurveTool::Value(Cu2,Param2);
+                              gp_Pnt2d point3 = ElCLib::Value(Param3,OnLine);
+                              Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
+                              Geom2dGcc_FunctionTanCuCuOnCu Func(L1,Cu2,OnLine,Ufirst(4));
+                              math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
+                              Func.Value(Ufirst,Umin);
+                              if (Root.IsDone()) {
+                                Root.Root(Ufirst);
+                                //     gp_Vec2d Tan1,Tan2,Nor1,Nor2;
+                                gp_Vec2d Tan1,Tan2;
+                                ElCLib::D1(Ufirst(1),L1,point1,Tan1);
+                                Geom2dGcc_CurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
+                                gp_Vec2d Tan3(OnLine.Direction().XY());
+                                gp_Pnt2d point3(OnLine.Location().XY()+Ufirst(3)*Tan3.XY());
+                                Standard_Real dist1 = point3.Distance(point1);
+                                Standard_Real dist2 = point3.Distance(point2);
+                                if ( Abs(dist1-dist2)/2. <= Tol) {
+                                  cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
+                                  Standard_Real normetan2 = Tan2.Magnitude();
+                                  gp_Vec2d Vec1(point1,point3);
+                                  gp_Vec2d Vec2(point2,point3);
+                                  Standard_Real normevec2 = Vec2.Magnitude();
+                                  Standard_Real angle2;
+                                  if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
+                                    angle2 = Vec2.Angle(Tan2);
+                                  }
+                                  else { angle2 = 0.; }
+                                  Standard_Real pscal=point3.XY().Dot(gp_XY(-L1.Direction().Y(),
+                                    L1.Direction().X()));
+                                  if (Qualified1.IsUnqualified() ||
+                                    (Qualified1.IsOutside() && pscal <= 0.) ||
+                                    (Qualified1.IsEnclosed() && pscal >= 0.)) {
+                                      if (Qualified2.IsUnqualified() || 
+                                        (Qualified2.IsEnclosing()&&angle2<=0.)||
+                                        (Qualified2.IsOutside() && angle2 >= 0) ||
+                                        (Qualified2.IsEnclosed() && angle2 <= 0.)) {
+                                          qualifier1 = Qualified1.Qualifier();
+                                          qualifier2 = Qualified2.Qualifier();
+                                          pnttg1sol = point1;
+                                          pararg1 = Ufirst(1);
+                                          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
+                                          pnttg2sol = point2;
+                                          pararg2 = Ufirst(2);
+                                          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
+                                          pntcen  = point3;
+                                          parcen3 = Ufirst(3);
+                                          WellDone = Standard_True;
+                                      }
+                                  }
+                                }
+                              }
+}
+
+Geom2dGcc_Circ2d2TanOnIter::
+Geom2dGcc_Circ2d2TanOnIter (const Geom2dGcc_QCurve& Qualified1 , 
+                            const Geom2dGcc_QCurve& Qualified2 , 
+                            const gp_Lin2d&          OnLine     ,
+                            const Standard_Real               Param1     ,
+                            const Standard_Real               Param2     ,
+                            const Standard_Real               Param3     ,
+                            const Standard_Real               Tolerance  ) {
+                              TheSame1 = Standard_False;
+                              TheSame2 = Standard_False;
+                              par1sol = 0.;
+                              par2sol = 0.;
+                              pararg1 = 0.;
+                              pararg2 = 0.;
+                              parcen3 = 0.;
+
+                              WellDone = Standard_False;
+                              if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
+                                Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
+                                !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
+                                Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
+                                  GccEnt_BadQualifier::Raise();
+                                  return;
+                              }
+                              Standard_Real Tol = Abs(Tolerance);
+                              gp_Dir2d dirx(1.,0.);
+                              Geom2dAdaptor_Curve Cu1 = Qualified1.Qualified();
+                              Geom2dAdaptor_Curve Cu2 = Qualified2.Qualified();
+                              math_Vector Umin(1,4);
+                              math_Vector Umax(1,4);
+                              math_Vector Ufirst(1,4);
+                              math_Vector tol(1,4);
+                              Umin(1) = Geom2dGcc_CurveTool::FirstParameter(Cu1);
+                              Umin(2) = Geom2dGcc_CurveTool::FirstParameter(Cu2);
+                              Umin(3) = RealFirst();
+                              Umin(4) = 0.;
+                              Umax(1) = Geom2dGcc_CurveTool::LastParameter(Cu1);
+                              Umax(2) = Geom2dGcc_CurveTool::LastParameter(Cu2);
+                              Umax(3) = RealLast();
+                              Umax(4) = RealLast();
+                              Ufirst(1) = Param1;
+                              Ufirst(2) = Param2;
+                              Ufirst(3) = Param3;
+                              tol(1) = Geom2dGcc_CurveTool::EpsX(Cu1,Abs(Tolerance));
+                              tol(2) = Geom2dGcc_CurveTool::EpsX(Cu2,Abs(Tolerance));
+                              tol(3) = 1.e-15;   
+                              tol(4) = Tol/10.;   
+                              gp_Pnt2d point1 = Geom2dGcc_CurveTool::Value(Cu1,Param1);
+                              gp_Pnt2d point2 = Geom2dGcc_CurveTool::Value(Cu2,Param2);
+                              gp_Pnt2d point3 = ElCLib::Value(Param3,OnLine);
+                              Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
+                              Geom2dGcc_FunctionTanCuCuOnCu Func(Cu1,Cu2,OnLine,Ufirst(4));
+                              math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
+                              Func.Value(Ufirst,Umin);
+                              if (Root.IsDone()) {
+                                Root.Root(Ufirst);
+                                gp_Vec2d Tan1,Tan2;
+                                Geom2dGcc_CurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
+                                Geom2dGcc_CurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
+                                gp_Vec2d Tan3(OnLine.Direction().XY());
+                                gp_Pnt2d point3(OnLine.Location().XY()+Ufirst(3)*Tan3.XY());
+                                Standard_Real dist1 = point3.Distance(point1);
+                                Standard_Real dist2 = point3.Distance(point2);
+                                if ( Abs(dist1-dist2)/2. <= Tol) {
+                                  cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
+                                  Standard_Real normetan1 = Tan1.Magnitude();
+                                  Standard_Real normetan2 = Tan2.Magnitude();
+                                  gp_Vec2d Vec1(point1,point3);
+                                  gp_Vec2d Vec2(point2,point3);
+                                  Standard_Real normevec1 = Vec1.Magnitude();
+                                  Standard_Real normevec2 = Vec2.Magnitude();
+                                  Standard_Real angle1,angle2;
+                                  if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
+                                    angle1 = Vec1.Angle(Tan1);
+                                  }
+                                  else { angle1 = 0.; }
+                                  if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
+                                    angle2 = Vec2.Angle(Tan2);
+                                  }
+                                  else { angle2 = 0.; }
+                                  if (Qualified1.IsUnqualified()||
+                                    (Qualified1.IsEnclosing()&&angle1<=0.)||
+                                    (Qualified1.IsOutside() && angle1 >= 0.) ||
+                                    (Qualified1.IsEnclosed() && angle1 <= 0.)) {
+                                      if (Qualified2.IsUnqualified() || 
+                                        (Qualified2.IsEnclosing()&&angle2<=0.)||
+                                        (Qualified2.IsOutside() && angle2 >= 0) ||
+                                        (Qualified2.IsEnclosed() && angle2 <= 0.)) {
+                                          qualifier1 = Qualified1.Qualifier();
+                                          qualifier2 = Qualified2.Qualifier();
+                                          pnttg1sol = point1;
+                                          pararg1 = Ufirst(1);
+                                          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
+                                          pnttg2sol = point2;
+                                          pararg2 = Ufirst(2);
+                                          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
+                                          pntcen  = point3;
+                                          parcen3 = Ufirst(3);
+                                          WellDone = Standard_True;
+                                      }
+                                  }
+                                }
+                              }
+}
+
+Geom2dGcc_Circ2d2TanOnIter::
+Geom2dGcc_Circ2d2TanOnIter (const Geom2dGcc_QCurve& Qualified1 , 
+                            const gp_Pnt2d&          Point2     , 
+                            const gp_Lin2d&          OnLine     ,
+                            const Standard_Real      Param1     ,
+                            const Standard_Real      Param2     ,
+                            const Standard_Real      Tolerance  ) {
+                              TheSame1 = Standard_False;
+                              TheSame2 = Standard_False;
+                              par1sol = 0.;
+                              par2sol = 0.;
+                              pararg1 = 0.;
+                              pararg2 = 0.;
+                              parcen3 = 0.;
+
+                              WellDone = Standard_False;
+                              if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
+                                Qualified1.IsOutside() || Qualified1.IsUnqualified())) {
+                                  GccEnt_BadQualifier::Raise();
+                                  return;
+                              }
+                              Standard_Real Tol = Abs(Tolerance);
+                              gp_Dir2d dirx(1.,0.);
+                              Geom2dAdaptor_Curve Cu1 = Qualified1.Qualified();
+                              math_Vector Umin(1,3);
+                              math_Vector Umax(1,3);
+                              math_Vector Ufirst(1,3);
+                              math_Vector tol(1,3);
+                              Umin(1) = Geom2dGcc_CurveTool::FirstParameter(Cu1);
+                              Umin(2) = RealFirst();
+                              Umin(3) = 0.;
+                              Umax(1) = Geom2dGcc_CurveTool::LastParameter(Cu1);
+                              Umax(2) = RealLast();
+                              Umax(3) = RealLast();
+                              Ufirst(1) = Param1;
+                              Ufirst(2) = Param2;
+                              tol(1) = Geom2dGcc_CurveTool::EpsX(Cu1,Abs(Tolerance));
+                              tol(2) = 1.e-15;
+                              tol(3) = Tol/10.;
+                              gp_Pnt2d point1 = Geom2dGcc_CurveTool::Value(Cu1,Param1);
+                              gp_Pnt2d point3 = ElCLib::Value(Param2,OnLine);
+                              Ufirst(3) = (point3.Distance(Point2)+point3.Distance(point1))/2.;
+                              Geom2dGcc_FunctionTanCuCuOnCu Func(Cu1,Point2,OnLine,Ufirst(3));
+                              math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
+                              Func.Value(Ufirst,Umin);
+                              if (Root.IsDone()) {
+                                Root.Root(Ufirst);
+                                gp_Pnt2d point1,point3;
+                                gp_Vec2d Tan1,Tan3;
+                                Geom2dGcc_CurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
+                                ElCLib::D1(Ufirst(2),OnLine,point3,Tan3);
+                                Standard_Real dist1 = point3.Distance(point1);
+                                Standard_Real dist2 = point3.Distance(Point2);
+                                if ( Abs(dist1-dist2)/2. <= Tol) {
+                                  cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
+                                  Standard_Real normetan1 = Tan1.Magnitude();
+                                  gp_Vec2d Vec1(point1,point3);
+                                  Standard_Real normevec1 = Vec1.Magnitude();
+                                  Standard_Real angle1;
+                                  if (normevec1 >= gp::Resolution() && normetan1 >= gp::Resolution()) {
+                                    angle1 = Vec1.Angle(Tan1);
+                                  }
+                                  else { angle1 = 0.; }
+                                  if (Qualified1.IsUnqualified()||
+                                    (Qualified1.IsEnclosing()&&angle1<=0.)||
+                                    (Qualified1.IsOutside() && angle1 >= 0.) ||
+                                    (Qualified1.IsEnclosed() && angle1 <= 0.)) {
+                                      qualifier1 = Qualified1.Qualifier();
+                                      qualifier2 = GccEnt_noqualifier;
+                                      pnttg1sol = point1;
+                                      pararg1 = Ufirst(1);
+                                      par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
+                                      pnttg2sol = Point2;
+                                      pararg2 = Ufirst(2);
+                                      par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
+                                      pntcen  = point3;
+                                      parcen3 = Ufirst(3);
+                                      WellDone = Standard_True;
+                                  }
+                                }
+                              }
+}
+
+Geom2dGcc_Circ2d2TanOnIter::
+Geom2dGcc_Circ2d2TanOnIter (const GccEnt_QualifiedCirc& Qualified1 , 
+                            const Geom2dGcc_QCurve&     Qualified2 , 
+                            const gp_Lin2d&             OnLine     ,
+                            const Standard_Real         Param1     ,
+                            const Standard_Real         Param2     ,
+                            const Standard_Real         Param3     ,
+                            const Standard_Real         Tolerance  ) {
+                              TheSame1 = Standard_False;
+                              TheSame2 = Standard_False;
+                              par1sol = 0.;
+                              par2sol = 0.;
+                              pararg1 = 0.;
+                              pararg2 = 0.;
+                              parcen3 = 0.;
+
+                              WellDone = Standard_False;
+                              if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
+                                Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
+                                !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
+                                Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
+                                  GccEnt_BadQualifier::Raise();
+                                  return;
+                              }
+                              Standard_Real Tol = Abs(Tolerance);
+                              gp_Dir2d dirx(1.,0.);
+                              gp_Circ2d C1 = Qualified1.Qualified();
+                              Standard_Real R1 = C1.Radius();
+                              Geom2dAdaptor_Curve Cu2 = Qualified2.Qualified();
+                              math_Vector Umin(1,4);
+                              math_Vector Umax(1,4);
+                              math_Vector Ufirst(1,4);
+                              math_Vector tol(1,4);
+                              Umin(1) = RealFirst();
+                              Umin(2) = Geom2dGcc_CurveTool::FirstParameter(Cu2);
+                              Umin(3) = RealFirst();
+                              Umin(4) = 0.;
+                              Umax(1) = RealLast();
+                              Umax(2) = Geom2dGcc_CurveTool::LastParameter(Cu2);
+                              Umax(3) = RealLast();
+                              Umax(4) = RealLast();
+                              Ufirst(1) = Param1;
+                              Ufirst(2) = Param2;
+                              Ufirst(3) = Param3;
+                              tol(1) = 2.e-15*M_PI;
+                              tol(2) = Geom2dGcc_CurveTool::EpsX(Cu2,Abs(Tolerance));
+                              tol(3) = 1.e-15;
+                              tol(4) = Tol/10.;
+                              gp_Pnt2d point1 = ElCLib::Value(Param1,C1);
+                              gp_Pnt2d point2 = Geom2dGcc_CurveTool::Value(Cu2,Param2);
+                              gp_Pnt2d point3 = ElCLib::Value(Param3,OnLine);
+                              Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
+                              Geom2dGcc_FunctionTanCuCuOnCu Func(C1,Cu2,OnLine,Ufirst(4));
+                              math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
+                              Func.Value(Ufirst,Umin);
+                              if (Root.IsDone()) {
+                                Root.Root(Ufirst);
+                                //     gp_Vec2d Tan1,Tan2,Nor1,Nor2;
+                                gp_Vec2d Tan1,Tan2,Nor2;
+                                ElCLib::D2(Ufirst(1),C1,point1,Tan1,Nor2);
+                                Geom2dGcc_CurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
+#ifdef DEB
+                                gp_Vec2d Tan3(OnLine.Direction().XY());
+#else
+                                OnLine.Direction().XY();
+#endif
+                                point3 = ElCLib::Value(Ufirst(1),OnLine);
+                                Standard_Real dist1 = point3.Distance(point1);
+                                Standard_Real dist2 = point3.Distance(point2);
+                                if ( Abs(dist1-dist2)/2. <= Tol) {
+                                  cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
+                                  Standard_Real normetan2 = Tan2.Magnitude();
+                                  gp_Vec2d Vec1(point1,point3);
+                                  gp_Vec2d Vec2(point2,point3);
+                                  Standard_Real normevec2 = Vec2.Magnitude();
+                                  Standard_Real angle2;
+                                  if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
+                                    angle2 = Vec2.Angle(Tan2);
+                                  }
+                                  else { angle2 = 0.; }
+                                  Standard_Real dist = C1.Location().Distance(point3);
+                                  Standard_Real Rsol = cirsol.Radius();
+                                  if (Qualified1.IsUnqualified() || 
+                                    (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
+                                    (Qualified1.IsOutside() && dist >= Rsol) ||
+                                    (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
+                                      if (Qualified2.IsUnqualified() || 
+                                        (Qualified2.IsEnclosing()&&angle2<=0.)||
+                                        (Qualified2.IsOutside() && angle2 >= 0) ||
+                                        (Qualified2.IsEnclosed() && angle2 <= 0.)) {
+                                          qualifier1 = Qualified1.Qualifier();
+                                          qualifier2 = Qualified2.Qualifier();
+                                          pnttg1sol = point1;
+                                          pararg1 = Ufirst(1);
+                                          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
+                                          pnttg2sol = point2;
+                                          pararg2 = Ufirst(2);
+                                          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
+                                          pntcen  = point3;
+                                          parcen3 = Ufirst(3);
+                                          WellDone = Standard_True;
+                                      }
+                                  }
+                                }
+                              }
+}
+
+Geom2dGcc_Circ2d2TanOnIter::
+Geom2dGcc_Circ2d2TanOnIter (const GccEnt_QualifiedCirc& Qualified1 , 
+                            const Geom2dGcc_QCurve&     Qualified2 , 
+                            const gp_Circ2d&            OnCirc     ,
+                            const Standard_Real         Param1     ,
+                            const Standard_Real         Param2     ,
+                            const Standard_Real         Param3     ,
+                            const Standard_Real         Tolerance  ) {
+                              TheSame1 = Standard_False;
+                              TheSame2 = Standard_False;
+                              par1sol = 0.;
+                              par2sol = 0.;
+                              pararg1 = 0.;
+                              pararg2 = 0.;
+                              parcen3 = 0.;
+
+                              WellDone = Standard_False;
+                              if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
+                                Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
+                                !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
+                                Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
+                                  GccEnt_BadQualifier::Raise();
+                                  return;
+                              }
+                              Standard_Real Tol = Abs(Tolerance);
+                              gp_Dir2d dirx(1.,0.);
+                              gp_Circ2d C1 = Qualified1.Qualified();
+                              Standard_Real R1 = C1.Radius();
+                              Geom2dAdaptor_Curve Cu2 = Qualified2.Qualified();
+                              math_Vector Umin(1,4);
+                              math_Vector Umax(1,4);
+                              math_Vector Ufirst(1,4);
+                              math_Vector tol(1,4);
+                              Umin(1) = RealFirst();
+                              Umin(2) = Geom2dGcc_CurveTool::FirstParameter(Cu2);
+                              Umin(3) = RealFirst();
+                              Umin(4) = 0.;
+                              Umax(1) = RealLast();
+                              Umax(2) = Geom2dGcc_CurveTool::LastParameter(Cu2);
+                              Umax(3) = RealLast();
+                              Umax(4) = RealLast();
+                              Ufirst(1) = Param1;
+                              Ufirst(2) = Param2;
+                              Ufirst(3) = Param3;
+                              tol(1) = 2.e-15*M_PI;
+                              tol(2) = Geom2dGcc_CurveTool::EpsX(Cu2,Abs(Tolerance));
+                              tol(3) = 2.e-15*M_PI;
+                              tol(4) = Tol/10.;
+                              gp_Pnt2d point1 = ElCLib::Value(Param1,C1);
+                              gp_Pnt2d point2 = Geom2dGcc_CurveTool::Value(Cu2,Param2);
+                              gp_Pnt2d point3 = ElCLib::Value(Param3,OnCirc);
+                              Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
+                              Geom2dGcc_FunctionTanCuCuOnCu Func(C1,Cu2,OnCirc,Ufirst(4));
+                              math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
+                              Func.Value(Ufirst,Umin);
+                              if (Root.IsDone()) {
+                                Root.Root(Ufirst);
+                                //     gp_Vec2d Tan1,Tan2,Nor1;
+                                gp_Vec2d Tan1,Tan2;
+                                ElCLib::D1(Ufirst(1),C1,point1,Tan1);
+                                Geom2dGcc_CurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
+#ifdef DEB
+                                gp_Vec2d Tan3(-Sin(Ufirst(3)),Cos(Ufirst(3)));
+#endif
+                                point3 = ElCLib::Value(Ufirst(3),OnCirc);
+                                Standard_Real dist1 = point3.Distance(point1);
+                                Standard_Real dist2 = point3.Distance(point2);
+                                if ( Abs(dist1-dist2)/2. <= Tol) {
+                                  cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
+                                  Standard_Real normetan2 = Tan2.Magnitude();
+                                  gp_Vec2d Vec1(point1,point3);
+                                  gp_Vec2d Vec2(point2,point3);
+                                  Standard_Real normevec2 = Vec2.Magnitude();
+                                  Standard_Real angle2;
+                                  if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
+                                    angle2 = Vec2.Angle(Tan2);
+                                  }
+                                  else { angle2 = 0.; }
+                                  Standard_Real dist = C1.Location().Distance(point3);
+                                  Standard_Real Rsol = cirsol.Radius();
+                                  if (Qualified1.IsUnqualified() || 
+                                    (Qualified1.IsEnclosing() && Rsol >= R1 && dist <= Rsol)||
+                                    (Qualified1.IsOutside() && dist >= Rsol) ||
+                                    (Qualified1.IsEnclosed() && Rsol <= R1 && dist <= Rsol)) {
+                                      if (Qualified2.IsUnqualified() || 
+                                        (Qualified2.IsEnclosing()&&angle2<=0.)||
+                                        (Qualified2.IsOutside() && angle2 >= 0) ||
+                                        (Qualified2.IsEnclosed() && angle2 <= 0.)) {
+                                          qualifier1 = Qualified1.Qualifier();
+                                          qualifier2 = Qualified2.Qualifier();
+                                          pnttg1sol = point1;
+                                          pararg1 = Ufirst(1);
+                                          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
+                                          pnttg2sol = point2;
+                                          pararg2 = Ufirst(2);
+                                          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
+                                          pntcen  = point3;
+                                          parcen3 = Ufirst(3);
+                                          WellDone = Standard_True;
+                                      }
+                                  }
+                                }
+                              }
+}
+
+Geom2dGcc_Circ2d2TanOnIter::
+Geom2dGcc_Circ2d2TanOnIter (const GccEnt_QualifiedLin&  Qualified1 , 
+                            const Geom2dGcc_QCurve&     Qualified2 , 
+                            const gp_Circ2d&            OnCirc     ,
+                            const Standard_Real         Param1     ,
+                            const Standard_Real         Param2     ,
+                            const Standard_Real         Param3     ,
+                            const Standard_Real         Tolerance  ) {
+                              TheSame1 = Standard_False;
+                              TheSame2 = Standard_False;
+                              par1sol = 0.;
+                              par2sol = 0.;
+                              pararg1 = 0.;
+                              pararg2 = 0.;
+                              parcen3 = 0.;
+
+                              WellDone = Standard_False;
+                              if (!(Qualified1.IsEnclosed() ||
+                                Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
+                                !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
+                                Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
+                                  GccEnt_BadQualifier::Raise();
+                                  return;
+                              }
+                              Standard_Real Tol = Abs(Tolerance);
+                              gp_Dir2d dirx(1.,0.);
+                              gp_Lin2d L1 = Qualified1.Qualified();
+                              Geom2dAdaptor_Curve Cu2 = Qualified2.Qualified();
+                              math_Vector Umin(1,4);
+                              math_Vector Umax(1,4);
+                              math_Vector Ufirst(1,4);
+                              math_Vector tol(1,4);
+                              Umin(1) = RealFirst();
+                              Umin(2) = Geom2dGcc_CurveTool::FirstParameter(Cu2);
+                              Umin(3) = RealFirst();
+                              Umin(4) = 0.;
+                              Umax(1) = RealLast();
+                              Umax(2) = Geom2dGcc_CurveTool::LastParameter(Cu2);
+                              Umax(3) = RealLast();
+                              Umax(4) = RealLast();
+                              Ufirst(1) = Param1;
+                              Ufirst(2) = Param2;
+                              Ufirst(3) = Param3;
+                              tol(1) = 1.e-15;
+                              tol(2) = Geom2dGcc_CurveTool::EpsX(Cu2,Abs(Tolerance));
+                              tol(3) = 2.e-15*M_PI;
+                              tol(4) = Tol/10.;
+                              gp_Pnt2d point1 = ElCLib::Value(Param1,L1);
+                              gp_Pnt2d point2 = Geom2dGcc_CurveTool::Value(Cu2,Param2);
+                              gp_Pnt2d point3 = ElCLib::Value(Param3,OnCirc);
+                              Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
+                              Geom2dGcc_FunctionTanCuCuOnCu Func(L1,Cu2,OnCirc,Ufirst(4));
+                              math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
+                              Func.Value(Ufirst,Umin);
+                              if (Root.IsDone()) {
+                                Root.Root(Ufirst);
+                                gp_Pnt2d point1,point2;
+                                gp_Vec2d Tan1,Tan2;
+                                ElCLib::D1(Ufirst(1),L1,point1,Tan1);
+                                Geom2dGcc_CurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
+#ifdef DEB
+                                gp_Vec2d Tan3(-Sin(Ufirst(3)),Cos(Ufirst(3)));
+#endif
+                                point3 = ElCLib::Value(Ufirst(3),OnCirc);
+                                Standard_Real dist1 = point3.Distance(point1);
+                                Standard_Real dist2 = point3.Distance(point2);
+                                if ( Abs(dist1-dist2)/2. <= Tol) {
+                                  cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
+                                  Standard_Real normetan2 = Tan2.Magnitude();
+                                  gp_Vec2d Vec1(point1,point3);
+                                  gp_Vec2d Vec2(point2,point3);
+                                  Standard_Real normevec2 = Vec2.Magnitude();
+                                  Standard_Real angle2;
+                                  if (normevec2 >= gp::Resolution() && normetan2 >= gp::Resolution()) {
+                                    angle2 = Vec2.Angle(Tan2);
+                                  }
+                                  else { angle2 = 0.; }
+                                  Standard_Real pscal=point3.XY().Dot(gp_XY(-L1.Direction().Y(),
+                                    L1.Direction().X()));
+                                  if (Qualified1.IsUnqualified() ||
+                                    (Qualified1.IsOutside() && pscal <= 0.) ||
+                                    (Qualified1.IsEnclosed() && pscal >= 0.)) {
+                                      if (Qualified2.IsUnqualified() || 
+                                        (Qualified2.IsEnclosing()&&angle2<=0.)||
+                                        (Qualified2.IsOutside() && angle2 >= 0) ||
+                                        (Qualified2.IsEnclosed() && angle2 <= 0.)) {
+                                          qualifier1 = Qualified1.Qualifier();
+                                          qualifier2 = Qualified2.Qualifier();
+                                          pnttg1sol = point1;
+                                          pararg1 = Ufirst(1);
+                                          par1sol = ElCLib::Parameter(cirsol,pnttg1sol);
+                                          pnttg2sol = point2;
+                                          pararg2 = Ufirst(2);
+                                          par2sol = ElCLib::Parameter(cirsol,pnttg2sol);
+                                          pntcen  = point3;
+                                          parcen3 = Ufirst(3);
+                                          WellDone = Standard_True;
+                                      }
+                                  }
+                                }
+                              }
+}
+
+Geom2dGcc_Circ2d2TanOnIter::
+Geom2dGcc_Circ2d2TanOnIter (const Geom2dGcc_QCurve& Qualified1 , 
+                            const Geom2dGcc_QCurve& Qualified2 , 
+                            const gp_Circ2d&         OnCirc     ,
+                            const Standard_Real               Param1     ,
+                            const Standard_Real               Param2     ,
+                            const Standard_Real               Param3     ,
+                            const Standard_Real               Tolerance  ) {
+                              TheSame1 = Standard_False;
+                              TheSame2 = Standard_False;
+                              par1sol = 0.;
+                              par2sol = 0.;
+                              pararg1 = 0.;
+                              pararg2 = 0.;
+                              parcen3 = 0.;
+
+                              WellDone = Standard_False;
+                              if (!(Qualified1.IsEnclosed() || Qualified1.IsEnclosing() || 
+                                Qualified1.IsOutside() || Qualified1.IsUnqualified()) ||
+                                !(Qualified2.IsEnclosed() || Qualified2.IsEnclosing() || 
+                                Qualified2.IsOutside() || Qualified2.IsUnqualified())) {
+                                  GccEnt_BadQualifier::Raise();
+                                  return;
+                              }
+                              Standard_Real Tol = Abs(Tolerance);
+                              gp_Dir2d dirx(1.,0.);
+                              Geom2dAdaptor_Curve Cu1 = Qualified1.Qualified();
+                              Geom2dAdaptor_Curve Cu2 = Qualified2.Qualified();
+                              math_Vector Umin(1,4);
+                              math_Vector Umax(1,4);
+                              math_Vector Ufirst(1,4);
+                              math_Vector tol(1,4);
+                              Umin(1) = Geom2dGcc_CurveTool::FirstParameter(Cu1);
+                              Umin(2) = Geom2dGcc_CurveTool::FirstParameter(Cu2);
+                              Umin(3) = RealFirst();
+                              Umin(4) = 0.;
+                              Umax(1) = Geom2dGcc_CurveTool::LastParameter(Cu1);
+                              Umax(2) = Geom2dGcc_CurveTool::LastParameter(Cu2);
+                              Umax(3) = RealLast();
+                              Umax(4) = RealLast();
+                              Ufirst(1) = Param1;
+                              Ufirst(2) = Param2;
+                              Ufirst(3) = Param3;
+                              tol(1) = Geom2dGcc_CurveTool::EpsX(Cu1,Abs(Tolerance));
+                              tol(2) = Geom2dGcc_CurveTool::EpsX(Cu2,Abs(Tolerance));
+                              tol(3) = 2.e-15*M_PI;
+                              tol(4) = Tol/10.;
+                              gp_Pnt2d point1 = Geom2dGcc_CurveTool::Value(Cu1,Param1);
+                              gp_Pnt2d point2 = Geom2dGcc_CurveTool::Value(Cu2,Param2);
+                              Standard_Real R1 = OnCirc.Radius();
+                              gp_Pnt2d point3(OnCirc.Location().XY()+R1*gp_XY(Cos(Param3),Sin(Param3)));
+                              Ufirst(4) = (point3.Distance(point2)+point3.Distance(point1))/2.;
+                              Geom2dGcc_FunctionTanCuCuOnCu Func(Cu1,Cu2,OnCirc,Ufirst(4));
+                              math_FunctionSetRoot Root(Func,Ufirst,tol,Umin,Umax);
+                              Func.Value(Ufirst,Umin);
+                              if (Root.IsDone()) {
+                                Root.Root(Ufirst);
+                                //     gp_Vec2d Tan1,Tan2,Nor1;
+                                gp_Vec2d Tan1,Tan2;
+                                Geom2dGcc_CurveTool::D1(Cu1,Ufirst(1),point1,Tan1);
+                                Geom2dGcc_CurveTool::D1(Cu2,Ufirst(2),point2,Tan2);
+#ifdef DEB
+                                gp_Vec2d Tan3(-Sin(Ufirst(3)),Cos(Ufirst(3)));
+#endif
+                                point3 = gp_Pnt2d(OnCirc.Location().XY()+
+                                  R1*gp_XY(Cos(Ufirst(3)),Sin(Ufirst(3))));
+                                Standard_Real dist1 = point3.Distance(point1);
+                                Standard_Real dist2 = point3.Distance(point2);
+                                if ( Abs(dist1-dist2)/2. <= Tol) {
+                                  cirsol = gp_Circ2d(gp_Ax2d(point3,dirx),(dist1+dist2)/2.);
+                                  Standard_Real normetan1 = Tan1.Magnitude();
+                                  Standard_Real normetan2 = Tan2.Magnitude();
+                                  gp_Vec2d Vec1(point1,point3);
+                                  gp_Vec2d Vec2(point2,point3);
+                                  Standard_Real normevec1 = Vec1.Magnitude();
+                                  Standard_Real normevec2 = Vec2.Magnitude();
+                         &