0024428: Implementation of LGPL license
[occt.git] / src / gce / gce_MakeElips.cxx
1 // Created on: 1992-09-02
2 // Created by: Remi GILET
3 // Copyright (c) 1992-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and / or modify it
9 // under the terms of the GNU Lesser General Public version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #include <gce_MakeElips.ixx>
18 #include <gp.hxx>
19 #include <gp_Lin.hxx>
20 #include <StdFail_NotDone.hxx>
21
22 //=========================================================================
23 //   Creation d une Ellipse 3d de gp a partir de son Ax2 et de son        +
24 //   grand rayon <MajorRadius> et son petit rayon <MinorRadius>.          +
25 //=========================================================================
26
27 gce_MakeElips::gce_MakeElips(const gp_Ax2&       A2          ,
28                              const Standard_Real MajorRadius ,
29                              const Standard_Real MinorRadius ) 
30 {
31   if (MajorRadius < MinorRadius ) { TheError = gce_InvertRadius;}
32   else if (MinorRadius < 0.0) { TheError = gce_NegativeRadius; }
33   else {
34     TheElips = gp_Elips(A2,MajorRadius,MinorRadius);
35     TheError = gce_Done;
36   }
37
38 }
39
40 //=========================================================================
41 //   Creation d une Ellipse 3d de gp de centre <Center> et de sommets     +
42 //   <S1> et <S2>.                                                        +
43 //   <S1> donne le grand rayon et <S2> le petit rayon.                    +
44 //=========================================================================
45
46 gce_MakeElips::gce_MakeElips(const gp_Pnt&   S1     ,
47                              const gp_Pnt&   S2     ,
48                              const gp_Pnt&   Center ) 
49 {
50   Standard_Real D1 = S1.Distance(Center);
51   if (D1 < gp::Resolution()) { TheError = gce_NullAxis; }
52   else {
53     gp_Dir XAxis(gp_XYZ(S1.XYZ()-Center.XYZ()));
54     Standard_Real D2 = gp_Lin(Center,XAxis).Distance(S2);
55     if (D1 < D2 || D2 < gp::Resolution()) { TheError = gce_InvertAxis; }
56     else {
57       gp_Dir Norm(XAxis.Crossed(gp_Dir(gp_XYZ(S2.XYZ()-Center.XYZ()))));
58       TheElips = gp_Elips(gp_Ax2(Center,Norm,XAxis),D1,D2);
59       TheError = gce_Done;
60     }
61   }
62 }
63
64 const gp_Elips& gce_MakeElips::Value() const
65
66   StdFail_NotDone_Raise_if(!TheError == gce_Done,"");
67   return TheElips;
68 }
69
70 const gp_Elips& gce_MakeElips::Operator() const 
71 {
72   return Value();
73 }
74
75 gce_MakeElips::operator gp_Elips() const
76 {
77   return Value();
78 }