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 | |
17 | inline gp_Circ2d::gp_Circ2d () : radius(RealLast()) |
18 | { } |
19 | |
20 | inline 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 | |
28 | inline 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 | |
34 | inline void gp_Circ2d::SetLocation (const gp_Pnt2d& P) |
35 | { pos.SetLocation (P); } |
36 | |
37 | inline void gp_Circ2d::SetXAxis (const gp_Ax2d& A) |
38 | { pos.SetXAxis(A); } |
39 | |
40 | inline void gp_Circ2d::SetAxis (const gp_Ax22d& A) |
41 | { pos.SetAxis(A);} |
42 | |
43 | inline void gp_Circ2d::SetYAxis (const gp_Ax2d& A) |
44 | { pos.SetYAxis(A); } |
45 | |
46 | inline void gp_Circ2d::SetRadius (const Standard_Real Radius) |
47 | { |
48 | Standard_ConstructionError_Raise_if(Radius < 0.0,""); |
49 | radius = Radius; |
50 | } |
51 | |
52 | inline Standard_Real gp_Circ2d::Area() const |
c6541a0c |
53 | { return M_PI * radius * radius; } |
7fd59977 |
54 | |
55 | inline 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 | |
72 | inline Standard_Boolean gp_Circ2d::Contains |
73 | (const gp_Pnt2d& P, |
74 | const Standard_Real LinearTolerance) const |
75 | { return Distance(P) <= LinearTolerance; } |
76 | |
77 | inline 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 | |
86 | inline 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 | |
94 | inline Standard_Real gp_Circ2d::Length() const |
c6541a0c |
95 | { return 2. * M_PI * radius; } |
7fd59977 |
96 | |
97 | inline const gp_Pnt2d& gp_Circ2d::Location () const |
98 | {return pos.Location(); } |
99 | |
100 | inline Standard_Real gp_Circ2d::Radius() const |
101 | { return radius; } |
102 | |
103 | inline const gp_Ax22d& gp_Circ2d::Axis () const |
104 | { return pos; } |
105 | |
106 | inline const gp_Ax22d& gp_Circ2d::Position () const |
107 | { return pos; } |
108 | |
109 | inline gp_Ax2d gp_Circ2d::XAxis () const |
110 | { return gp_Ax2d (pos.XAxis()); } |
111 | |
112 | inline gp_Ax2d gp_Circ2d::YAxis () const |
113 | { return gp_Ax2d (pos.YAxis()); } |
114 | |
115 | inline 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 | |
122 | inline 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 | |
131 | inline Standard_Boolean gp_Circ2d::IsDirect() const |
132 | { return (pos.XDirection().Crossed(pos.YDirection())) >= 0.0; } |
133 | |
134 | inline void gp_Circ2d::Rotate (const gp_Pnt2d& P, |
135 | const Standard_Real Ang) |
136 | {pos.Rotate (P, Ang);} |
137 | |
138 | inline 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 | |
146 | inline 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 | |
154 | inline 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 | |
164 | inline 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 | |
171 | inline 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 | |
180 | inline void gp_Circ2d::Translate (const gp_Vec2d& V) |
181 | { pos.Translate(V); } |
182 | |
183 | inline 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 | |
190 | inline void gp_Circ2d::Translate (const gp_Pnt2d& P1, |
191 | const gp_Pnt2d& P2) |
192 | { pos.Translate(P1, P2); } |
193 | |
194 | inline 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 | |