#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); }