#include <OSGNodeGraph.h>
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 | |
| *Edge * | getEdge (int vS, int vE) |
| Edge & | addEdge (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 |
Definition at line 59 of file OSGNodeGraph.h.
|
|
Definition at line 271 of file OSGNodeGraph.h. |
|
|
Definition at line 64 of file OSGNodeGraph.h.
|
|
|
Definition at line 35 of file OSGNodeGraph.cpp.
|
|
|
Definition at line 47 of file OSGNodeGraph.cpp. 00048 : _nodeVec(obj._nodeVec), _edgeMapVec(obj._edgeMapVec) 00049 { 00050 return; 00051 }
|
|
|
Definition at line 60 of file OSGNodeGraph.cpp. References clear(). 00061 { 00062 clear(); 00063 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||||||||||
|
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 }
|
|
||||||||||||||||
|
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 }
|
|
||||||||||||||||||||
|
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 }
|
|
|
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 }
|
|
||||||||||||||||||||
|
|
|
||||||||||||
|
|
|
|
|
|
||||||||||||
|
Definition at line 440 of file OSGNodeGraph.h. 00442 { 00443 return _nodeVec[index].edgeVec[side]->vertexStart; 00444 }
|
|
||||||||||||
|
Definition at line 445 of file OSGNodeGraph.h. 00447 { 00448 return _nodeVec[index].edgeVec[side]->vertexEnd; 00449 }
|
|
|
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 }
|
|
|
Definition at line 66 of file OSGNodeGraph.h. |
|
|
Definition at line 69 of file OSGNodeGraph.h. |
|
|
Definition at line 72 of file OSGNodeGraph.h. |
|
|
Definition at line 273 of file OSGNodeGraph.h. |
|
|
Definition at line 274 of file OSGNodeGraph.h. |
1.4.3