Panda3D
Public Types | Public Member Functions | Public Attributes
EggMesherFanMaker Class Reference

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"

List of all members.

Public Types

typedef plist< const
EggMesherEdge * > 
Edges
typedef plist< EggMesherStrip * > Strips

Public Member Functions

 EggMesherFanMaker (int vertex, EggMesherStrip *tri, EggMesher *mesher)
 EggMesherFanMaker (const EggMesherFanMaker &copy)
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 &copy)
bool operator== (const EggMesherFanMaker &other) const
 Provides a unique ordering between different fan makers based on the leading edge.
void output (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

Detailed Description

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 37 of file eggMesherFanMaker.h.


Member Function Documentation

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 163 of file eggMesherFanMaker.cxx.

References compute_angle(), and unroll().

Returns the overall angle subtended by the fan, from the leading edge to the trailing edge, in degrees.

Definition at line 123 of file eggMesherFanMaker.cxx.

References EggVertex::get_pos3(), EggVertexPool::get_vertex(), and is_valid().

Referenced by build().

bool EggMesherFanMaker::is_coplanar_with ( const EggMesherFanMaker other) const [inline]

Returns true if the strip and the other strip are coplanar.

Definition at line 79 of file eggMesherFanMaker.I.

Referenced by join().

bool EggMesherFanMaker::is_empty ( ) const [inline]

Returns true if the fan maker has no edges, false otherwise.

Definition at line 57 of file eggMesherFanMaker.I.

bool EggMesherFanMaker::is_valid ( ) const [inline]

Returns true if the fan maker has enough edges to define at least one fan, false otherwise.

Definition at line 68 of file eggMesherFanMaker.I.

Referenced by compute_angle().

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 77 of file eggMesherFanMaker.cxx.

References is_coplanar_with().

bool EggMesherFanMaker::operator!= ( const EggMesherFanMaker other) const [inline]

Provides a unique ordering between different fan makers based on the leading edge.

Definition at line 35 of file eggMesherFanMaker.I.

References operator==().

bool EggMesherFanMaker::operator< ( const EggMesherFanMaker other) const [inline]

Provides a unique ordering between different fan makers based on the leading edge.

Definition at line 23 of file eggMesherFanMaker.I.

bool EggMesherFanMaker::operator== ( const EggMesherFanMaker other) const [inline]

Provides a unique ordering between different fan makers based on the leading edge.

Definition at line 46 of file eggMesherFanMaker.I.

Referenced by operator!=().

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 280 of file eggMesherFanMaker.cxx.

References EggGroupNode::add_child(), EggVertexPool::add_vertex(), EggPrimitive::copy_attributes(), and EggVertexPool::get_vertex().

Referenced by build().


The documentation for this class was generated from the following files:
 All Classes Functions Variables Enumerations