Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

osg::HalfEdgeGraph::Triangle Class Reference

List of all members.

Public Member Functions

void init (void)
bool valid (void)
void resetDegreeState (const Int32 type)
void drop (void)
bool verify (void)

Public Attributes

Int32 state
Trianglenext
Triangleprev
HalfEdge halfEdgeVec [3]

Detailed Description

Definition at line 99 of file OSGHalfEdgeGraph.h.


Member Function Documentation

void osg::HalfEdgeGraph::Triangle::init void   )  [inline]
 

Definition at line 73 of file OSGHalfEdgeGraph.inl.

References osg::HalfEdgeGraph::DEGREE_0, halfEdgeVec, osg::HalfEdgeGraph::HalfEdge::next, next, prev, state, and osg::HalfEdgeGraph::HalfEdge::triangle.

Referenced by osg::HalfEdgeGraph::addTriangle().

00074 {
00075     state = DEGREE_0;
00076     next = prev = 0;
00077     halfEdgeVec[0].next = &(halfEdgeVec[1]);
00078     halfEdgeVec[0].triangle = this;
00079     halfEdgeVec[1].next = &(halfEdgeVec[2]);
00080     halfEdgeVec[1].triangle = this;
00081     halfEdgeVec[2].next = &(halfEdgeVec[0]);
00082     halfEdgeVec[2].triangle = this;
00083 }

bool osg::HalfEdgeGraph::Triangle::valid void   )  [inline]
 

Definition at line 86 of file OSGHalfEdgeGraph.inl.

References osg::HalfEdgeGraph::DEGREE_0, and state.

Referenced by osg::HalfEdgeGraph::calcOptPrim().

00087 {
00088     return (state >= DEGREE_0) ? true : false; 
00089 }

void osg::HalfEdgeGraph::Triangle::resetDegreeState const Int32  type  )  [inline]
 

Definition at line 92 of file OSGHalfEdgeGraph.inl.

References halfEdgeVec, state, osg::HalfEdgeGraph::HalfEdge::triangle, and osg::HalfEdgeGraph::HalfEdge::twin.

Referenced by osg::HalfEdgeGraph::calcOptPrim().

00093 {
00094     state = (halfEdgeVec[0].twin && 
00095             (halfEdgeVec[0].twin->triangle->state >= type) ? 1 : 0) +
00096             (halfEdgeVec[1].twin && 
00097             (halfEdgeVec[1].twin->triangle->state >= type) ? 1 : 0) +
00098             (halfEdgeVec[2].twin && 
00099             (halfEdgeVec[2].twin->triangle->state >= type) ? 1 : 0);
00100 }

void osg::HalfEdgeGraph::Triangle::drop void   )  [inline]
 

Definition at line 103 of file OSGHalfEdgeGraph.inl.

References halfEdgeVec, state, osg::HalfEdgeGraph::HalfEdge::triangle, and osg::HalfEdgeGraph::HalfEdge::twin.

Referenced by osg::HalfEdgeGraph::calcOptPrim().

00104 {
00105     if(halfEdgeVec[0].twin && (halfEdgeVec[0].twin->triangle->state > 0))
00106         halfEdgeVec[0].twin->triangle->state--;
00107     if(halfEdgeVec[1].twin && (halfEdgeVec[1].twin->triangle->state > 0))
00108         halfEdgeVec[1].twin->triangle->state--;
00109     if(halfEdgeVec[2].twin && (halfEdgeVec[2].twin->triangle->state > 0))
00110         halfEdgeVec[2].twin->triangle->state--;
00111 }

bool HalfEdgeGraph::Triangle::verify void   ) 
 

Definition at line 105 of file OSGHalfEdgeGraph.cpp.

References FINFO, halfEdgeVec, osg::HalfEdgeGraph::HalfEdge::next, SINFO, osg::HalfEdgeGraph::HalfEdge::triangle, osg::HalfEdgeGraph::HalfEdge::twin, and osg::HalfEdgeGraph::HalfEdge::vertexStart().

