-
Notifications
You must be signed in to change notification settings - Fork 0
/
globject.cpp
100 lines (85 loc) · 2.62 KB
/
globject.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
#include "globject.h"
GlObject::GlObject(GlObject* parent) : QObject(parent)
{
visible = true;
percent = -1;
if(parent)
{
glParent = parent;
glParent->addChild(this);
/*mit einer Signal zu Signal Verbindung wird das Signal durch alle Ebenen
zu einem SLOT von GLWidget MainWindow geschossen*/
connect(this, SIGNAL(newChildToDraw(GlObject*)), parent, SIGNAL(newChildToDraw(GlObject*)));
connect(this, SIGNAL(update()), parent, SIGNAL(update()));
}
}
void GlObject::drawImageAt(QPainter *p, int angle, int per)
{
/*Zeichnet das Image (Screenshot des Objekts) um die X-Achse gedreht*/
p->save();
int w = img.width() - int((per/100.) * (img.width() * 0.2));
int h = img.height() - int((per/100.) * (img.height() * 0.2));
QPoint loc = getCenter();
QTransform trans;
trans.rotate(angle, Qt::XAxis);
trans.scale(qreal(w)/img.width(), qreal(h)/img.height());
p->setTransform(trans * QTransform().translate(loc.x(),loc.y()),true);
QPointF pt(-img.width()/2, -img.height()/2);
p->drawImage(pt, img);
p->restore();
}
void GlObject::drawImageAtY(QPainter *p, int angle, int per)
{
/*Zeichnet das Image (Screenshot des Objekts) um die Y-Achse gedreht*/
p->save();
int w = img.width() - int((per/100.) * (img.width() * 0.2));
int h = img.height() - int((per/100.) * (img.height() * 0.2));
QPoint loc = getCenter();
QTransform trans;
trans.rotate(angle, Qt::YAxis);
trans.scale(qreal(w)/img.width(), qreal(h)/img.height());
p->setTransform(trans * QTransform().translate(loc.x(),loc.y()),true);
QPointF pt(-img.width()/2, -img.height()/2);
p->drawImage(pt, img);
p->restore();
}
void GlObject::drawBackGroundPixmap(QPainter* p)
{
/*Zeichnet das Hintergrundbild*/
if(!backGroundPixmap.isNull())
{
p->drawPixmap(QPoint(x,y), backGroundPixmap);
}
}
QPoint GlObject::getCenter()
{
/*Liefert den Mittelpunkt des Objects*/
return QPoint( x + width/2, y + height/2);
}
QPixmap GlObject::getPixmap()
{
/*Zeichnet sich in ein Pixmap und gibt diese zurück*/
QPixmap returnPixmap(width, height);
//ins Pixmap zeichnen
QPainter p(&returnPixmap);
p.translate(QPoint(-x,-y));
draw(&p);
return returnPixmap;
}
bool GlObject::isVisible()
{
return visible;
}
void GlObject::setGeometry(int posX, int posY, int w, int h)
{
x = posX;
y = posY;
width = w;
height = h;
}
void GlObject::setImage()
{
/*Zeichnet sich selber. Img ist somit ein Screenshot von sich selber
der für die Animationen gebrauch wird*/
img = getPixmap().toImage();
}