-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwire.cc
More file actions
125 lines (104 loc) · 2.51 KB
/
wire.cc
File metadata and controls
125 lines (104 loc) · 2.51 KB
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 <wire.h>
#include <editor.h>
/*
** -- wire() --
*/
template class QPtrList<QCanvasLine>;
wire::wire(QCanvas *canvas_arg, const QPoint &a, const QPoint &b):
object(WIRE, 0, 0, canvas_arg, (const char *) NULL)
{
int i = 0;
int how_many = 5;
QPoint points[6];
QCanvasLine *line = NULL;
lines = NULL;
canvas = canvas_arg;
pt1 = a;
pt2 = b;
if((lines = new QPtrList<QCanvasLine>()) == NULL)
(void) fprintf(stderr, "Memory allocation failure in file %s, line %d.\n",
__FILE__, __LINE__);
else
{
lines->setAutoDelete(true);
points[0].setX(a.x());
points[0].setY(a.y());
if(canvas->collisions(QPoint(a.x() - 10, a.y())).size() > 0)
points[1].setX(a.x() + 10);
else
points[1].setX(a.x() - 10);
points[1].setY(a.y());
points[5].setX(b.x());
points[5].setY(b.y());
if(canvas->collisions(QPoint(b.x() - 10, b.y())).size() > 0)
points[4].setX(b.x() + 10);
else
points[4].setX(b.x() - 10);
points[4].setY(b.y());
points[3].setX(points[4].x());
if(a.y() >= b.y())
{
if(a.y() - (a.y() - b.y()) / 2 <= 55)
points[3].setY(a.y() + (a.y() - b.y()) / 2);
else
points[3].setY(a.y() - (a.y() - b.y()) / 2);
}
else
{
if(b.y() - (b.y() - a.y()) / 2 <= 55)
points[3].setY(b.y() + (b.y() - a.y()) / 2);
else
points[3].setY(b.y() - (b.y() - a.y()) / 2);
}
if(QABS(a.y() - b.y()) <= 50)
if(a.y() - 50 <= 10)
points[3].setY(a.y() + 50);
else
points[3].setY(a.y() - 50);
points[2].setX(points[1].x());
points[2].setY(points[3].y());
for(i = 0; i < how_many; i++)
if((line = new QCanvasLine(canvas)) != NULL)
{
line->setPen(QPen(Qt::blue, 2));
line->setPoints(points[i].x(), points[i].y(),
points[i + 1].x(), points[i + 1].y());
line->setZ(-1);
line->show();
canvas->update();
lines->append(line);
}
else
(void) fprintf(stderr, "Memory allocation failure in file %s, "
"line %d.\n", __FILE__, __LINE__);
}
}
/*
** -- ~wire() --
*/
wire::~wire()
{
if(lines != NULL)
lines->clear();
delete lines;
lines = NULL;
}
/*
** -- exists() --
*/
bool wire::exists(const QPoint &a, const QPoint &b)
{
unsigned int i = 0;
if(lines != NULL)
{
for(i = 0; i < (unsigned int) lines->count(); i++)
if((lines->at(i)->startPoint() == a &&
lines->at(i)->endPoint() == b) ||
(lines->at(i)->startPoint() == b &&
lines->at(i)->endPoint() == a))
return true;
return false;
}
else
return false;
}