00106 {
00107     bool retCode = true;
00108     Triangle *neighbor[3];
00109     Triangle *tP;
00110 
00111     neighbor[0] = halfEdgeVec[0].twin ? halfEdgeVec[0].twin->triangle : 0;
00112     neighbor[1] = halfEdgeVec[1].twin ? halfEdgeVec[1].twin->triangle : 0;
00113     neighbor[2] = halfEdgeVec[2].twin ? halfEdgeVec[2].twin->triangle : 0;
00114 
00115     if ( ( neighbor[0] &&
00116            ( (neighbor[0] == neighbor[1] ) ||
00117              (neighbor[0] == neighbor[2] ) 
00118              ) 
00119            ) ||
00120          ( neighbor[1] &&
00121            ( (neighbor[1] == neighbor[0] ) ||
00122              (neighbor[1] == neighbor[2] ) ) 
00123            ) ||
00124          ( neighbor[2] &&
00125            ( (neighbor[2] == neighbor[0] ) ||
00126              (neighbor[2] == neighbor[1] ) ) 
00127            )
00128          )
00129     {
00130         FINFO(("HalfEdgeGraph::Triangle::verify: Neighbor linked more "
00131                "than once: %p/%p/%p\n", neighbor[0],
00132                                         neighbor[1],
00133                                         neighbor[2]));
00134         retCode = false;
00135     }
00136 
00137     if((halfEdgeVec[0].vertexStart() == halfEdgeVec[1].vertexStart()) ||
00138        (halfEdgeVec[0].vertexStart() == halfEdgeVec[2].vertexStart()) ||
00139        (halfEdgeVec[1].vertexStart() == halfEdgeVec[2].vertexStart()))
00140     {
00141         SINFO << "HalfEdgeGraph::Triangle::verify: Invalid collapsed Triangle" 
00142               << endl;
00143         retCode = false;
00144     }
00145 
00146     if((halfEdgeVec[0].triangle != this) ||
00147        (halfEdgeVec[1].triangle != this) ||
00148        (halfEdgeVec[2].triangle != this))
00149     {
00150         SINFO << "HalfEdgeGraph::Triangle::verify: Invalid halfEdge->"
00151               << "triangle pointer" << endl;
00152         retCode = false;
00153     }
00154 
00155     if((halfEdgeVec[0].next != &halfEdgeVec[1]) ||
00156        (halfEdgeVec[1].next != &halfEdgeVec[2]) ||
00157        (halfEdgeVec[2].next != &halfEdgeVec[0]))
00158     {
00159         SINFO << "HalfEdgeGraph::Triangle::verify: Edge next link error" 
00160               << endl;
00161         retCode = false;
00162     }
00163 
00164     return retCode;
00165 }


Member Data Documentation

Int32 osg::HalfEdgeGraph::Triangle::state
 

Definition at line 103 of file OSGHalfEdgeGraph.h.

Referenced by osg::HalfEdgeGraph::addHalfEdge(), osg::HalfEdgeGraph::addTriangle(), osg::HalfEdgeGraph::calcOptPrim(), drop(), osg::HalfEdgeGraph::dropOutTriangle(), init(), resetDegreeState(), and valid().

Triangle* osg::HalfEdgeGraph::Triangle::next
 

Definition at line 104 of file OSGHalfEdgeGraph.h.

Referenced by osg::HalfEdgeGraph::TriangleList::add(), osg::HalfEdgeGraph::calcOptPrim(), osg::HalfEdgeGraph::calcStripCost(), osg::HalfEdgeGraph::TriangleList::countElem(), init(), osg::HalfEdgeGraph::TriangleList::paste(), osg::HalfEdgeGraph::TriangleList::release(), and osg::HalfEdgeGraph::verify().

Triangle* osg::HalfEdgeGraph::Triangle::prev
 

Definition at line 105 of file OSGHalfEdgeGraph.h.

Referenced by osg::HalfEdgeGraph::TriangleList::add(), osg::HalfEdgeGraph::calcStripCost(), init(), osg::HalfEdgeGraph::TriangleList::paste(), and osg::HalfEdgeGraph::TriangleList::release().

HalfEdge osg::HalfEdgeGraph::Triangle::halfEdgeVec[3]
 

Definition at line 106 of file OSGHalfEdgeGraph.h.

Referenced by osg::HalfEdgeGraph::addTriangle(), osg::HalfEdgeGraph::calcOptPrim(), drop(), osg::HalfEdgeGraph::dropOutTriangle(), osg::HalfEdgeGraph::findGateEdge(), init(), resetDegreeState(), osg::HalfEdgeGraph::verify(), and verify().


The documentation for this class was generated from the following files:
Generated on Thu Aug 25 04:15:33 2005 for OpenSG by  doxygen 1.4.3