Panda3D
Public Member Functions | Public Attributes | List of all members
Triangulator Class Reference

This class can triangulate a convex or concave polygon, even one with holes. More...

Inheritance diagram for Triangulator:
Triangulator3

Public Member Functions

 __init__ ()
 
 __init__ (const Triangulator)
 
 addHoleVertex (int index)
 Adds the next consecutive vertex of the current hole. More...
 
 addPolygonVertex (int index)
 Adds the next consecutive vertex of the polygon. More...
 
int addVertex (const LPoint2d point)
 Adds a new vertex to the vertex pool. More...
 
int addVertex (double x, double y)
 Adds a new vertex to the vertex pool. More...
 
 beginHole ()
 Finishes the previous hole, if any, and prepares to add a new hole. More...
 
 clear ()
 Removes all vertices and polygon specifications from the Triangulator, and prepares it to start over. More...
 
 clearPolygon ()
 Removes the current polygon definition (and its set of holes), but does not clear the vertex pool. More...
 
int getNumTriangles ()
 Returns the number of triangles generated by the previous call to triangulate(). More...
 
int getNumVertices ()
 Returns the number of vertices in the pool. More...
 
int getTriangleV0 (int n)
 Returns vertex 0 of the nth triangle generated by the previous call to triangulate(). More...
 
int getTriangleV1 (int n)
 Returns vertex 1 of the nth triangle generated by the previous call to triangulate(). More...
 
int getTriangleV2 (int n)
 Returns vertex 2 of the nth triangle generated by the previous call to triangulate(). More...
 
const LPoint2d getVertex (int n)
 Returns the nth vertex. More...
 
list getVertices ()
 
bool isLeftWinding ()
 Returns true if the polygon vertices are listed in counterclockwise order, or false if they appear to be listed in clockwise order. More...
 
 triangulate ()
 Does the work of triangulating the specified polygon. More...
 

Public Attributes

const LPoint2d vertices []
 

Detailed Description

This class can triangulate a convex or concave polygon, even one with holes.

It is adapted from an algorithm published as:

Narkhede A. and Manocha D., Fast polygon triangulation algorithm based on Seidel's Algorithm, UNC-CH, 1994.

http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html

It works strictly on 2-d points. See Triangulator3 for 3-d points.

Member Function Documentation

◆ __init__() [1/2]

__init__ ( )

◆ __init__() [2/2]

__init__ ( const  Triangulator)

◆ addHoleVertex()

addHoleVertex ( int  index)

Adds the next consecutive vertex of the current hole.

This vertex should index into the vertex pool established by repeated calls to add_vertex().

The vertices may be listed in either clockwise or counterclockwise order. Vertices should not be repeated.

◆ addPolygonVertex()

addPolygonVertex ( int  index)

Adds the next consecutive vertex of the polygon.

This vertex should index into the vertex pool established by repeated calls to add_vertex().

The vertices may be listed in either clockwise or counterclockwise order. Vertices should not be repeated. In particular, do not repeat the first vertex at the end.

◆ addVertex() [1/2]

int addVertex ( const LPoint2d  point)

Adds a new vertex to the vertex pool.

Returns the vertex index number.

◆ addVertex() [2/2]

int addVertex ( double  x,
double  y 
)

Adds a new vertex to the vertex pool.

Returns the vertex index number.

◆ beginHole()

beginHole ( )

Finishes the previous hole, if any, and prepares to add a new hole.

◆ clear()

clear ( )

Removes all vertices and polygon specifications from the Triangulator, and prepares it to start over.

◆ clearPolygon()

clearPolygon ( )

Removes the current polygon definition (and its set of holes), but does not clear the vertex pool.

◆ getNumTriangles()

int getNumTriangles ( )

Returns the number of triangles generated by the previous call to triangulate().

◆ getNumVertices()

int getNumVertices ( )

Returns the number of vertices in the pool.

Note that the Triangulator might append new vertices, in addition to those added by the user, if any of the polygon is self-intersecting, or if any of the holes intersect some part of the polygon edges.

◆ getTriangleV0()

int getTriangleV0 ( int  n)

Returns vertex 0 of the nth triangle generated by the previous call to triangulate().

This is a zero-based index into the vertices added by repeated calls to add_vertex().

◆ getTriangleV1()

int getTriangleV1 ( int  n)

Returns vertex 1 of the nth triangle generated by the previous call to triangulate().

This is a zero-based index into the vertices added by repeated calls to add_vertex().

◆ getTriangleV2()

int getTriangleV2 ( int  n)

Returns vertex 2 of the nth triangle generated by the previous call to triangulate().

This is a zero-based index into the vertices added by repeated calls to add_vertex().

◆ getVertex()

const LPoint2d getVertex ( int  n)

Returns the nth vertex.

◆ getVertices()

list getVertices ( )

◆ isLeftWinding()

bool isLeftWinding ( )

Returns true if the polygon vertices are listed in counterclockwise order, or false if they appear to be listed in clockwise order.

◆ triangulate()

triangulate ( )

Does the work of triangulating the specified polygon.

After this call, you may retrieve the new triangles one at a time by iterating through get_triangle_v0/1/2().

Member Data Documentation

◆ vertices

const LPoint2d vertices[]