0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / Geom2d / Geom2d_Circle.hxx
1 // Created on: 1993-03-24
2 // Created by: Philippe DAUTRY
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 #ifndef _Geom2d_Circle_HeaderFile
18 #define _Geom2d_Circle_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <Standard_Real.hxx>
24 #include <Geom2d_Conic.hxx>
25 #include <Standard_Boolean.hxx>
26 #include <Standard_Integer.hxx>
27 class Standard_ConstructionError;
28 class Standard_RangeError;
29 class gp_Circ2d;
30 class gp_Ax2d;
31 class gp_Ax22d;
32 class gp_Pnt2d;
33 class gp_Vec2d;
34 class gp_Trsf2d;
35 class Geom2d_Geometry;
36
37
38 class Geom2d_Circle;
39 DEFINE_STANDARD_HANDLE(Geom2d_Circle, Geom2d_Conic)
40
41 //! Describes a circle in the plane (2D space).
42 //! A circle is defined by its radius and, as with any conic
43 //! curve, is positioned in the plane with a coordinate
44 //! system (gp_Ax22d object) where the origin is the
45 //! center of the circle.
46 //! The coordinate system is the local coordinate
47 //! system of the circle.
48 //! The orientation (direct or indirect) of the local
49 //! coordinate system gives an explicit orientation to the
50 //! circle, determining the direction in which the
51 //! parameter increases along the circle.
52 //! The Geom2d_Circle circle is parameterized by an angle:
53 //! P(U) = O + R*Cos(U)*XDir + R*Sin(U)*YDir
54 //! where:
55 //! - P is the point of parameter U,
56 //! - O, XDir and YDir are respectively the origin, "X
57 //! Direction" and "Y Direction" of its local coordinate system,
58 //! - R is the radius of the circle.
59 //! The "X Axis" of the local coordinate system therefore
60 //! defines the origin of the parameter of the circle. The
61 //! parameter is the angle with this "X Direction".
62 //! A circle is a closed and periodic curve. The period is
63 //! 2.*Pi and the parameter range is [ 0,2.*Pi [.
64 //! See Also
65 //! GCE2d_MakeCircle which provides functions for
66 //! more complex circle constructions
67 //! gp_Ax22d and  gp_Circ2d for an equivalent, non-parameterized data structure.
68 class Geom2d_Circle : public Geom2d_Conic
69 {
70
71 public:
72
73   
74   //! Constructs a circle by conversion of the gp_Circ2d circle C.
75   Standard_EXPORT Geom2d_Circle(const gp_Circ2d& C);
76   
77   //! Constructs a circle of radius Radius, whose center is the origin of axis
78   //! A; A is the "X Axis" of the local coordinate system
79   //! of the circle; this coordinate system is direct if
80   //! Sense is true (default value) or indirect if Sense is false.
81   //! Note: It is possible to create a circle where Radius is equal to 0.0.
82   //! Exceptions Standard_ConstructionError if Radius is negative.
83   Standard_EXPORT Geom2d_Circle(const gp_Ax2d& A, const Standard_Real Radius, const Standard_Boolean Sense = Standard_True);
84   
85   //! Constructs a circle
86   //! of radius Radius, where the coordinate system A
87   //! locates the circle and defines its orientation in the plane such that:
88   //! - the center of the circle is the origin of A,
89   //! - the orientation (direct or indirect) of A gives the
90   //! orientation of the circle.
91   Standard_EXPORT Geom2d_Circle(const gp_Ax22d& A, const Standard_Real Radius);
92   
93
94   //! Converts the gp_Circ2d circle C into this circle.
95   Standard_EXPORT void SetCirc2d (const gp_Circ2d& C);
96   
97   Standard_EXPORT void SetRadius (const Standard_Real R);
98   
99
100   //! Returns the non persistent circle from gp with the same
101   //! geometric properties as <me>.
102   Standard_EXPORT gp_Circ2d Circ2d() const;
103   
104   //! Returns the radius of this circle.
105   Standard_EXPORT Standard_Real Radius() const;
106   
107   //! Computes the parameter on the reversed circle for
108   //! the point of parameter U on this circle.
109   //! For a circle, the returned value is: 2.*Pi - U.
110   Standard_EXPORT Standard_Real ReversedParameter (const Standard_Real U) const Standard_OVERRIDE;
111   
112   //! Returns 0., which is the eccentricity of any circle.
113   Standard_EXPORT Standard_Real Eccentricity() const Standard_OVERRIDE;
114   
115   //! Returns 0.0
116   Standard_EXPORT Standard_Real FirstParameter() const Standard_OVERRIDE;
117   
118   //! Returns 2*PI.
119   Standard_EXPORT Standard_Real LastParameter() const Standard_OVERRIDE;
120   
121   //! returns True.
122   Standard_EXPORT Standard_Boolean IsClosed() const Standard_OVERRIDE;
123   
124   //! returns True. The period of a circle is 2.*Pi.
125   Standard_EXPORT Standard_Boolean IsPeriodic() const Standard_OVERRIDE;
126   
127   //! Returns in P the point of parameter U.
128   //! P = C + R * Cos (U) * XDir + R * Sin (U) * YDir
129   //! where C is the center of the circle , XDir the XDirection and
130   //! YDir the YDirection of the circle's local coordinate system.
131   Standard_EXPORT void D0 (const Standard_Real U, gp_Pnt2d& P) const Standard_OVERRIDE;
132   
133
134   //! Returns the point P of parameter U and the first derivative V1.
135   Standard_EXPORT void D1 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1) const Standard_OVERRIDE;
136   
137
138   //! Returns the point P of parameter U, the first and second
139   //! derivatives V1 and V2.
140   Standard_EXPORT void D2 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) const Standard_OVERRIDE;
141   
142
143   //! Returns the point P of parameter u, the first second and third
144   //! derivatives V1 V2 and V3.
145   Standard_EXPORT void D3 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) const Standard_OVERRIDE;
146   
147   //! For the point of parameter U of this circle, computes
148   //! the vector corresponding to the Nth derivative.
149   //! Exceptions: Standard_RangeError if N is less than 1.
150   Standard_EXPORT gp_Vec2d DN (const Standard_Real U, const Standard_Integer N) const Standard_OVERRIDE;
151   
152   //! Applies the transformation T to this circle.
153   Standard_EXPORT void Transform (const gp_Trsf2d& T) Standard_OVERRIDE;
154   
155   //! Creates a new object which is a copy of this circle.
156   Standard_EXPORT Handle(Geom2d_Geometry) Copy() const Standard_OVERRIDE;
157
158   //! Dumps the content of me into the stream
159   Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
160
161
162
163
164   DEFINE_STANDARD_RTTIEXT(Geom2d_Circle,Geom2d_Conic)
165
166 protected:
167
168
169
170
171 private:
172
173
174   Standard_Real radius;
175
176
177 };
178
179
180
181
182
183
184
185 #endif // _Geom2d_Circle_HeaderFile