|
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.