Rhino C++ API  7.21
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
ON_Triangle Class Reference

#include <opennurbs_line.h>

Public Member Functions

 ON_Triangle ()=default
 Default constructor is uninitialized. More...
 
 ON_Triangle (const double vertices[9])
 
 ON_Triangle (const ON_3dPoint &a, const ON_3dPoint &b, const ON_3dPoint &c)
 
 ON_Triangle (const ON_3dPoint vertices[3])
 
 ON_Triangle (const ON_Triangle &tri)=default
 
 ON_Triangle (double x)
 Allows Triangle(0.0) ZeroTriangle. More...
 
 ~ON_Triangle ()=default
 
double Area () const
 
ON_BoundingBox BoundingBox () const
 
ON_3dPoint Centroid () const
 
ON_3dPoint ClosestPointTo (const ON_3dPoint &test_point) const
 
bool ClosestPointTo (const ON_3dPoint &test_point, double *s1, double *s2) const
 
void Create (const ON_3dPoint &a, const ON_3dPoint &b, const ON_3dPoint &c)
 
void Create (const ON_3dPoint vertices[3])
 
double DistanceTo (const ON_3dPoint &test_point) const
 
ON_Line Edge (int i) const
 
void Flip (unsigned char edge=0)
 
bool GetBarycentricCoordinates (const ON_3dPoint &test_point, bool constrainInside, double *s1, double *s2) const
 
bool GetBoundingBox (ON_BoundingBox &bbox, int bGrowBox=false) const
 
bool GetTightBoundingBox (ON_BoundingBox &tight_bbox, bool bGrowBox=false, const ON_Xform *xform=nullptr) const
 
bool IsDegenerate (double tol=ON_ZERO_TOLERANCE) const
 
bool IsValid () const
 
unsigned char LongestEdge () const
 
ON_3dVector Normal () const
 
 operator const ON_3dPoint * () const
 
 operator ON_3dPoint * ()
 
ON_Triangleoperator= (const ON_Triangle &tri)=default
 
ON_3dPointoperator[] (int)
 Triangle[i] = Triangle.m_V[i]. More...
 
const ON_3dPointoperator[] (int) const
 
ON_PlaneEquation PlaneEquation () const
 
ON_3dPoint PointAt (double s1, double s2) const
 
void Reverse (int i)
 
bool Rotate (double angle_in_radians, const ON_3dVector &axis_of_rotation, const ON_3dPoint &center_of_rotation)
 
bool Rotate (double sin_angle, double cos_angle, const ON_3dVector &axis_of_rotation, const ON_3dPoint &center_of_rotation)
 rotate line about a point and axis More...
 
unsigned char ShortestEdge () const
 
void Spin (unsigned char move)
 
void Split (unsigned char edge, ON_3dPoint pt, ON_Triangle &out_a, ON_Triangle &out_b) const
 
bool Transform (const ON_Xform &xform)
 
bool Translate (const ON_3dVector &delta)
 
ON_3dVector UnitNormal () const
 

Public Attributes

ON_3dPoint m_V [3]
 verticies More...
 

Static Public Attributes

static const ON_Triangle NanTriangle
 {ON_3dPoint::NanPoint, ON_3dPoint::NanPoint, ON_3dPoint::NanPoint} More...
 
static const ON_Triangle UnsetTriangle
 {ON_3dPoint::UnsetPoint, ON_3dPoint::UnsetPoint, ON_3dPoint::UnsetPoint} More...
 
static const ON_Triangle ZeroTriangle
 {ON_3dPoint::Origin, ON_3dPoint::Origin, ON_3dPoint::Origin} More...
 

Constructor & Destructor Documentation

◆ ON_Triangle() [1/6]

ON_Triangle::ON_Triangle ( )
default

Default constructor is uninitialized.

◆ ON_Triangle() [2/6]

ON_Triangle::ON_Triangle ( const ON_3dPoint  vertices[3])

◆ ON_Triangle() [3/6]

ON_Triangle::ON_Triangle ( const ON_3dPoint a,
const ON_3dPoint b,
const ON_3dPoint c 
)

◆ ON_Triangle() [4/6]

ON_Triangle::ON_Triangle ( double  x)

