0026377: Passing Handle objects as arguments to functions as non-const reference...
[occt.git] / src / gp / gp_Circ2d.lxx
CommitLineData
b311480e 1// Copyright (c) 1995-1999 Matra Datavision
973c2be1 2// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 3//
973c2be1 4// This file is part of Open CASCADE Technology software library.
b311480e 5//
d5f74e42 6// This library is free software; you can redistribute it and/or modify it under
7// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 8// by the Free Software Foundation, with special exception defined in the file
9// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10// distribution for complete text of the license and disclaimer of any warranty.
b311480e 11//
973c2be1 12// Alternatively, this file may be used under the terms of Open CASCADE
13// commercial license or contractual agreement.
7fd59977 14
15#include <Standard_ConstructionError.hxx>
16
17inline gp_Circ2d::gp_Circ2d () : radius(RealLast())
18{ }
19
20inline gp_Circ2d::gp_Circ2d (const gp_Ax2d& XAxis,
21 const Standard_Real Radius,
22 const Standard_Boolean Sense) : radius(Radius)
23{
24 Standard_ConstructionError_Raise_if(Radius < 0.0,"");
25 pos = gp_Ax22d(XAxis,Sense);
26}
27
28inline gp_Circ2d::gp_Circ2d (const gp_Ax22d& Axis,
29 const Standard_Real Radius) :
30 pos(Axis),
31 radius(Radius)
32{ Standard_ConstructionError_Raise_if(Radius < 0.0,""); }
33
34inline void gp_Circ2d::SetLocation (const gp_Pnt2d& P)
35{ pos.SetLocation (P); }
36
37inline void gp_Circ2d::SetXAxis (const gp_Ax2d& A)
38{ pos.SetXAxis(A); }
39
40inline void gp_Circ2d::SetAxis (const gp_Ax22d& A)
41{ pos.SetAxis(A);}
42
43inline void gp_Circ2d::SetYAxis (const gp_Ax2d& A)
44{ pos.SetYAxis(A); }
45
46inline void gp_Circ2d::SetRadius (const Standard_Real Radius)
47{
48 Standard_ConstructionError_Raise_if(Radius < 0.0,"");
49 radius = Radius;
50}
51
52inline Standard_Real gp_Circ2d::Area() const
c6541a0c 53{ return M_PI * radius * radius; }
7fd59977 54
55inline void gp_Circ2d::Coefficients (Standard_Real& A,
56 Standard_Real& B,
57 Standard_Real& C,
58 Standard_Real& D,
59 Standard_Real& E,
60 Standard_Real& F) const
61{
62 Standard_Real Xc = pos.Location().X();
63 Standard_Real Yc = pos.Location().Y();
64 A = 1.0;
65 B = 1.0;
66 C = 0.0;
67 D = - Xc;
68 E = - Yc;
69 F = Xc * Xc + Yc * Yc - radius * radius;
70}
71
72inline Standard_Boolean gp_Circ2d::Contains
73(const gp_Pnt2d& P,
74 const Standard_Real LinearTolerance) const
75{ return Distance(P) <= LinearTolerance; }
76
77inline Standard_Real gp_Circ2d::Distance (const gp_Pnt2d& P) const
78{
79 gp_XY Coord = P.XY();
80 Coord.Subtract (pos.Location().XY());
81 Standard_Real D = radius - Coord.Modulus();
82 if (D < 0) D = - D;
83 return D;
84}
85
86inline Standard_Real gp_Circ2d::SquareDistance (const gp_Pnt2d& P) const
87{
88 gp_XY Coord = P.XY();
89 Coord.Subtract (pos.Location().XY());
90 Standard_Real D = radius - Coord.Modulus();
91 return D * D;
92}
93
94inline Standard_Real gp_Circ2d::Length() const
c6541a0c 95{ return 2. * M_PI * radius; }
7fd59977 96
97inline const gp_Pnt2d& gp_Circ2d::Location () const
98{return pos.Location(); }
99
100inline Standard_Real gp_Circ2d::Radius() const
101{ return radius; }
102
103inline const gp_Ax22d& gp_Circ2d::Axis () const
104{ return pos; }
105
106inline const gp_Ax22d& gp_Circ2d::Position () const
107{ return pos; }
108
109inline gp_Ax2d gp_Circ2d::XAxis () const
110{ return gp_Ax2d (pos.XAxis()); }
111
112inline gp_Ax2d gp_Circ2d::YAxis () const
113{ return gp_Ax2d (pos.YAxis()); }
114
115inline void gp_Circ2d::Reverse()
116{
117 gp_Dir2d Temp = pos.YDirection ();
118 Temp.Reverse ();
119 pos.SetAxis(gp_Ax22d(pos.Location(),pos.XDirection(),Temp));
120}
121
122inline gp_Circ2d gp_Circ2d::Reversed() const
123{
124 gp_Circ2d C = *this;
125 gp_Dir2d Temp = pos.YDirection ();
126 Temp.Reverse ();
127 C.pos.SetAxis(gp_Ax22d(pos.Location(),pos.XDirection(),Temp));
128 return C;
129}
130
131inline Standard_Boolean gp_Circ2d::IsDirect() const
132{ return (pos.XDirection().Crossed(pos.YDirection())) >= 0.0; }
133
134inline void gp_Circ2d::Rotate (const gp_Pnt2d& P,
135 const Standard_Real Ang)
136{pos.Rotate (P, Ang);}
137
138inline gp_Circ2d gp_Circ2d::Rotated (const gp_Pnt2d& P,
139 const Standard_Real Ang) const
140{
141 gp_Circ2d C = *this;
142 C.pos.Rotate (P, Ang);
143 return C;
144}
145
146inline void gp_Circ2d::Scale (const gp_Pnt2d& P,
147 const Standard_Real S)
148{
149 radius *= S;
150 if (radius < 0) radius = - radius;
151 pos.Scale(P, S);
152}
153
154inline gp_Circ2d gp_Circ2d::Scaled (const gp_Pnt2d& P,
155 const Standard_Real S) const
156{
157 gp_Circ2d C = *this;
158 C.radius *= S;
159 if (C.radius < 0) C.radius = - C.radius;
160 C.pos.Scale(P, S);
161 return C;
162}
163
164inline void gp_Circ2d::Transform (const gp_Trsf2d& T)
165{
166 radius *= T.ScaleFactor();
167 if (radius < 0) radius = - radius;
168 pos.Transform(T);
169}
170
171inline gp_Circ2d gp_Circ2d::Transformed (const gp_Trsf2d& T) const
172{
173 gp_Circ2d C = *this;
174 C.radius *= T.ScaleFactor();
175 if (C.radius < 0) C.radius = - C.radius;
176 C.pos.Transform(T);
177 return C;
178}
179
180inline void gp_Circ2d::Translate (const gp_Vec2d& V)
181{ pos.Translate(V); }
182
183inline gp_Circ2d gp_Circ2d::Translated (const gp_Vec2d& V) const
184{
185 gp_Circ2d C = *this;
186 C.pos.Translate(V);
187 return C;
188}
189
190inline void gp_Circ2d::Translate (const gp_Pnt2d& P1,
191 const gp_Pnt2d& P2)
192{ pos.Translate(P1, P2); }
193
194inline gp_Circ2d gp_Circ2d::Translated (const gp_Pnt2d& P1,
195 const gp_Pnt2d& P2) const
196{
197 gp_Circ2d C = *this;
198 C.pos.Translate(P1, P2);
199 return C;
200}
201