1 // Copyright (c) 1995-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
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
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.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
15 #include <Standard_ConstructionError.hxx>
17 inline gp_Circ2d::gp_Circ2d () : radius(RealLast())
20 inline gp_Circ2d::gp_Circ2d (const gp_Ax2d& XAxis,
21 const Standard_Real Radius,
22 const Standard_Boolean Sense) : radius(Radius)
24 Standard_ConstructionError_Raise_if (Radius < 0.0, "gp_Circ2d() - radius should be positive number");
25 pos = gp_Ax22d(XAxis,Sense);
28 inline gp_Circ2d::gp_Circ2d (const gp_Ax22d& Axis,
29 const Standard_Real Radius) :
33 Standard_ConstructionError_Raise_if (Radius < 0.0, "gp_Circ2d() - radius should be positive number");
36 inline void gp_Circ2d::SetLocation (const gp_Pnt2d& P)
37 { pos.SetLocation (P); }
39 inline void gp_Circ2d::SetXAxis (const gp_Ax2d& A)
42 inline void gp_Circ2d::SetAxis (const gp_Ax22d& A)
45 inline void gp_Circ2d::SetYAxis (const gp_Ax2d& A)
48 inline void gp_Circ2d::SetRadius (const Standard_Real Radius)
50 Standard_ConstructionError_Raise_if (Radius < 0.0, "gp_Circ2d::SetRadius() - radius should be positive number");
54 inline Standard_Real gp_Circ2d::Area() const
55 { return M_PI * radius * radius; }
57 inline void gp_Circ2d::Coefficients (Standard_Real& A,
62 Standard_Real& F) const
64 Standard_Real Xc = pos.Location().X();
65 Standard_Real Yc = pos.Location().Y();
71 F = Xc * Xc + Yc * Yc - radius * radius;
74 inline Standard_Boolean gp_Circ2d::Contains
76 const Standard_Real LinearTolerance) const
77 { return Distance(P) <= LinearTolerance; }
79 inline Standard_Real gp_Circ2d::Distance (const gp_Pnt2d& P) const
82 Coord.Subtract (pos.Location().XY());
83 Standard_Real D = radius - Coord.Modulus();
88 inline Standard_Real gp_Circ2d::SquareDistance (const gp_Pnt2d& P) const
91 Coord.Subtract (pos.Location().XY());
92 Standard_Real D = radius - Coord.Modulus();
96 inline Standard_Real gp_Circ2d::Length() const
97 { return 2. * M_PI * radius; }
99 inline const gp_Pnt2d& gp_Circ2d::Location () const
100 {return pos.Location(); }
102 inline Standard_Real gp_Circ2d::Radius() const
105 inline const gp_Ax22d& gp_Circ2d::Axis () const
108 inline const gp_Ax22d& gp_Circ2d::Position () const
111 inline gp_Ax2d gp_Circ2d::XAxis () const
112 { return gp_Ax2d (pos.XAxis()); }
114 inline gp_Ax2d gp_Circ2d::YAxis () const
115 { return gp_Ax2d (pos.YAxis()); }
117 inline void gp_Circ2d::Reverse()
119 gp_Dir2d Temp = pos.YDirection ();
121 pos.SetAxis(gp_Ax22d(pos.Location(),pos.XDirection(),Temp));
124 inline gp_Circ2d gp_Circ2d::Reversed() const
127 gp_Dir2d Temp = pos.YDirection ();
129 C.pos.SetAxis(gp_Ax22d(pos.Location(),pos.XDirection(),Temp));
133 inline Standard_Boolean gp_Circ2d::IsDirect() const
134 { return (pos.XDirection().Crossed(pos.YDirection())) >= 0.0; }
136 inline void gp_Circ2d::Rotate (const gp_Pnt2d& P,
137 const Standard_Real Ang)
138 {pos.Rotate (P, Ang);}
140 inline gp_Circ2d gp_Circ2d::Rotated (const gp_Pnt2d& P,
141 const Standard_Real Ang) const
144 C.pos.Rotate (P, Ang);
148 inline void gp_Circ2d::Scale (const gp_Pnt2d& P,
149 const Standard_Real S)
152 if (radius < 0) radius = - radius;
156 inline gp_Circ2d gp_Circ2d::Scaled (const gp_Pnt2d& P,
157 const Standard_Real S) const
161 if (C.radius < 0) C.radius = - C.radius;
166 inline void gp_Circ2d::Transform (const gp_Trsf2d& T)
168 radius *= T.ScaleFactor();
169 if (radius < 0) radius = - radius;
173 inline gp_Circ2d gp_Circ2d::Transformed (const gp_Trsf2d& T) const
176 C.radius *= T.ScaleFactor();
177 if (C.radius < 0) C.radius = - C.radius;
182 inline void gp_Circ2d::Translate (const gp_Vec2d& V)
183 { pos.Translate(V); }
185 inline gp_Circ2d gp_Circ2d::Translated (const gp_Vec2d& V) const
192 inline void gp_Circ2d::Translate (const gp_Pnt2d& P1,
194 { pos.Translate(P1, P2); }
196 inline gp_Circ2d gp_Circ2d::Translated (const gp_Pnt2d& P1,
197 const gp_Pnt2d& P2) const
200 C.pos.Translate(P1, P2);