Loading...
Searching...
No Matches
opennurbs_line.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_LINE_INC_)
#define ON_LINE_INC_
class ON_CLASS ON_Line
{
public:
ON_Line();
ON_Line( const ON_3dPoint& start, const ON_3dPoint& end );
~ON_Line();
/*
Returns:
True if from != to.
*/
bool IsValid() const;
// line[0] = start point line[1] = end point
ON_3dPoint& operator[](int);
const ON_3dPoint& operator[](int) const;
// Description:
// Create a line from two points.
// Parameters:
// start - [in] point at start of line segment
// end - [in] point at end of line segment
// Returns:
// true if start and end are distinct points.
bool Create(
const ON_3dPoint& start,
const ON_3dPoint& end
);
/*
Description:
Get line's 3d axis aligned bounding box.
Returns:
3d bounding box.
*/
ON_BoundingBox BoundingBox() const;
/*
Description:
Get line's 3d axis aligned bounding box or the
union of the input box with the object's bounding box.
Parameters:
bbox - [in/out] 3d axis aligned bounding box
bGrowBox - [in] (default=false)
If true, then the union of the input bbox and the
object's bounding box is returned in bbox.
If false, the object's bounding box is returned in bbox.
Returns:
true if object has bounding box and calculation was successful.
*/
bool GetBoundingBox(
ON_BoundingBox& bbox,
int bGrowBox = false
) const;
/*
Description:
Get tight bounding box.
Parameters:
tight_bbox - [in/out] tight bounding box
bGrowBox -[in] (default=false)
If true and the input tight_bbox is valid, then returned
tight_bbox is the union of the input tight_bbox and the
line's tight bounding box.
xform -[in] (default=NULL)
If not NULL, the tight bounding box of the transformed
line is calculated. The line is not modified.
Returns:
True if a valid tight_bbox is returned.
*/
bool GetTightBoundingBox(
ON_BoundingBox& tight_bbox,
int bGrowBox = false,
const ON_Xform* xform = 0
) const;
/*
Description:
Get a plane that contains the line.
Parameters:
plane - [out] a plane that contains the line. The orgin
of the plane is at the start of the line. The distance
from the end of the line to the plane is <= tolerance.
If possible a plane parallel to the world xy, yz or zx
plane is returned.
tolerance - [in]
Returns:
true if a coordinate of the line's direction vector is
larger than tolerance.
*/
bool InPlane( ON_Plane& plane, double tolerance = 0.0 ) const;
// Returns:
// Length of line
double Length() const;
// Returns:
// direction vector = line.to - line.from
// See Also:
// ON_Line::Tangent
ON_3dVector Direction() const;
// Returns:
// Unit tangent vector.
// See Also:
// ON_Line::Direction
ON_3dVector Tangent() const;
/*
Description:
Evaluate point on (infinite) line.
Parameters:
t - [in] evaluation parameter. t=0 returns line.from
and t=1 returns line.to.
Returns:
(1-t)*line.from + t*line.to.
See Also:
ON_Line::Direction
ON_Line::Tangent
*/
ON_3dPoint PointAt(
double t
) const;
/*
Description:
Find the point on the (infinite) line that is
closest to the test_point.
Parameters:
test_point - [in]
t - [out] line.PointAt(*t) is the point on the line
that is closest to test_point.
Returns:
true if successful.
*/
bool ClosestPointTo(
const ON_3dPoint& test_point,
double* t
) const;
/*
Description:
Find the point on the (infinite) line that is
closest to the test_point.
Parameters:
test_point - [in]
Returns:
The point on the line that is closest to test_point.
*/
ON_3dPoint ClosestPointTo(
const ON_3dPoint& test_point
) const;
/*
Description:
Find the point on the (infinite) line that is
closest to the test_point.
Parameters:
test_point - [in]
Returns:
distance from the point on the line that is closest
to test_point.
See Also:
ON_3dPoint::DistanceTo
ON_Line::ClosestPointTo
*/
double DistanceTo( ON_3dPoint test_point ) const;
/*
Description:
Finds the shortest distance between the line as a finite
chord and the other object.
Parameters:
P - [in]
L - [in] (another finite chord)
Returns:
A value d such that if Q is any point on
this line and P is any point on the other object,
then d <= Q.DistanceTo(P).
*/
double MinimumDistanceTo( const ON_3dPoint& P ) const;
double MinimumDistanceTo( const ON_Line& L ) const;
/*
Description:
Finds the longest distance between the line as a finite
chord and the other object.
Parameters:
P - [in]
L - [in] (another finite chord)
Returns:
A value d such that if Q is any point on this line and P is any
point on the other object, then d >= Q.DistanceTo(P).
*/
double MaximumDistanceTo( const ON_3dPoint& P ) const;
double MaximumDistanceTo( const ON_Line& other ) const;
/*
Description:
Quickly determine if the shortest distance from
this line to the other object is greater than d.
Parameters:
d - [in] distance (> 0.0)
P - [in]
L - [in]
Returns:
True if if the shortest distance from this line
to the other object is greater than d.
*/
bool IsFartherThan( double d, const ON_3dPoint& P ) const;
bool IsFartherThan( double d, const ON_Line& L ) const;
// For intersections see ON_Intersect();
// Description:
// Reverse line by swapping from and to.
void Reverse();
bool Transform(
const ON_Xform& xform
);
// rotate line about a point and axis
bool Rotate(
double sin_angle,
double cos_angle,
const ON_3dVector& axis_of_rotation,
const ON_3dPoint& center_of_rotation
);
bool Rotate(
double angle_in_radians,
const ON_3dVector& axis_of_rotation,
const ON_3dPoint& center_of_rotation
);
bool Translate(
const ON_3dVector& delta
);
public:
ON_3dPoint from; // start point
ON_3dPoint to; // end point
};
#endif
ON_3dPoint
Definition opennurbs_point.h:419
ON_3dVector
Definition opennurbs_point.h:953
ON_BoundingBox
Definition opennurbs_bounding_box.h:26
ON_Line::MaximumDistanceTo
double MaximumDistanceTo(const ON_3dPoint &P) const
ON_Line::to
ON_3dPoint to
Definition opennurbs_line.h:267
ON_Line::Tangent
ON_3dVector Tangent() const
ON_Line::ON_Line
ON_Line()
ON_Line::Length
double Length() const
ON_Line::BoundingBox
ON_BoundingBox BoundingBox() const
ON_Line::MaximumDistanceTo
double MaximumDistanceTo(const ON_Line &other) const
ON_Line::Rotate
bool Rotate(double angle_in_radians, const ON_3dVector &axis_of_rotation, const ON_3dPoint &center_of_rotation)
ON_Line::operator[]
ON_3dPoint & operator[](int)
ON_Line::from
ON_3dPoint from
Definition opennurbs_line.h:266
ON_Line::IsFartherThan
bool IsFartherThan(double d, const ON_3dPoint &P) const
ON_Line::IsFartherThan
bool IsFartherThan(double d, const ON_Line &L) const
ON_Line::GetBoundingBox
bool GetBoundingBox(ON_BoundingBox &bbox, int bGrowBox=false) const
ON_Line::Create
bool Create(const ON_3dPoint &start, const ON_3dPoint &end)
ON_Line::MinimumDistanceTo
double MinimumDistanceTo(const ON_Line &L) const
ON_Line::Rotate
bool Rotate(double sin_angle, double cos_angle, const ON_3dVector &axis_of_rotation, const ON_3dPoint &center_of_rotation)
ON_Line::IsValid
bool IsValid() const
ON_Line::PointAt
ON_3dPoint PointAt(double t) const
ON_Line::Transform
bool Transform(const ON_Xform &xform)
ON_Line::operator[]
const ON_3dPoint & operator[](int) const
ON_Line::Direction
ON_3dVector Direction() const
ON_Line::ON_Line
ON_Line(const ON_3dPoint &start, const ON_3dPoint &end)
ON_Line::InPlane
bool InPlane(ON_Plane &plane, double tolerance=0.0) const
ON_Line::~ON_Line
~ON_Line()
ON_Line::ClosestPointTo
ON_3dPoint ClosestPointTo(const ON_3dPoint &test_point) const
ON_Line::Translate
bool Translate(const ON_3dVector &delta)
ON_Line::ClosestPointTo
bool ClosestPointTo(const ON_3dPoint &test_point, double *t) const
ON_Line::GetTightBoundingBox
bool GetTightBoundingBox(ON_BoundingBox &tight_bbox, int bGrowBox=false, const ON_Xform *xform=0) const
ON_Line::Reverse
void Reverse()
ON_Line::DistanceTo
double DistanceTo(ON_3dPoint test_point) const
ON_Line::MinimumDistanceTo
double MinimumDistanceTo(const ON_3dPoint &P) const
ON_Plane
Definition opennurbs_plane.h:21
ON_Xform
Definition opennurbs_xform.h:29