Computational Geometry Algorithms Library  1.0
Computational Geometry Algorithms Library Documentation
Public Member Functions | Public Attributes | Protected Attributes | List of all members
HalfEdgeList Class Reference

#include <HalfEdgeList.h>

Collaboration diagram for HalfEdgeList:
Collaboration graph
[legend]

Public Member Functions

 HalfEdgeList (void)
 
 ~HalfEdgeList (void)
 
void addToList (DCELHalfEdge *newEdge)
 
void removeFromList (DCELHalfEdge *edge)
 
DCELHalfEdgeaddTwinTo (DCELHalfEdge *edge, DCELHalfEdge *LaggingTwin)
 GETTTING THE HALF EDGE LIST. More...
 
DCELFaceaddEdgeBetween (DCELVertex *v1, DCELVertex *v2, DCELFace *face)
 GETTTING THE HALF EDGE LIST. More...
 

Public Attributes

DCELHalfEdgehead
 
DCELHalfEdgetail
 
int globalEdgeCount
 

Protected Attributes

bool status
 

Constructor & Destructor Documentation

HalfEdgeList::HalfEdgeList ( void  )
25  : globalEdgeCount(0), head(NULL), tail(NULL), status(false)
26 {
27 }
DCELHalfEdge * head
Definition: HalfEdgeList.h:13
DCELHalfEdge * tail
Definition: HalfEdgeList.h:14
bool status
Definition: HalfEdgeList.h:22
int globalEdgeCount
Definition: HalfEdgeList.h:15
HalfEdgeList::~HalfEdgeList ( void  )
30 {
31 }

Member Function Documentation

DCELFace * HalfEdgeList::addEdgeBetween ( DCELVertex v1,
DCELVertex v2,
DCELFace face 
)

GETTTING THE HALF EDGE LIST.

Hepler For Handling End Vertex. Walk around the path and add vertices that are in the Hal Edge Vetices List

76 {
77  DCELHalfEdge* walker = face->edge;
78  while (1) {
79  if (walker->next->origin == v1)
80  break;
81  walker = walker->next;
82  }
83 
84  DCELHalfEdge* halfEdge = new DCELHalfEdge();
85  halfEdge->origin = v2;
86  halfEdge->meta = ++globalEdgeCount;
87  halfEdge->next = walker->next;
88 
89  DCELHalfEdge* twinWalker = face->edge;
90  while (1) {
91  if (twinWalker->next->origin == v2)
92  break;
93  twinWalker = twinWalker->next;
94  }
95 
96  DCELHalfEdge* twinEdge = new DCELHalfEdge();
97  twinEdge->origin = v1;
98  twinEdge->meta = ++globalEdgeCount;
99  twinEdge->next = twinWalker->next;
100 
101  walker->next = twinEdge;
102  twinWalker->next = halfEdge;
103 
104  halfEdge->twin = twinEdge;
105  twinEdge->twin = halfEdge;
106 
107 
108  DCELFace* firstHalf = new DCELFace();
109  firstHalf->edge = halfEdge;
110  walker = halfEdge;
111  do {
112  walker->face = firstHalf;
113  walker = walker->next;
114  } while(walker != halfEdge);
115 
116  DCELFace* secHalf = new DCELFace();
117  secHalf->edge = twinEdge;
118  twinEdge->face = secHalf;
119  walker = twinEdge;
120  do {
121  walker->face = secHalf;
122  walker = walker->next;
123  } while(walker != twinEdge);
124 
125  secHalf->next = firstHalf;
126  return secHalf;
127 }
DCELHalfEdge * twin
Definition: DCELHalfEdge.h:14
DCELHalfEdge * next
Definition: DCELHalfEdge.h:15
Definition: DCELFace.h:1
DCELVertex * origin
Definition: DCELHalfEdge.h:17
DCELFace * face
Definition: DCELHalfEdge.h:16
DCELFace * next
Definition: DCELFace.h:9
int globalEdgeCount
Definition: HalfEdgeList.h:15
Definition: DCELHalfEdge.h:8
int meta
Definition: DCELHalfEdge.h:20
DCELHalfEdge * edge
Definition: DCELFace.h:7
void HalfEdgeList::addToList ( DCELHalfEdge newEdge)
34 {
35  newEdge->meta = ++globalEdgeCount;
36 
37  if (head)
38  {
39  tail->next = newEdge;
40  tail = newEdge;
41  }
42  else {
43  head = newEdge;
44  tail = newEdge;
45  }
46 }
DCELHalfEdge * next
Definition: DCELHalfEdge.h:15
DCELHalfEdge * head
Definition: HalfEdgeList.h:13
DCELHalfEdge * tail
Definition: HalfEdgeList.h:14
int globalEdgeCount
Definition: HalfEdgeList.h:15
int meta
Definition: DCELHalfEdge.h:20
DCELHalfEdge * HalfEdgeList::addTwinTo ( DCELHalfEdge edge,
DCELHalfEdge LaggingTwin 
)

GETTTING THE HALF EDGE LIST.

Adding a twin

51  {
52  DCELHalfEdge *twinEdge = new DCELHalfEdge();
53  twinEdge->meta = ++globalEdgeCount;
54  twinEdge->twin = edge;
55  if (LaggingTwin) {
56  LaggingTwin->origin = twinEdge->twin->origin;
57  twinEdge->next = LaggingTwin;
58  }
59  edge->twin = twinEdge;
60  return twinEdge;
61 }
DCELHalfEdge * twin
Definition: DCELHalfEdge.h:14
DCELHalfEdge * next
Definition: DCELHalfEdge.h:15
DCELVertex * origin
Definition: DCELHalfEdge.h:17
int globalEdgeCount
Definition: HalfEdgeList.h:15
Definition: DCELHalfEdge.h:8
int meta
Definition: DCELHalfEdge.h:20
void HalfEdgeList::removeFromList ( DCELHalfEdge edge)
64 {
65  edge->getPrev()->next = edge->twin->next;
66  edge->twin->getPrev()->next = edge->next;
67  delete edge->twin;
68  delete edge;
69 }
DCELHalfEdge * twin
Definition: DCELHalfEdge.h:14
DCELHalfEdge * next
Definition: DCELHalfEdge.h:15
DCELHalfEdge * getPrev()
Half Edges.
Definition: DCELHalfEdge.h:36

Member Data Documentation

int HalfEdgeList::globalEdgeCount
DCELHalfEdge* HalfEdgeList::head
bool HalfEdgeList::status
protected
DCELHalfEdge* HalfEdgeList::tail

The documentation for this class was generated from the following file: