0024023: Revamp the OCCT Handle -- general
[occt.git] / src / Geom2d / Geom2d_Circle.cxx
1 // Created on: 1993-03-24
2 // Created by: JCV
3 // Copyright (c) 1993-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 under
9 // the terms of the GNU Lesser General Public License 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 <Geom2d_Circle.ixx>
18 #include <ElCLib.hxx>
19 #include <gp_XY.hxx>
20 #include <Standard_RangeError.hxx>
21 #include <Standard_ConstructionError.hxx> 
22
23
24 typedef Geom2d_Circle         Circle;
25 typedef gp_Ax2d   Ax2d;
26 typedef gp_Dir2d  Dir2d;
27 typedef gp_Pnt2d  Pnt2d;
28 typedef gp_Trsf2d Trsf2d;
29 typedef gp_Vec2d  Vec2d;
30 typedef gp_XY     XY;
31
32 //=======================================================================
33 //function : Copy
34 //purpose  : 
35 //=======================================================================
36
37 Handle(Geom2d_Geometry) Geom2d_Circle::Copy() const 
38 {
39   Handle(Geom2d_Circle) C;
40   C = new Circle (pos, radius);
41   return C;
42 }
43
44
45 //=======================================================================
46 //function : Geom2d_Circle
47 //purpose  : 
48 //=======================================================================
49
50 Geom2d_Circle::Geom2d_Circle (const gp_Circ2d& C) : radius (C.Radius()) { 
51
52   pos = C.Axis();
53 }
54
55
56 //=======================================================================
57 //function : Geom2d_Circle
58 //purpose  : 
59 //=======================================================================
60
61 Geom2d_Circle::Geom2d_Circle (const Ax2d& A, const Standard_Real Radius,
62                               const Standard_Boolean Sense)
63 : radius(Radius) {
64   
65    if (Radius < 0.0) { Standard_ConstructionError::Raise(); }
66    pos = gp_Ax22d(A, Sense);
67 }
68
69 //=======================================================================
70 //function : Geom2d_Circle
71 //purpose  : 
72 //=======================================================================
73
74 Geom2d_Circle::Geom2d_Circle (const gp_Ax22d& A, const Standard_Real Radius)
75
76 : radius (Radius) {
77
78    if (Radius < 0.0) { Standard_ConstructionError::Raise(); }
79    pos = A;
80 }
81
82 //=======================================================================
83 //function : SetCirc2d
84 //purpose  : 
85 //=======================================================================
86
87 void Geom2d_Circle::SetCirc2d (const gp_Circ2d& C) {
88
89    radius = C.Radius();
90    pos    = C.Axis();
91 }
92
93
94 //=======================================================================
95 //function : SetRadius
96 //purpose  : 
97 //=======================================================================
98
99 void Geom2d_Circle::SetRadius (const Standard_Real R) 
100
101   if (R < 0.0) { Standard_ConstructionError::Raise(); }
102   radius = R;
103 }
104
105 //=======================================================================
106 //function : Radius
107 //purpose  : 
108 //=======================================================================
109
110 Standard_Real Geom2d_Circle::Radius () const
111
112   return radius;
113 }
114
115 //=======================================================================
116 //function : Circ2d
117 //purpose  : 
118 //=======================================================================
119
120 gp_Circ2d Geom2d_Circle::Circ2d () const    
121 {
122   return gp_Circ2d (pos, radius); 
123 }
124
125 //=======================================================================
126 //function : ReversedParameter
127 //purpose  : 
128 //=======================================================================
129
130 Standard_Real Geom2d_Circle::ReversedParameter( const Standard_Real U) const 
131 {
132   return (2. * M_PI - U);
133 }
134
135 //=======================================================================
136 //function : Eccentricity
137 //purpose  : 
138 //=======================================================================
139
140 Standard_Real Geom2d_Circle::Eccentricity () const       
141 {
142   return 0.0; 
143 }
144
145 //=======================================================================
146 //function : FirstParameter
147 //purpose  : 
148 //=======================================================================
149
150 Standard_Real Geom2d_Circle::FirstParameter () const     
151 {
152   return 0.0; 
153 }
154
155 //=======================================================================
156 //function : LastParameter
157 //purpose  : 
158 //=======================================================================
159
160 Standard_Real Geom2d_Circle::LastParameter () const      
161 {
162   return 2.0 * M_PI; 
163 }
164
165 //=======================================================================
166 //function : IsClosed
167 //purpose  : 
168 //=======================================================================
169
170 Standard_Boolean Geom2d_Circle::IsClosed () const        
171 {
172   return Standard_True; 
173 }
174
175 //=======================================================================
176 //function : IsPeriodic
177 //purpose  : 
178 //=======================================================================
179
180 Standard_Boolean Geom2d_Circle::IsPeriodic () const      
181 {
182   return Standard_True; 
183 }
184
185 //=======================================================================
186 //function : D0
187 //purpose  : 
188 //=======================================================================
189
190 void Geom2d_Circle::D0 (const Standard_Real   U, 
191                               Pnt2d& P) const 
192 {
193   P= ElCLib::CircleValue (U, pos, radius);
194 }
195
196
197 //=======================================================================
198 //function : D1
199 //purpose  : 
200 //=======================================================================
201
202 void Geom2d_Circle::D1 (const Standard_Real U, Pnt2d& P, Vec2d& V1) const 
203 {
204   ElCLib::CircleD1 (U, pos, radius, P, V1);
205 }
206
207
208 //=======================================================================
209 //function : D2
210 //purpose  : 
211 //=======================================================================
212
213 void Geom2d_Circle::D2 (const Standard_Real U, 
214                               Pnt2d& P, 
215                               Vec2d& V1, Vec2d& V2) const 
216 {
217   ElCLib::CircleD2 (U, pos, radius, P, V1, V2);
218 }
219
220
221 //=======================================================================
222 //function : D3
223 //purpose  : 
224 //=======================================================================
225
226 void Geom2d_Circle::D3 (const Standard_Real U, 
227                               Pnt2d& P, 
228                               Vec2d& V1, Vec2d& V2, Vec2d& V3) const 
229 {
230   ElCLib::CircleD3 (U, pos, radius, P, V1, V2, V3);
231 }
232
233
234 //=======================================================================
235 //function : DN
236 //purpose  : 
237 //=======================================================================
238
239 Vec2d Geom2d_Circle::DN (const Standard_Real U, const Standard_Integer N) const 
240 {
241   Standard_RangeError_Raise_if (N < 1," ");
242   return ElCLib::CircleDN (U, pos, radius, N);
243 }
244
245
246 //=======================================================================
247 //function : Transform
248 //purpose  : 
249 //=======================================================================
250
251 void Geom2d_Circle::Transform (const Trsf2d& T) 
252 {
253    radius = radius * Abs(T.ScaleFactor());
254    pos.Transform (T);
255 }