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

osg::NodeGraph Class Reference

#include <OSGNodeGraph.h>

List of all members.

Public Member Functions

bool verify (bool printNotice=false)
void clear (void)
Constructors
NodeGraph (void)
 NodeGraph (const NodeGraph &obj)
Destructors
*virtual ~NodeGraph (void)
Set
*void init (int vertexNum, int nodeNum, int reserveEdges)
bool setNode (int index, int v0, int v1, int v2)
Construction
*int createPathVec (std::vector< Path > &stripVec, bool createStrips=true, bool createFans=true, int minFanEdgeCount=8)
Get
*int getPrimitive (Path &path, std::vector< int > &primitive)
int getEdges (std::list< IndexEdge > &edgeList)
int getStartOfEdge (int index, int side)
int getEndOfEdge (int index, int side)

Protected Member Functions

Graph Specific
*EdgegetEdge (int vS, int vE)
EdgeaddEdge (int vS, int vE, Node &node, int eS)

Private Types

typedef std::vector< Edge * > EdgeMap
enum  WalkCase {
  START = -2, NEW = -1, LEFT = 0, RIGHT = 1,
  FINISH = 10
}

Private Attributes

std::vector< Node_nodeVec
std::vector< EdgeMap_edgeMapVec

Friends

class Edge
class NodeList
class Node

Classes

class  Edge
class  IndexEdge
class  Node
class  NodeList
class  Path


Detailed Description

Definition at line 59 of file OSGNodeGraph.h.


Member Typedef Documentation

typedef std::vector<Edge *> osg::NodeGraph::EdgeMap [private]
 

Definition at line 271 of file OSGNodeGraph.h.


Member Enumeration Documentation

enum osg::NodeGraph::WalkCase [private]
 

Enumerator:
START 
NEW 
LEFT 
RIGHT 
FINISH 

Definition at line 64 of file OSGNodeGraph.h.

00064 { START = -2, NEW = -1, LEFT = 0, RIGHT = 1, FINISH = 10 };


Constructor & Destructor Documentation

NodeGraph::NodeGraph void   ) 
 

Definition at line 35 of file OSGNodeGraph.cpp.

00036 {
00037     ;
00038 }          

NodeGraph::NodeGraph const NodeGraph obj  ) 
 

Definition at line 47 of file OSGNodeGraph.cpp.

00048     : _nodeVec(obj._nodeVec), _edgeMapVec(obj._edgeMapVec)
00049 {
00050     return;
00051 }

NodeGraph::~NodeGraph void   )  [virtual]
 

Definition at line 60 of file OSGNodeGraph.cpp.

References clear().

00061 {
00062     clear();
00063 }


Member Function Documentation

* Edge* osg::NodeGraph::getEdge int  vS,
int  vE
[inline, protected]
 

Definition at line 283 of file OSGNodeGraph.h.

00284     {
00285         EdgeMap &edgeMap = _edgeMapVec[vS];
00286         EdgeMap::iterator eI;
00287         Edge *edge = 0;
00288 
00289         for (eI = edgeMap.begin(); eI != edgeMap.end(); eI++)
00290             if ((*eI)->vertexEnd == vE)
00291             {
00292                 edge = *eI;
00293                 break;
00294             }
00295 
00296         return edge;
00297     }

Edge& osg::NodeGraph::addEdge int  vS,
int  vE,
Node node,
int  eS
[inline, protected]
 

Definition at line 299 of file OSGNodeGraph.h.

References osg::NodeGraph::Edge::brotherEdge, osg::NodeGraph::Node::degree, and osg::NodeGraph::Edge::node.

00300     {
00301         Edge *edge = new Edge (vS,vE,node,eS);
00302         Edge *brotherEdge = getEdge(vE, vS);
00303 
00304         _edgeMapVec[vS].push_back(edge);
00305 
00306         if (brotherEdge)
00307         {
00308             edge->brotherEdge = brotherEdge;
00309             edge->node->degree++;
00310             brotherEdge->brotherEdge = edge;
00311             brotherEdge->node->degree++;
00312         }
00313         return *edge;
00314      }

void NodeGraph::init int  vertexNum,
int  nodeNum,
int  reserveEdges
 

Definition at line 72 of file OSGNodeGraph.cpp.

References _edgeMapVec, and _nodeVec.

00073 {
00074   int i;
00075 
00076     _nodeVec   .resize(nodeNum  ); 
00077     _edgeMapVec.resize(vertexNum); 
00078 
00079   if(reserveEdges > 0) 
00080   {
00081       for(i = 0; i < vertexNum; i++) 
00082       {
00083           _edgeMapVec[i].reserve(reserveEdges);
00084       }
00085   }
00086 }

bool osg::NodeGraph::setNode int  index,
int  v0,
int  v1,
int  v2
[inline]
 

Definition at line 341 of file OSGNodeGraph.h.

