254 lines
4.6 KiB
C++
254 lines
4.6 KiB
C++
#include "grairobject.h"
|
|
#include "widget.h"
|
|
|
|
grAirObject::grAirObject(QWidget *parent)
|
|
{
|
|
aType = gType = 0;
|
|
lX = lY = oldLX = oldLY = 0;
|
|
pic.load(":new/pics/type_0e.xpm");
|
|
wid = hei = 15;
|
|
scIndex = 1;
|
|
coler = new QGraphicsColorizeEffect();
|
|
coler->setColor(Qt::yellow);
|
|
|
|
for (int i=0; i<4; i++) altPoly[i].clear();
|
|
altPoly[0].setPoints(3, 31,15, 40,15, 35,20);
|
|
altPoly[1].setPoints(4, 31,20, 40,20, 40,23, 31,23);
|
|
altPoly[2].setPoints(4, 31,22, 40,22, 40,15, 31,15);
|
|
altPoly[3].setPoints(3, 31,20, 40,20, 35,15);
|
|
}
|
|
|
|
QRectF grAirObject::boundingRect() const
|
|
{
|
|
qreal d = 250/scIndex;
|
|
if (d<250) d=250;
|
|
|
|
return QRectF(-50+lX/scIndex,-50+lY/scIndex,d,d);
|
|
}
|
|
|
|
void grAirObject::setInfoForRocket(qreal cX, qreal cY, qreal cH, qreal vx, qreal vy)
|
|
{
|
|
rX = cX;
|
|
rY = cY;
|
|
rH = cH;
|
|
rVx = vx;
|
|
rVy = vy;
|
|
rV0 = sqrt(vx*vx+vy*vy);
|
|
}
|
|
|
|
void grAirObject::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
|
{
|
|
|
|
if (exist)
|
|
{
|
|
QPen locPen;
|
|
qreal an = 0;
|
|
locPen.setWidthF(1.3);
|
|
painter->setPen(locPen);
|
|
// âåêòîð ñêîðîñòè
|
|
if (v0) {
|
|
QLineF lf(0, 0, vY, -vX);
|
|
// QLineF lf(oldLX, oldLY, lX, lY);
|
|
an = lf.angle();
|
|
lf = QLineF(lX/scIndex, lY/scIndex, 0, 0);
|
|
lf.setAngle(an);
|
|
lf.setLength(v0*10);
|
|
painter->drawLine(lf);
|
|
painter->drawEllipse(lX/scIndex, lY/scIndex, 1, 1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
QImage im(50,50,QImage::Format_ARGB32);
|
|
im.fill(Qt::transparent);
|
|
|
|
QPainter *p = new QPainter(&im);
|
|
p->setBrush(Qt::SolidPattern);
|
|
|
|
// êàðòèíêà
|
|
if ((viewSettings==0)||(viewSettings==2))
|
|
p->drawPixmap(15, 15, pic);
|
|
// ýøåëîí
|
|
if ((viewSettings!=1)&&(viewSettings!=3))
|
|
p->drawPolygon(altPoly[alt]);
|
|
// íîìåð
|
|
if ((viewSettings!=1)&&(viewSettings!=2))
|
|
{
|
|
QFont f = p->font();
|
|
f.setPointSizeF(7);
|
|
p->setFont(f);
|
|
p->drawText(32, 33, QString::number(numb));
|
|
}
|
|
p->end();
|
|
|
|
if ((an>45)&&(an<210))
|
|
painter->drawImage(lX/scIndex-10, lY/scIndex-15, im);
|
|
else
|
|
painter->drawImage(lX/scIndex-35, lY/scIndex-45, im);
|
|
|
|
}
|
|
else
|
|
{
|
|
painter->setBrush(Qt::NoBrush);
|
|
painter->setPen(Qt::NoPen);
|
|
painter->drawPoint(0,0);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
void grAirObject::setScaleIndex(qreal s)
|
|
{
|
|
if (scIndex!=s){
|
|
prepareGeometryChange();
|
|
scIndex=s;
|
|
}
|
|
|
|
}
|
|
|
|
void grAirObject::setCoord(qreal cx, qreal cy, qreal ch)
|
|
{
|
|
|
|
cX = cx; cY= cy; cH = ch;
|
|
|
|
prepareGeometryChange();
|
|
oldLX = lX;
|
|
oldLY = lY;
|
|
|
|
|
|
|
|
lX=cy;
|
|
lY=-cx;
|
|
|
|
if (ch>=60) alt = 3;
|
|
else if ((ch>=30)&&(ch<60)) alt=2;
|
|
else if ((ch>=10)&&(ch<30)) alt=1;
|
|
else alt = 0;
|
|
|
|
}
|
|
|
|
void grAirObject::setCoord(qreal cx, qreal cy)
|
|
{
|
|
setCoord(cx, cy, cH);
|
|
}
|
|
|
|
void grAirObject::setSpeed(qreal vx, qreal vy)
|
|
{
|
|
vX = vx;
|
|
vY = vy;
|
|
v0=sqrt(vX*vX+vY*vY);
|
|
}
|
|
|
|
void grAirObject::moveByTime(qreal time)
|
|
{
|
|
cX += vX*time;
|
|
cY += vY*time;
|
|
setCoord(cX, cY);
|
|
}
|
|
|
|
void grAirObject::setAType(int d)
|
|
{
|
|
switch (d) {
|
|
case 0:
|
|
case 1:
|
|
case 6:
|
|
case 7:
|
|
case 8:
|
|
case 10:
|
|
case 11:
|
|
|
|
if (aType!=d)
|
|
{
|
|
prepareGeometryChange();
|
|
aType = d;
|
|
};
|
|
break;
|
|
default:
|
|
prepareGeometryChange();
|
|
aType = 0;
|
|
break;
|
|
}
|
|
|
|
setPic();
|
|
|
|
}
|
|
|
|
void grAirObject::setGType(int d)
|
|
{
|
|
if ((d>=0)&&(d<4)){
|
|
if (gType!=d)
|
|
{
|
|
prepareGeometryChange();
|
|
gType = d;
|
|
}
|
|
else
|
|
{
|
|
// prepareGeometryChange();
|
|
// gType = 0;
|
|
}
|
|
}
|
|
setPic();
|
|
|
|
switch (gType)
|
|
{
|
|
case 3:
|
|
coler->setColor(Qt::magenta);
|
|
break;
|
|
case 2:
|
|
coler->setColor(Qt::red);
|
|
break;
|
|
case 1:
|
|
coler->setColor(Qt::green);
|
|
break;
|
|
default:
|
|
coler->setColor(Qt::yellow);
|
|
|
|
}
|
|
}
|
|
|
|
void grAirObject::setPic()
|
|
{
|
|
QString s;
|
|
s=":/new/pics/type_"+QString::number(aType);
|
|
switch (gType) {
|
|
case 2:
|
|
case 3:
|
|
s+="o.xpm";
|
|
break;
|
|
case 0:
|
|
case 1:
|
|
default:
|
|
s+="e.xpm";
|
|
break;
|
|
}
|
|
|
|
pic.load(s);
|
|
|
|
}
|
|
|
|
void grAirObject::setViewSettings(int d)
|
|
{
|
|
if (viewSettings!=d)
|
|
{
|
|
prepareGeometryChange();
|
|
viewSettings = d;
|
|
}
|
|
}
|
|
|
|
void grAirObject::setNull()
|
|
{
|
|
prepareGeometryChange();
|
|
exist = false;
|
|
count = 0;
|
|
setCoord(10000, 10000, 0);
|
|
setAType(0);
|
|
setGType(0);
|
|
setSpeed(0, 0);
|
|
setInfoForRocket(10000,10000,0,0,0);
|
|
|
|
}
|