0024023: Revamp the OCCT Handle -- general
[occt.git] / src / Geom2d / Geom2d_Circle.cxx
CommitLineData
b311480e 1// Created on: 1993-03-24
2// Created by: JCV
3// Copyright (c) 1993-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 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
973c2be1 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.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 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
24typedef Geom2d_Circle Circle;
7fd59977 25typedef gp_Ax2d Ax2d;
26typedef gp_Dir2d Dir2d;
27typedef gp_Pnt2d Pnt2d;
28typedef gp_Trsf2d Trsf2d;
29typedef gp_Vec2d Vec2d;
30typedef gp_XY XY;
31
7fd59977 32//=======================================================================
33//function : Copy
34//purpose :
35//=======================================================================
36
37Handle(Geom2d_Geometry) Geom2d_Circle::Copy() const
38{
c04c30b3 39 Handle(Geom2d_Circle) C;
7fd59977 40 C = new Circle (pos, radius);
41 return C;
42}
43
44
45//=======================================================================
46//function : Geom2d_Circle
47//purpose :
48//=======================================================================
49
50Geom2d_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
61Geom2d_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
74Geom2d_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
87void 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
99void 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
110Standard_Real Geom2d_Circle::Radius () const
111{
112 return radius;
113}
114
115//=======================================================================
116//function : Circ2d
117//purpose :
118//=======================================================================
119
120gp_Circ2d Geom2d_Circle::Circ2d () const
121{
122 return gp_Circ2d (pos, radius);
123}
124
125//=======================================================================
126//function : ReversedParameter
127//purpose :
128//=======================================================================
129
130Standard_Real Geom2d_Circle::ReversedParameter( const Standard_Real U) const
131{
c6541a0c 132 return (2. * M_PI - U);
7fd59977 133}
134
135//=======================================================================
136//function : Eccentricity
137//purpose :
138//=======================================================================
139
140Standard_Real Geom2d_Circle::Eccentricity () const
141{
142 return 0.0;
143}
144
145//=======================================================================
146//function : FirstParameter
147//purpose :
148//=======================================================================
149
150Standard_Real Geom2d_Circle::FirstParameter () const
151{
152 return 0.0;
153}
154
155//=======================================================================
156//function : LastParameter
157//purpose :
158//=======================================================================
159
160Standard_Real Geom2d_Circle::LastParameter () const
161{
c6541a0c 162 return 2.0 * M_PI;
7fd59977 163}
164
165//=======================================================================
166//function : IsClosed
167//purpose :
168//=======================================================================
169
170Standard_Boolean Geom2d_Circle::IsClosed () const
171{
172 return Standard_True;
173}
174
175//=======================================================================
176//function : IsPeriodic
177//purpose :
178//=======================================================================
179
180Standard_Boolean Geom2d_Circle::IsPeriodic () const
181{
182 return Standard_True;
183}
184
185//=======================================================================
186//function : D0
187//purpose :
188//=======================================================================
189
190void 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
202void 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
213void 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
226void 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
239Vec2d 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
251void Geom2d_Circle::Transform (const Trsf2d& T)
252{
253 radius = radius * Abs(T.ScaleFactor());
254 pos.Transform (T);
255}