-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHolePolygon.cpp
125 lines (108 loc) · 3.18 KB
/
HolePolygon.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "HolePolygon.h"
HolePolygon::HolePolygon(QObject *parent)
: Polygon{parent}
{
}
QMap<int, QList<Polygon::Edge> > HolePolygon::gengerateET()
{
QMap<int, QList<Polygon::Edge> > ET = Polygon::gengerateET();
//将Hole的Edge也加入ET
//for(auto polygon = holes.begin())
for(auto it=holes.begin();it!=holes.end();it++){
//获取每一个洞的ET
QMap<int, QList<Polygon::Edge> > ET2 = (*it)->gengerateET();
//对每一个ET项,加入ET
for(auto edge = ET2.begin(); edge!=ET2.end(); edge++){
if(ET.contains(edge.key())){
QList<Polygon::Edge> items = edge.value();
for(auto e = items.begin(); e!=items.end();e++){
ET[edge.key()].push_back(*e);
}
}else{
QList<Polygon::Edge> items = edge.value();
ET.insert(edge.key(),edge.value());
}
}
}
/*输出一下ET*/
qDebug()<<"-----------------ET---------------------";
for(auto it=ET.begin();it!=ET.end();it++){
qDebug()<<it.key();
for(auto edge=it->begin();edge!=it->end();edge++){
qDebug()<<edge->ymax<<" "<<edge->xmin<<" "<<(float)edge->k;
}
}
qDebug()<<"-----------------ET---------------------";
return ET;
}
void HolePolygon::addHole(Polygon *polygon)
{
this->holes.push_back(polygon);
}
void HolePolygon::setPosition(QVector2D pos)
{
Polygon::setPosition(pos);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->setPosition(pos);
}
}
void HolePolygon::setAngle(float angle)
{
TransformInterface::setAngle(angle);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->setAngle(angle);
}
}
void HolePolygon::setScale(float k)
{
TransformInterface::setScale(k);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->setScale(k);
}
}
void HolePolygon::setScale(QVector2D scale)
{
TransformInterface::setScale(scale);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->setScale(scale);
}
}
void HolePolygon::setScale(float xScale, float yScale)
{
TransformInterface::setScale(QVector2D(xScale,yScale));
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->setScale(QVector2D(xScale,yScale));
}
}
void HolePolygon::setZoom(float x, float y)
{
TransformInterface::setZoom(x,y);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->setZoom(x,y);
}
}
void HolePolygon::addAngle(float angle)
{
TransformInterface::addAngle(angle);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->addAngle(angle);
}
}
void HolePolygon::addScale(QVector2D scale)
{
TransformInterface::addScale(scale);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->addScale(scale);
}
}
void HolePolygon::addZoom(QVector2D zoom)
{
TransformInterface::addZoom(zoom);
for(auto it=holes.begin();it!=holes.end();it++){
(*it)->addZoom(zoom);
}
}
//void HolePolygon::addHole(Polygon* polygon)
//{
// holes.push_back(*polygon);
//}