Integration of OCCT 6.5.0 from SVN
[occt.git] / src / gce / gce_MakeElips2d.cxx
1 // File:        gce_MakeElips2d.cxx
2 // Created:     Wed Sep  2 12:35:36 1992
3 // Author:      Remi GILET
4 //              <reg@sdsun1>
5
6 #include <gce_MakeElips2d.ixx>
7 #include <gp.hxx>
8 #include <gp_Lin2d.hxx>
9 #include <StdFail_NotDone.hxx>
10
11 //=========================================================================
12 //   Creation d une Ellipse 2d de gp de centre <Center> et de sommets     +
13 //   <S1> et <S2>.                                                        +
14 //   <CenterS1> donne le grand axe .                                      +
15 //   <S1> donne le grand rayon et <S2> le petit rayon.                    +
16 //=========================================================================
17
18 gce_MakeElips2d::gce_MakeElips2d(const gp_Pnt2d&   S1     ,
19                                  const gp_Pnt2d&   S2     ,
20                                  const gp_Pnt2d&   Center ) 
21 {
22   Standard_Real D1 = S1.Distance(Center);
23   gp_Dir2d XAxis(gp_XY(S1.XY()-Center.XY()));
24   gp_Dir2d YAxis(gp_XY(S2.XY()-Center.XY()));
25   Standard_Real D2 = gp_Lin2d(Center,XAxis).Distance(S2);
26   if (D1 < D2) { TheError = gce_InvertAxis; }
27   else if (D2 < gp::Resolution()) { TheError = gce_NullAxis; }
28   else {
29     TheElips2d = gp_Elips2d(gp_Ax22d(Center,XAxis,YAxis),D1,D2);
30     TheError = gce_Done;
31   }
32 }
33
34 gce_MakeElips2d::gce_MakeElips2d(const gp_Ax2d&         MajorAxis   ,
35                                  const Standard_Real    MajorRadius ,
36                                  const Standard_Real    MinorRadius ,
37                                  const Standard_Boolean Sense       ) 
38 {
39   if (MajorRadius < 0.0) { TheError = gce_NegativeRadius; }
40   else if (MajorRadius < MinorRadius) { TheError = gce_InvertRadius; }
41   else {
42     TheElips2d = gp_Elips2d(MajorAxis,MajorRadius,MinorRadius,Sense);
43     TheError = gce_Done;
44   }
45 }
46
47 gce_MakeElips2d::gce_MakeElips2d(const gp_Ax22d&     A           ,
48                                  const Standard_Real MajorRadius ,
49                                  const Standard_Real MinorRadius ) 
50 {
51   if (MajorRadius < 0.0) { TheError = gce_NegativeRadius; }
52   else if (MajorRadius < MinorRadius) { TheError = gce_InvertRadius; }
53   else {
54     TheElips2d = gp_Elips2d(A,MajorRadius,MinorRadius);
55     TheError = gce_Done;
56   }
57 }
58
59 const gp_Elips2d& gce_MakeElips2d::Value() const
60
61   StdFail_NotDone_Raise_if(!TheError == gce_Done,"");
62   return TheElips2d;
63 }
64
65 const gp_Elips2d& gce_MakeElips2d::Operator() const 
66 {
67   return Value();
68 }
69
70 gce_MakeElips2d::operator gp_Elips2d() const
71 {
72   return Value();
73 }
74