opennurbs_cone.h
/* $NoKeywords: $ */
/*
//
// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
// McNeel & Associates.
//
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
//
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
//
////////////////////////////////////////////////////////////////
*/
#if !defined(ON_CONE_INC_)
#define ON_CONE_INC_
class ON_NurbsSurface;
class ON_Brep;
// Description:
// Lightweight right circular cone. Use ON_ConeSurface if
// you need ON_Cone geometry as a virtual ON_Surface.
class ON_CLASS ON_Cone
{
public:
// Creates a cone with world XY plane as the base plane,
// center = (0,0,0), radius = 0.0, height = 0.0.
ON_Cone();
// See ON_Cone::Create.
ON_Cone(
const ON_Plane& plane,
double height,
double radius
);
~ON_Cone();
// Description:
// Creates a right circular cone from a plane, height,
// and radius.
// plane - [in] The apex of cone is at plane.origin and
// the axis of the cone is plane.zaxis.
// height - [in] The center of the base is height*plane.zaxis.
// radius - [in] tan(cone angle) = radius/height
ON_BOOL32 Create(
const ON_Plane& plane,
double height,
double radius
);
// Returns true if plane is valid, height is not zero, and
// radius is not zero.
ON_BOOL32 IsValid() const;
// Returns:
// Center of base circle.
// Remarks:
// The base point is plane.origin + height*plane.zaxis.
ON_3dPoint BasePoint() const;
// Returns:
// Point at the tip of the cone.
// Remarks:
// The apex point is plane.origin.
const ON_3dPoint& ApexPoint() const;
// Returns:
// Unit vector axis of cone.
const ON_3dVector& Axis() const;
// Returns:
// The angle (in radians) between the axis and the
// side of the cone.
// The angle and the height have the same sign.
double AngleInRadians() const;
// Returns:
// The angle Iin degrees) between the axis and the side.
// The angle and the height have the same sign.
double AngleInDegrees() const;
// evaluate parameters and return point
// Parameters:
// radial_parameter - [in] 0.0 to 2.0*ON_PI
// height_parameter - [in] 0 = apex, height = base
ON_3dPoint PointAt(
double radial_parameter,
double height_parameter
) const;
// Parameters:
// radial_parameter - [in] (in radians) 0.0 to 2.0*ON_PI
// height_parameter - [in] 0 = apex, height = base
// Remarks:
// If radius>0 and height>0, then the normal points "out"
// when height_parameter >= 0.
ON_3dVector NormalAt(
double radial_parameter,
double height_parameter
) const;
// Description:
// Get iso curve circle at a specified height.
// Parameters:
// height_parameter - [in] 0 = apex, height = base
ON_Circle CircleAt(
double height_parameter
) const;
// Description:
// Get iso curve line segment at a specified angle.
// Parameters:
// radial_parameter - [in] (in radians) 0.0 to 2.0*ON_PI
ON_Line LineAt(
double radial_parameter
) const;
// returns parameters of point on cone that is closest to given point
bool ClosestPointTo(
ON_3dPoint point,
double* radial_parameter,
double* height_parameter
) const;
// returns point on cone that is closest to given point
ON_3dPoint ClosestPointTo(
ON_3dPoint
) const;
ON_BOOL32 Transform( const ON_Xform& );
// rotate cone about its origin
ON_BOOL32 Rotate(
double sin_angle,
double cos_angle,
const ON_3dVector& axis_of_rotation
);
ON_BOOL32 Rotate(
double angle_in_radians,
const ON_3dVector& axis_of_rotation
);
// rotate cone about a point and axis
ON_BOOL32 Rotate(
double sin_angle,
double cos_angle,
const ON_3dVector& axis_of_rotation,
const ON_3dPoint& center_of_rotation
);
ON_BOOL32 Rotate(
double angle_in_radians,
const ON_3dVector& axis_of_rotation,
const ON_3dPoint& center_of_rotation
);
ON_BOOL32 Translate(
const ON_3dVector& delta
);
ON_BOOL32 GetNurbForm( ON_NurbsSurface& ) const;
/*
Description:
Creates a surface of revolution definition of the cylinder.
Parameters:
srf - [in] if not NULL, then this srf is used.
Result:
A surface of revolution or NULL if the cylinder is not
valid or is infinite.
*/
ON_RevSurface* RevSurfaceForm( ON_RevSurface* srf = NULL ) const;
public:
ON_Plane plane; // apex = plane.origin, axis = plane.zaxis
double height; // not zero
double radius; // not zero
};
#endif
ON_3dVector
Definition: opennurbs_point.h:952
ON_Cone
Definition: opennurbs_cone.h:26
ON_Circle
Definition: opennurbs_circle.h:33
ON_Cone::plane
ON_Plane plane
Definition: opennurbs_cone.h:180
ON_Xform
Definition: opennurbs_xform.h:28
ON_Cone::height
double height
Definition: opennurbs_cone.h:181
ON_NurbsSurface
Definition: opennurbs_nurbssurface.h:64
ON_Line
Definition: opennurbs_line.h:20
ON_Brep
Definition: opennurbs_brep.h:1570
ON_Plane
Definition: opennurbs_plane.h:20
ON_3dPoint
Definition: opennurbs_point.h:418
ON_Cone::radius
double radius
Definition: opennurbs_cone.h:182
ON_RevSurface
Definition: opennurbs_revsurface.h:21