Allows Triangle(0.0) ZeroTriangle.

◆ ON_Triangle() [5/6]

ON_Triangle::ON_Triangle ( const double  vertices[9])

◆ ON_Triangle() [6/6]

ON_Triangle::ON_Triangle ( const ON_Triangle tri)
default

◆ ~ON_Triangle()

ON_Triangle::~ON_Triangle ( )
default

Member Function Documentation

◆ Area()

double ON_Triangle::Area ( ) const

Returns: Area of triangle

◆ BoundingBox()

ON_BoundingBox ON_Triangle::BoundingBox ( ) const

Description: Get Triangles 3d axis aligned bounding box. Returns: 3d bounding box.

◆ Centroid()

ON_3dPoint ON_Triangle::Centroid ( ) const

Returns: Evaluation of PointAt(1/3.0, 1/3.0);

◆ ClosestPointTo() [1/2]

ON_3dPoint ON_Triangle::ClosestPointTo ( const ON_3dPoint test_point) const

Description: Find the point on the triangle that is closest to the test_point. Parameters: test_point - [in] Returns: The point on the line that is closest to test_point.

◆ ClosestPointTo() [2/2]

bool ON_Triangle::ClosestPointTo ( const ON_3dPoint test_point,
double *  s1,
double *  s2 
) const

Description: Find the point on the triangle that is closest to the test_point. Parameters: test_point - [in] s1, s2 - [out] PointAt( *s1, *s2) is the point on the triangle closest to test_point. Returns: true if successful.

◆ Create() [1/2]

void ON_Triangle::Create ( const ON_3dPoint a,
const ON_3dPoint b,
const ON_3dPoint c 
)

Description: Create a Triangle from three points. Parameters: a,b,c - [in] vertices

◆ Create() [2/2]

void ON_Triangle::Create ( const ON_3dPoint  vertices[3])

Description: Create a Triangle from three points. Parameters: vertices - [in] vertices

◆ DistanceTo()

double ON_Triangle::DistanceTo ( const ON_3dPoint test_point) const

Description: Find the point on the triangle that is closest to the test_point. Parameters: test_point -[in] Returns: distance from the point on triangle that is closest to test_point. See Also: ON_3dPoint::DistanceTo ON_Line::ClosestPointTo

◆ Edge()

ON_Line ON_Triangle::Edge ( int  i) const

Returns: Edge opposite m_V[i] Specifically, ON_Line( m_V[(i+1)%3 ], m_V[(i+2)%3 ] )

◆ Flip()

void ON_Triangle::Flip ( unsigned char  edge = 0)

Description: Flip the normal of the triangle, by swapping the points of an edge. Parameters: edge - [in] The edge, as defined in the Edge() method. I.e., edge 0 swaps m_V[1] and m_V[2]

◆ GetBarycentricCoordinates()

bool ON_Triangle::GetBarycentricCoordinates ( const ON_3dPoint test_point,
bool  constrainInside,
double *  s1,
double *  s2 
) const

Description: Find the point that is closest to the test_point. Parameters: test_point - [in] constrainInside[in] - if true, variable are inside triangle s1, s2 - [out] PointAt( *s1, *s2) is the point on the triangle closest to test_point.

Returns: true if successful.

◆ GetBoundingBox()

bool ON_Triangle::GetBoundingBox ( ON_BoundingBox bbox,
int  bGrowBox = false 
) 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.

◆ GetTightBoundingBox()

bool ON_Triangle::GetTightBoundingBox ( ON_BoundingBox tight_bbox,
bool  bGrowBox = false,
const ON_Xform xform = nullptr 
) const

Description: Get tight bounding box with respect to a given frame 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=nullptr) If not nullptr, the tight bounding box of the transformed triangle is calculated. The triangle is not modified. Returns: True if a valid tight_bbox is returned.

◆ IsDegenerate()

bool ON_Triangle::IsDegenerate ( double  tol = ON_ZERO_TOLERANCE) const

Returns: true if Area()< tol Note: Recall Area = .5* base * height. So this degeneracy tests for a combination long enough and high enough. See Also: ON_Triangle::Area()

◆ IsValid()

