Panda3D
|
This class is used by EggMesher::find_fans() to attempt to make an EggTriangleFan out of the polygons connected to the indicated vertex. More...
#include "eggMesherFanMaker.h"
Public Types | |
typedef plist< const EggMesherEdge * > | Edges |
typedef plist< EggMesherStrip * > | Strips |
Public Member Functions | |
EggMesherFanMaker (const EggMesherFanMaker ©) | |
EggMesherFanMaker (int vertex, EggMesherStrip *tri, EggMesher *mesher) | |
int | build (EggGroupNode *unrolled_tris) |
Begins the fanning process. | |
double | compute_angle () const |
Returns the overall angle subtended by the fan, from the leading edge to the trailing edge, in degrees. | |
bool | is_coplanar_with (const EggMesherFanMaker &other) const |
Returns true if the strip and the other strip are coplanar. | |
bool | is_empty () const |
Returns true if the fan maker has no edges, false otherwise. | |
bool | is_valid () const |
Returns true if the fan maker has enough edges to define at least one fan, false otherwise. | |
bool | join (EggMesherFanMaker &other) |
Attempts to connect two fans end-to-end. | |
bool | operator!= (const EggMesherFanMaker &other) const |
Provides a unique ordering between different fan makers based on the leading edge. | |
bool | operator< (const EggMesherFanMaker &other) const |
Provides a unique ordering between different fan makers based on the leading edge. | |
void | operator= (const EggMesherFanMaker ©) |
bool | operator== (const EggMesherFanMaker &other) const |
Provides a unique ordering between different fan makers based on the leading edge. | |
void | output (std::ostream &out) const |
int | unroll (Strips::iterator strip_begin, Strips::iterator strip_end, Edges::iterator edge_begin, Edges::iterator edge_end, EggGroupNode *unrolled_tris) |
Unrolls a planar subset of the current working fan, defined by the given iterators, into a series of triangles that zig-zag back and forth for better tristripping properties. | |
Public Attributes | |
Edges | _edges |
EggMesher * | _mesher |
bool | _planar |
Strips | _strips |
int | _vertex |
This class is used by EggMesher::find_fans() to attempt to make an EggTriangleFan out of the polygons connected to the indicated vertex.
Definition at line 34 of file eggMesherFanMaker.h.
typedef plist<const EggMesherEdge *> EggMesherFanMaker::Edges |
Definition at line 36 of file eggMesherFanMaker.h.
typedef plist<EggMesherStrip *> EggMesherFanMaker::Strips |
Definition at line 37 of file eggMesherFanMaker.h.
EggMesherFanMaker::EggMesherFanMaker | ( | int | vertex, |
EggMesherStrip * | tri, | ||
EggMesher * | mesher ) |
Definition at line 22 of file eggMesherFanMaker.cxx.
EggMesherFanMaker::EggMesherFanMaker | ( | const EggMesherFanMaker & | copy | ) |
Definition at line 38 of file eggMesherFanMaker.cxx.
int EggMesherFanMaker::build | ( | EggGroupNode * | unrolled_tris | ) |
Begins the fanning process.
Searches for triangles and connects them into a fan.
In certain cases, if egg_unroll_fans is enabled, the resulting fan may be retesselated into a series of zig-zag triangles, which are stored in unrolled_tris. Otherwise, an EggMesherStrip (representing the fan) is created and added to the mesher.
The return value is (loosely) the number of primitives created.
Definition at line 147 of file eggMesherFanMaker.cxx.
References compute_angle(), and unroll().
double EggMesherFanMaker::compute_angle | ( | ) | const |
Returns the overall angle subtended by the fan, from the leading edge to the trailing edge, in degrees.
Definition at line 111 of file eggMesherFanMaker.cxx.
References EggVertex::get_pos3(), EggVertexPool::get_vertex(), and is_valid().
Referenced by build().
|
inline |
Returns true if the strip and the other strip are coplanar.
Definition at line 62 of file eggMesherFanMaker.I.
Referenced by join().
|
inline |
Returns true if the fan maker has no edges, false otherwise.
Definition at line 45 of file eggMesherFanMaker.I.
|
inline |
Returns true if the fan maker has enough edges to define at least one fan, false otherwise.
Definition at line 54 of file eggMesherFanMaker.I.
Referenced by compute_angle().
bool EggMesherFanMaker::join | ( | EggMesherFanMaker & | other | ) |
Attempts to connect two fans end-to-end.
They must both share the same common vertex and a common edge.
The return value is true if the fans were successfully joined, or false if they could not be.
Definition at line 67 of file eggMesherFanMaker.cxx.
References is_coplanar_with().
|
inline |
Provides a unique ordering between different fan makers based on the leading edge.
Definition at line 28 of file eggMesherFanMaker.I.
References operator==().
|
inline |
Provides a unique ordering between different fan makers based on the leading edge.
Definition at line 18 of file eggMesherFanMaker.I.
void EggMesherFanMaker::operator= | ( | const EggMesherFanMaker & | copy | ) |
Definition at line 51 of file eggMesherFanMaker.cxx.
|
inline |
Provides a unique ordering between different fan makers based on the leading edge.
Definition at line 37 of file eggMesherFanMaker.I.
Referenced by operator!=().
void EggMesherFanMaker::output | ( | std::ostream & | out | ) | const |
Definition at line 328 of file eggMesherFanMaker.cxx.
int EggMesherFanMaker::unroll | ( | Strips::iterator | strip_begin, |
Strips::iterator | strip_end, | ||
Edges::iterator | edge_begin, | ||
Edges::iterator | edge_end, | ||
EggGroupNode * | unrolled_tris ) |
Unrolls a planar subset of the current working fan, defined by the given iterators, into a series of triangles that zig-zag back and forth for better tristripping properties.
The new triangles are added to unrolled_tris; the return value is 1 if successful, or 0 otherwise.
Definition at line 258 of file eggMesherFanMaker.cxx.
References EggGroupNode::add_child(), EggPrimitive::copy_attributes(), and EggVertexPool::get_vertex().
Referenced by build().
Edges EggMesherFanMaker::_edges |
Definition at line 63 of file eggMesherFanMaker.h.
EggMesher* EggMesherFanMaker::_mesher |
Definition at line 66 of file eggMesherFanMaker.h.
bool EggMesherFanMaker::_planar |
Definition at line 65 of file eggMesherFanMaker.h.
Strips EggMesherFanMaker::_strips |
Definition at line 64 of file eggMesherFanMaker.h.
int EggMesherFanMaker::_vertex |
Definition at line 62 of file eggMesherFanMaker.h.