00342     {
00343         if (v0 != v1 && v1 != v2 && v2 != v1)
00344         {
00345             if (!getEdge(v0,v1) && !getEdge(v1,v2) && !getEdge(v2,v0))
00346             {                
00347                 _nodeVec[index].init(index,0,v0,v1,v2);
00348                 _nodeVec[index].edgeVec[0] = &addEdge(v0,v1,_nodeVec[index],0);
00349                 _nodeVec[index].edgeVec[1] = &addEdge(v1,v2,_nodeVec[index],1);
00350                 _nodeVec[index].edgeVec[2] = &addEdge(v2,v0,_nodeVec[index],2);
00351             }
00352             else 
00353             {
00354                 _nodeVec[index].init(index,-1,v0,v1,v2);
00355             }
00356             return true;
00357         }
00358         else
00359         {
00360             return false;
00361         }
00362     }

bool NodeGraph::verify bool  printNotice = false  ) 
 

Definition at line 96 of file OSGNodeGraph.cpp.

References _edgeMapVec, _nodeVec, FFATAL, and FNOTICE.

00097 {
00098     bool retCode = true;
00099     int i, n = _nodeVec.size(); 
00100     vector<int> nodeDegree(5,0);
00101     int edgeCount = 0;
00102     map< int, int > connectionMap;
00103     map< int, int >::iterator connectionI;
00104     unsigned nonManifoldCount = 0;
00105 
00106     for (i = 0; i < n; i++)
00107         if (_nodeVec[i].index == i)
00108         {
00109             if(_nodeVec[i].degree >= 0 && _nodeVec[i].degree < 4)
00110             {
00111                 nodeDegree[_nodeVec[i].degree]++;
00112             }
00113             else
00114             {
00115               if (_nodeVec[i].degree == -1)
00116                 nonManifoldCount++;
00117               else
00118               {
00119                 FFATAL (( "Invalid degree %d in node %d\n", 
00120                           _nodeVec[i].degree, i ));
00121               }
00122             }
00123         }
00124         else
00125             if (_nodeVec[i].index == -1)
00126                 nodeDegree[4]++;
00127             else {
00128         FFATAL (( "Invalid node index %d for face %d\n",
00129                   _nodeVec[i].index, i ));
00130                 retCode = false;
00131             }
00132 
00133     if (printInfo) {
00134       FNOTICE (( "NodeDegree Count:  %d %d %d %d (%d)\n",
00135                  nodeDegree[0], nodeDegree[1], nodeDegree[2], nodeDegree[3],
00136                  nodeDegree[4] ));
00137 
00138       n = _edgeMapVec.size();
00139       for (i = 0; i < n; i++) 
00140         edgeCount += _edgeMapVec[i].size();
00141 
00142       FNOTICE (( "NonManifold split: %d\n", nonManifoldCount ));
00143       FNOTICE (( "HalfEdgeCount:     %d\n", edgeCount ));
00144     }
00145  
00146     return retCode;
00147 }

* int osg::NodeGraph::createPathVec std::vector< Path > &  stripVec,
bool  createStrips = true,
bool  createFans = true,
int  minFanEdgeCount = 8
 

* int osg::NodeGraph::getPrimitive Path path,
std::vector< int > &  primitive
 

int osg::NodeGraph::getEdges std::list< IndexEdge > &  edgeList  ) 
 

int osg::NodeGraph::getStartOfEdge int  index,
int  side
[inline]
 

Definition at line 440 of file OSGNodeGraph.h.

00442     { 
00443         return _nodeVec[index].edgeVec[side]->vertexStart; 
00444     }

int osg::NodeGraph::getEndOfEdge int  index,
int  side
[inline]
 

Definition at line 445 of file OSGNodeGraph.h.

00447     {
00448         return _nodeVec[index].edgeVec[side]->vertexEnd; 
00449     }

void NodeGraph::clear void   ) 
 

Definition at line 584 of file OSGNodeGraph.cpp.

References _edgeMapVec, and _nodeVec.

Referenced by ~NodeGraph().

00585 {
00586   EdgeMap::iterator eI;
00587   int i, n = _edgeMapVec.size();
00588 
00589   for (i = 0; i < n; i++) {
00590     for (eI = _edgeMapVec[i].begin(); eI != _edgeMapVec[i].end(); ++eI)
00591       delete (*eI);
00592   }                
00593 
00594     _edgeMapVec.clear();
00595     _nodeVec.clear();
00596 }


Friends And Related Function Documentation

friend class Edge [friend]
 

Definition at line 66 of file OSGNodeGraph.h.

friend class NodeList [friend]
 

Definition at line 69 of file OSGNodeGraph.h.

friend class Node [friend]
 

Definition at line 72 of file OSGNodeGraph.h.


Member Data Documentation

std::vector<Node> osg::NodeGraph::_nodeVec [private]
 

Definition at line 273 of file OSGNodeGraph.h.

Referenced by clear(), init(), and verify().

std::vector<EdgeMap> osg::NodeGraph::_edgeMapVec [private]
 

Definition at line 274 of file OSGNodeGraph.h.

Referenced by clear(), init(), and verify().


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