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 inline gp_Torus::gp_Torus () :
16 majorRadius (RealLast()),
17 minorRadius (RealSmall())
20 inline gp_Torus::gp_Torus (const gp_Ax3& A3,
21 const Standard_Real MajorRadius,
22 const Standard_Real MinorRadius) :
24 majorRadius (MajorRadius),
25 minorRadius (MinorRadius)
27 Standard_ConstructionError_Raise_if (MinorRadius < 0.0 || MajorRadius < 0.0,
28 "gp_Torus() - invalid construction parameters");
31 inline void gp_Torus::SetAxis (const gp_Ax1& A1)
34 inline void gp_Torus::SetLocation (const gp_Pnt& Loc)
35 { pos.SetLocation (Loc); }
37 inline void gp_Torus::SetMajorRadius (const Standard_Real MajorRadius)
39 Standard_ConstructionError_Raise_if (MajorRadius - minorRadius <= gp::Resolution(),
40 "gp_Torus::SetMajorRadius() - invalid input parameters");
41 majorRadius = MajorRadius;
44 inline void gp_Torus::SetMinorRadius (const Standard_Real MinorRadius)
46 Standard_ConstructionError_Raise_if (MinorRadius < 0.0 || majorRadius - MinorRadius <= gp::Resolution(),
47 "gp_Torus::SetMinorRadius() - invalid input parameters");
48 minorRadius = MinorRadius;
51 inline void gp_Torus::SetPosition (const gp_Ax3& A3)
54 inline Standard_Real gp_Torus::Area () const
55 { return 4.0 * M_PI * M_PI * minorRadius * majorRadius; }
57 inline void gp_Torus::UReverse()
60 inline void gp_Torus::VReverse()
63 inline Standard_Boolean gp_Torus::Direct() const
64 { return pos.Direct(); }
66 inline const gp_Ax1& gp_Torus::Axis () const
67 { return pos.Axis(); }
69 inline const gp_Pnt& gp_Torus::Location () const
70 { return pos.Location(); }
72 inline const gp_Ax3& gp_Torus::Position () const
75 inline Standard_Real gp_Torus::MajorRadius () const
76 { return majorRadius; }
78 inline Standard_Real gp_Torus::MinorRadius () const
79 { return minorRadius; }
81 inline Standard_Real gp_Torus::Volume () const
82 { return (M_PI * minorRadius * minorRadius) * (2.0 * M_PI * majorRadius); }
84 inline gp_Ax1 gp_Torus::XAxis () const
85 { return gp_Ax1(pos.Location(), pos.XDirection()); }
87 inline gp_Ax1 gp_Torus::YAxis () const
88 { return gp_Ax1(pos.Location(), pos.YDirection()); }
90 inline void gp_Torus::Rotate (const gp_Ax1& A1,
91 const Standard_Real Ang)
92 { pos.Rotate (A1, Ang); }
94 inline gp_Torus gp_Torus::Rotated (const gp_Ax1& A1,
95 const Standard_Real Ang) const
98 C.pos.Rotate (A1, Ang);
102 inline void gp_Torus::Scale (const gp_Pnt& P,
103 const Standard_Real S)
112 inline gp_Torus gp_Torus::Scaled (const gp_Pnt& P,
113 const Standard_Real S) const
118 if (C.majorRadius < 0) C.majorRadius = - C.majorRadius;
120 if (C.minorRadius < 0) C.minorRadius = - C.minorRadius;
124 inline void gp_Torus::Transform (const gp_Trsf& T)
127 Standard_Real t = T.ScaleFactor();
133 inline gp_Torus gp_Torus::Transformed (const gp_Trsf& T) const
137 C.majorRadius *= T.ScaleFactor();
138 if (C.majorRadius < 0) C.majorRadius = - C.majorRadius;
139 C.minorRadius *= T.ScaleFactor();
140 if (C.minorRadius < 0) C.minorRadius = - C.minorRadius;
144 inline void gp_Torus::Translate (const gp_Vec& V)
145 { pos.Translate (V); }
147 inline gp_Torus gp_Torus::Translated (const gp_Vec& V) const
154 inline void gp_Torus::Translate (const gp_Pnt& P1,
156 { pos.Translate (P1, P2); }
158 inline gp_Torus gp_Torus::Translated (const gp_Pnt& P1,
159 const gp_Pnt& P2) const
162 C.pos.Translate (P1, P2);