15 #ifndef TRIANGULATOR_H 16 #define TRIANGULATOR_H 18 #include "pandabase.h" 20 #include "vector_int.h" 42 int add_vertex(
const LPoint2d &point);
43 INLINE
int add_vertex(
double x,
double y);
45 INLINE
int get_num_vertices()
const;
46 INLINE
const LPoint2d &get_vertex(
int n)
const;
47 MAKE_SEQ(get_vertices, get_num_vertices, get_vertex);
50 void add_polygon_vertex(
int index);
51 INLINE
bool is_left_winding()
const;
54 void add_hole_vertex(
int index);
58 int get_num_triangles()
const;
59 int get_triangle_v0(
int n)
const;
60 int get_triangle_v1(
int n)
const;
61 int get_triangle_v2(
int n)
const;
64 void cleanup_polygon_indices(vector_int &polygon);
76 INLINE Triangle(
Triangulator *t,
int v0,
int v1,
int v2);
91 INLINE segment_t(
Triangulator *t,
int v0_i,
int v1_i,
int prev,
int next);
151 TrapezoidStructure tr;
172 bool check_left_winding(
const vector_int &range)
const;
173 void make_segment(
const vector_int &range,
bool want_left_winding);
175 int choose_segment();
176 static double math_log2(
double v);
177 static int math_logstar_n(
int n);
178 static int math_N(
int n,
int h);
182 int _max(point_t *yval, point_t *v0, point_t *v1);
183 int _min(point_t *yval, point_t *v0, point_t *v1);
184 int _greater_than(point_t *v0, point_t *v1);
185 int _equal_to(point_t *v0, point_t *v1);
186 int _greater_than_equal_to(point_t *v0, point_t *v1);
187 int _less_than(point_t *v0, point_t *v1);
188 int init_query_structure(
int segnum);
189 int is_left_of(
int segnum, point_t *v);
190 int inserted(
int segnum,
int whichpt);
191 int locate_endpoint(point_t *v, point_t *vo,
int r);
192 int merge_trapezoids(
int segnum,
int tfirst,
int tlast,
int side);
193 int add_segment(
int segnum);
194 int find_new_roots(
int segnum);
195 int construct_trapezoids(
int nseg);
197 int inside_polygon(trap_t *t);
199 int new_chain_element();
200 double get_angle(point_t *vp0, point_t *vpnext, point_t *vp1);
201 int get_vertex_positions(
int v0,
int v1,
int *ip,
int *iq);
202 int make_new_monotone_poly(
int mcur,
int v0,
int v1);
203 int monotonate_trapezoids(
int n);
204 int traverse_polygon(
int mcur,
int trnum,
int from,
int dir);
205 void triangulate_monotone_polygons(
int nvert,
int nmonpoly);
206 void triangulate_single_polygon(
int nvert,
int posmax,
int side);
208 friend class Triangle;
209 friend struct segment_t;
212 #include "triangulator.I" This is a two-component point in space.
This class can triangulate a convex or concave polygon, even one with holes.