OpenCores
URL https://opencores.org/ocsvn/orsoc_graphics_accelerator/orsoc_graphics_accelerator/trunk

Subversion Repositories orsoc_graphics_accelerator

[/] [orsoc_graphics_accelerator/] [trunk/] [sw/] [utils/] [fonter/] [poly2tri/] [sweep/] [sweep_context.h] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 maiden
/*
2
 * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
3
 * http://code.google.com/p/poly2tri/
4
 *
5
 * All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without modification,
8
 * are permitted provided that the following conditions are met:
9
 *
10
 * * Redistributions of source code must retain the above copyright notice,
11
 *   this list of conditions and the following disclaimer.
12
 * * Redistributions in binary form must reproduce the above copyright notice,
13
 *   this list of conditions and the following disclaimer in the documentation
14
 *   and/or other materials provided with the distribution.
15
 * * Neither the name of Poly2Tri nor the names of its contributors may be
16
 *   used to endorse or promote products derived from this software without specific
17
 *   prior written permission.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
 */
31
 
32
#ifndef SWEEP_CONTEXT_H
33
#define SWEEP_CONTEXT_H
34
 
35
#include <list>
36
#include <vector>
37
#include <cstddef>
38
 
39
namespace p2t {
40
 
41
// Inital triangle factor, seed triangle will extend 30% of
42
// PointSet width to both left and right.
43
const double kAlpha = 0.3;
44
 
45
struct Point;
46
class Triangle;
47
struct Node;
48
struct Edge;
49
class AdvancingFront;
50
 
51
class SweepContext {
52
public:
53
 
54
/// Constructor
55
SweepContext(std::vector<Point*> polyline);
56
/// Destructor
57
~SweepContext();
58
 
59
void set_head(Point* p1);
60
 
61
Point* head();
62
 
63
void set_tail(Point* p1);
64
 
65
Point* tail();
66
 
67
int point_count();
68
 
69
Node& LocateNode(Point& point);
70
 
71
void RemoveNode(Node* node);
72
 
73
void CreateAdvancingFront(std::vector<Node*> nodes);
74
 
75
/// Try to map a node to all sides of this triangle that don't have a neighbor
76
void MapTriangleToNodes(Triangle& t);
77
 
78
void AddToMap(Triangle* triangle);
79
 
80
Point* GetPoint(const int& index);
81
 
82
Point* GetPoints();
83
 
84
void RemoveFromMap(Triangle* triangle);
85
 
86
void AddHole(std::vector<Point*> polyline);
87
 
88
void AddPoint(Point* point);
89
 
90
AdvancingFront* front();
91
 
92
void MeshClean(Triangle& triangle);
93
 
94
std::vector<Triangle*> GetTriangles();
95
std::list<Triangle*> GetMap();
96
 
97
std::vector<Edge*> edge_list;
98
 
99
struct Basin {
100
  Node* left_node;
101
  Node* bottom_node;
102
  Node* right_node;
103
  double width;
104
  bool left_highest;
105
 
106
  Basin() : left_node(NULL), bottom_node(NULL), right_node(NULL), width(0.0), left_highest(false)
107
  {
108
  }
109
 
110
  void Clear()
111
  {
112
    left_node = NULL;
113
    bottom_node = NULL;
114
    right_node = NULL;
115
    width = 0.0;
116
    left_highest = false;
117
  }
118
};
119
 
120
struct EdgeEvent {
121
  Edge* constrained_edge;
122
  bool right;
123
 
124
  EdgeEvent() : constrained_edge(NULL), right(false)
125
  {
126
  }
127
};
128
 
129
Basin basin;
130
EdgeEvent edge_event;
131
 
132
private:
133
 
134
friend class Sweep;
135
 
136
std::vector<Triangle*> triangles_;
137
std::list<Triangle*> map_;
138
std::vector<Point*> points_;
139
 
140
// Advancing front
141
AdvancingFront* front_;
142
// head point used with advancing front
143
Point* head_;
144
// tail point used with advancing front
145
Point* tail_;
146
 
147
Node *af_head_, *af_middle_, *af_tail_;
148
 
149
void InitTriangulation();
150
void InitEdges(std::vector<Point*> polyline);
151
 
152
};
153
 
154
inline AdvancingFront* SweepContext::front()
155
{
156
  return front_;
157
}
158
 
159
inline int SweepContext::point_count()
160
{
161
  return points_.size();
162
}
163
 
164
inline void SweepContext::set_head(Point* p1)
165
{
166
  head_ = p1;
167
}
168
 
169
inline Point* SweepContext::head()
170
{
171
  return head_;
172
}
173
 
174
inline void SweepContext::set_tail(Point* p1)
175
{
176
  tail_ = p1;
177
}
178
 
179
inline Point* SweepContext::tail()
180
{
181
  return tail_;
182
}
183
 
184
}
185
 
186
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.