Point Cloud Library (PCL) 1.12.1
opennurbs_torus.h
1/* $NoKeywords: $ */
2/*
3//
4// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
5// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
6// McNeel & Associates.
7//
8// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
9// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
10// MERCHANTABILITY ARE HEREBY DISCLAIMED.
11//
12// For complete openNURBS copyright information see <http://www.opennurbs.org>.
13//
14////////////////////////////////////////////////////////////////
15*/
16
17#if !defined(ON_TORUS_INC_)
18#define ON_TORUS_INC_
19
20class ON_RevSurface;
21class ON_TextLog;
22
23/*
24Description:
25 The torus is defined by a major circle and minor radius. The
26 torus is parameterized by (major_angle,minor_angle). The angles
27 are specified in radians. The domain of both parameters is (0,2pi).
28*/
29class ON_CLASS ON_Torus
30{
31
32public:
33 // for expert users
34
35 ON_Plane plane; // major circle plane
36 double major_radius; // > minor_radius
37 double minor_radius; // > 0
38
39public:
40
42 ON_Torus( const ON_Plane& major__plane, double major__radius, double minor__radius );
43 ON_Torus( const ON_Circle& major__circle, double minor__radius );
45
46 ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
47
48 ON_BOOL32 Create( const ON_Plane& major__plane, double major__radius, double minor__radius );
49 ON_BOOL32 Create( const ON_Circle& major__circle, double minor__radius);
50
51 /*
52 Description:
53 Get the circle that is the isocurve on the torus
54 at a specified minor angle.
55 Parameteters:
56 minor_angle_radians - [in]
57 Returns:
58 A circle with normal major_circle.plane.zaxis that starts
59 at PointAt( 0.0, minor_angle_radians ).
60 See Also:
61 ON_Torus::MajorCircleRadians
62 ON_Torus::MajorCircleDegrees
63 ON_Torus::MinorCircleRadians
64 ON_Torus::MinorCircleDegrees
65 */
66 ON_Circle MajorCircleRadians(double minor_angle_radians ) const;
67
68 /*
69 Description:
70 Get the circle that is the isocurve on the torus
71 at a specified minor angle.
72 Parameteters:
73 minor_angle_degrees - [in]
74 Returns:
75 A circle with normal major_circle.plane.zaxis that starts
76 at PointAt( 0.0, minor_angle_degrees*ON_PI/180.0 ).
77 See Also:
78 ON_Torus::MajorCircleRadians
79 ON_Torus::MajorCircleDegrees
80 ON_Torus::MinorCircleRadians
81 ON_Torus::MinorCircleDegrees
82 */
83 ON_Circle MajorCircleDegrees(double minor_angle_degrees) const;
84
85 /*
86 Description:
87 Get the minor circle that is the isocurve on the torus
88 at a specified major angle.
89 Parameteters:
90 major_angle_radians - [in]
91 Returns:
92 A circle with radius = minor_radis,
93 center = major_circle.PointAt(major_angle_radians), and
94 starting point PointAt( major_angle_radians, 0.0 ).
95 See Also:
96 ON_Torus::MajorCircleRadians
97 ON_Torus::MajorCircleDegrees
98 ON_Torus::MinorCircleRadians
99 ON_Torus::MinorCircleDegrees
100 */
101 ON_Circle MinorCircleRadians(double major_angle_radians) const;
102
103 /*
104 Description:
105 Get the minor circle that is the isocurve on the torus
106 at a specified major angle.
107 Parameteters:
108 major_angle_degrees - [in]
109 Returns:
110 A circle with radius = minor_radis,
111 center = major_circle.PointAt(major_angle_degrees*ON_PI/180.0), and
112 starting point PointAt( major_angle_degrees*ON_PI/180.0, 0.0 ).
113 See Also:
114 ON_Torus::MajorCircleRadians
115 ON_Torus::MajorCircleDegrees
116 ON_Torus::MinorCircleRadians
117 ON_Torus::MinorCircleDegrees
118 */
119 ON_Circle MinorCircleDegrees(double major_angle_degrees) const;
120
123 double MajorRadius() const;
124 double MinorRadius() const;
125
127 double major_angle_radians,
128 double minor_angle_radians
129 ) const;
130
132 double major_angle_radians,
133 double minor_angle_radians
134 ) const;
135
136 // returns parameters of point on torus that is closest to test_point.
137 ON_BOOL32 ClosestPointTo(
138 ON_3dPoint test_point,
139 double* major_angle_radians,
140 double* minor_angle_radians
141 ) const;
142
143 // returns point on torus that is closest to test_point
145 ON_3dPoint test_point
146 ) const;
147
148 // rotate torus about its origin
149 ON_BOOL32 Rotate(
150 double sin_angle, // sin(angle)
151 double cos_angle, // cos(angle)
152 const ON_3dVector& axis_of_rotation // axis of rotation
153 );
154
155 ON_BOOL32 Rotate(
156 double angle_radians, // angle in radians
157 const ON_3dVector& axis_of_rotation // axis of rotation
158 );
159
160 // rotate torus about a point and axis
161 ON_BOOL32 Rotate(
162 double sin_angle, // sin(angle)
163 double cos_angle, // cos(angle)
164 const ON_3dVector& axis_of_rotation, // axis of rotation
165 const ON_3dPoint& center_of_rotation // center of rotation
166 );
167
168 ON_BOOL32 Rotate(
169 double angle_radians, // angle in radians
170 const ON_3dVector& axis_of_rotation, // axis of rotation
171 const ON_3dPoint& center_of_rotation // center of rotation
172 );
173
174 ON_BOOL32 Translate(
175 const ON_3dVector&
176 );
177
178 ON_BOOL32 Transform( const ON_Xform& );
179
180 // parameterization of NURBS surface does not match torus's transcendental paramaterization
181 int GetNurbForm( ON_NurbsSurface& ) const; // returns 0=failure, 2=success
182
183 /*
184 Description:
185 Creates a surface of revolution definition of the torus.
186 Parameters:
187 srf - [in] if not NULL, then this srf is used.
188 Result:
189 A surface of revolution or NULL if the torus is not valid.
190 */
192};
193
194#endif
ON_Circle MinorCircleRadians(double major_angle_radians) const
ON_RevSurface * RevSurfaceForm(ON_RevSurface *srf=NULL) const
ON_BOOL32 ClosestPointTo(ON_3dPoint test_point, double *major_angle_radians, double *minor_angle_radians) const
double MajorRadius() const
double major_radius
ON_3dVector NormalAt(double major_angle_radians, double minor_angle_radians) const
ON_BOOL32 Rotate(double sin_angle, double cos_angle, const ON_3dVector &axis_of_rotation, const ON_3dPoint &center_of_rotation)
ON_3dPoint ClosestPointTo(ON_3dPoint test_point) const
ON_Torus(const ON_Circle &major__circle, double minor__radius)
ON_BOOL32 Create(const ON_Plane &major__plane, double major__radius, double minor__radius)
ON_Torus(const ON_Plane &major__plane, double major__radius, double minor__radius)
ON_BOOL32 Translate(const ON_3dVector &)
ON_BOOL32 Rotate(double angle_radians, const ON_3dVector &axis_of_rotation, const ON_3dPoint &center_of_rotation)
ON_BOOL32 IsValid(ON_TextLog *text_log=NULL) const
ON_Circle MajorCircleDegrees(double minor_angle_degrees) const
ON_Plane plane
ON_Circle MinorCircleDegrees(double major_angle_degrees) const
ON_BOOL32 Rotate(double angle_radians, const ON_3dVector &axis_of_rotation)
ON_Circle MajorCircleRadians(double minor_angle_radians) const
ON_3dPoint PointAt(double major_angle_radians, double minor_angle_radians) const
ON_BOOL32 Rotate(double sin_angle, double cos_angle, const ON_3dVector &axis_of_rotation)
ON_BOOL32 Transform(const ON_Xform &)
double minor_radius
ON_BOOL32 Create(const ON_Circle &major__circle, double minor__radius)
ON_3dPoint Center() const
double MinorRadius() const
int GetNurbForm(ON_NurbsSurface &) const
ON_3dVector Axis() const