bool ON_Triangle::IsValid ( ) const

Returns: True if m_V[i].IsValid() for all i

◆ LongestEdge()

unsigned char ON_Triangle::LongestEdge ( ) const

Returns: Index of edge opposite to m_V[i] that is longest. When lenghts are equal, lowest index has priority.

◆ Normal()

ON_3dVector ON_Triangle::Normal ( ) const

Returns: N = ( b-a) X ( c-a) /// where a,b,c are the verticies See Also: ON_Triangle UnitNormal()

◆ operator const ON_3dPoint *()

ON_Triangle::operator const ON_3dPoint * ( ) const

◆ operator ON_3dPoint *()

ON_Triangle::operator ON_3dPoint * ( )

◆ operator=()

ON_Triangle& ON_Triangle::operator= ( const ON_Triangle tri)
default

◆ operator[]() [1/2]

ON_3dPoint& ON_Triangle::operator[] ( int  )

Triangle[i] = Triangle.m_V[i].

◆ operator[]() [2/2]

const ON_3dPoint& ON_Triangle::operator[] ( int  ) const

◆ PlaneEquation()

ON_PlaneEquation ON_Triangle::PlaneEquation ( ) const

Returns: Plane containing Triangle with normal given by UnitNormal(). Notes: Ensure !IsDegenerate() to gaurentee meaningful result

◆ PointAt()

ON_3dPoint ON_Triangle::PointAt ( double  s1,
double  s2 
) const

Description: Evaluate point on triangle. Parameters: s1, s2 - [in] evaluation parameter. Returns: (1-s1-s2)* m_V[0] + s1*m_V[1] + s2*m_V[2] Notes: Point is in the triangle iff s1>=0, s2>=0 and s1 + s2<=1. Other values produce points on the plane of the triangle.

◆ Reverse()

void ON_Triangle::Reverse ( int  i)

Description: Reverse endpoints of Edge[i].

◆ Rotate() [1/2]

bool ON_Triangle::Rotate ( double  angle_in_radians,
const ON_3dVector axis_of_rotation,
const ON_3dPoint center_of_rotation 
)

◆ Rotate() [2/2]

bool ON_Triangle::Rotate ( double  sin_angle,
double  cos_angle,
const ON_3dVector axis_of_rotation,
const ON_3dPoint center_of_rotation 
)

rotate line about a point and axis

◆ ShortestEdge()

unsigned char ON_Triangle::ShortestEdge ( ) const

Returns: Index of edge opposite to m_V[i] that is shortest. When lenghts are equal, lowest index has priority.

◆ Spin()

void ON_Triangle::Spin ( unsigned char  move)

Description: Circle the order of points in the triangle, without any influence to any geometric property. Parameters: move - [in] Amounts of rotations in the order of the three points. By means of examples, "move" of 1 will move m_V[0] to m_V[1], m_V[1] to m_V[2] and m_V[2] to m_V[0].

◆ Split()

void ON_Triangle::Split ( unsigned char  edge,
ON_3dPoint  pt,
ON_Triangle out_a,
ON_Triangle out_b 
) const

Description: Split the triangles into two, by choosing an edge and a new point that will appear along the edge. Parameters: edge - [in] Edge index as defined in Edge() pt - [in] Point to add as splitter along edge out_a - [out] First triangle out_b - [out] Second triangle

◆ Transform()

bool ON_Triangle::Transform ( const ON_Xform xform)

◆ Translate()

bool ON_Triangle::Translate ( const ON_3dVector delta)

◆ UnitNormal()

ON_3dVector ON_Triangle::UnitNormal ( ) const

Returns: Normal().Unitize() Notes: Ensure !IsDegenerate() to gaurentee that UnitNormal().Length()==1 and the result is not just a bunch of noise. Can return zero vector in some degenerate cases.

Member Data Documentation

◆ m_V

ON_3dPoint ON_Triangle::m_V[3]

verticies

◆ NanTriangle

const ON_Triangle ON_Triangle::NanTriangle
static

◆ UnsetTriangle

const ON_Triangle ON_Triangle::UnsetTriangle
static

◆ ZeroTriangle

const ON_Triangle ON_Triangle::ZeroTriangle
static