105 lines
3.6 KiB
Plaintext
105 lines
3.6 KiB
Plaintext
// Filename: triangulator.I
|
|
// Created by: drose (18Jan07)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
//
|
|
// All use of this software is subject to the terms of the revised BSD
|
|
// license. You should have received a copy of this license along
|
|
// with this source code in a file named "LICENSE."
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: Triangulator::add_vertex
|
|
// Access: Published
|
|
// Description: Adds a new vertex to the vertex pool. Returns the
|
|
// vertex index number.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE int Triangulator::
|
|
add_vertex(double x, double y) {
|
|
return add_vertex(LPoint2d(x, y));
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: Triangulator::get_num_vertices
|
|
// Access: Published
|
|
// Description: 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.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE int Triangulator::
|
|
get_num_vertices() const {
|
|
return _vertices.size();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: Triangulator::get_vertex
|
|
// Access: Published
|
|
// Description: Returns the nth vertex.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const LPoint2d &Triangulator::
|
|
get_vertex(int n) const {
|
|
nassertr(n >= 0 && n < (int)_vertices.size(), LPoint2d::zero());
|
|
return _vertices[n];
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: Triangulator::is_left_winding
|
|
// Access: Published
|
|
// Description: Returns true if the polygon vertices are listed in
|
|
// counterclockwise order, or false if they appear to be
|
|
// listed in clockwise order.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE bool Triangulator::
|
|
is_left_winding() const {
|
|
return check_left_winding(_polygon);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: Triangulator::Triangle::Constructor
|
|
// Access: Private
|
|
// Description:
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE Triangulator::Triangle::
|
|
Triangle(Triangulator *t, int v0, int v1, int v2) :
|
|
_v0(t->vert[v0].user_i),
|
|
_v1(t->vert[v1].user_i),
|
|
_v2(t->vert[v2].user_i)
|
|
{
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: Triangulator::segment_t::Default Constructor
|
|
// Access: Private
|
|
// Description:
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE Triangulator::segment_t::
|
|
segment_t() {
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: Triangulator::segment_t::Constructor
|
|
// Access: Private
|
|
// Description:
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE Triangulator::segment_t::
|
|
segment_t(Triangulator *t, int v0_i, int v1_i, int prev, int next) :
|
|
is_inserted(false),
|
|
root0(0), root1(0),
|
|
next(next),
|
|
prev(prev),
|
|
v0_i(v0_i)
|
|
{
|
|
v0.x = t->_vertices[v0_i][0];
|
|
v0.y = t->_vertices[v0_i][1];
|
|
|
|
v1.x = t->_vertices[v1_i][0];
|
|
v1.y = t->_vertices[v1_i][1];
|
|
}
|