Panda3D
Public Types | Public Member Functions | Public Attributes | List of all members
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"

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. More...
 
double compute_angle () const
 Returns the overall angle subtended by the fan, from the leading edge to the trailing edge, in degrees. More...
 
bool is_coplanar_with (const EggMesherFanMaker &other) const
 Returns true if the strip and the other strip are coplanar. More...
 
bool is_empty () const
 Returns true if the fan maker has no edges, false otherwise. More...
 
bool is_valid () const
 Returns true if the fan maker has enough edges to define at least one fan, false otherwise. More...
 
bool join (EggMesherFanMaker &other)
 Attempts to connect two fans end-to-end. More...
 
bool operator!= (const EggMesherFanMaker &other) const
 Provides a unique ordering between different fan makers based on the leading edge. More...
 
bool operator< (const EggMesherFanMaker &other) const
 Provides a unique ordering between different fan makers based on the leading edge. More...
 
void operator= (const EggMesherFanMaker &copy)
 
bool operator== (const EggMesherFanMaker &other) const
 Provides a unique ordering between different fan makers based on the leading edge. More...
 
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. More...
 

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

◆ build()

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 unroll().

Referenced by compute_angle().

◆ compute_angle()

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

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

Referenced by join().

◆ is_coplanar_with()

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 is_valid().

◆ is_empty()

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.

References is_valid().

Referenced by operator==().

◆ is_valid()

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.

References is_coplanar_with().

Referenced by is_empty().

◆ join()

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

References compute_angle().

◆ 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 35 of file eggMesherFanMaker.I.

References operator==().

Referenced by operator<().

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

References operator!=().

◆ 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 46 of file eggMesherFanMaker.I.

References is_empty().

Referenced by operator!=().

◆ unroll()

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: