X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FGUI%2FAirportDiagram.cxx;h=d268bc2f9d9f3a37d6a8dac39ab0677f94aaa1e4;hb=3cee5eea735545dddd0c1e5b9551d97cf8f79c2c;hp=449957dfd9879982c726429c42684f2c9346c219;hpb=b9acb26c073e18da3057df45057553605e04b54b;p=flightgear.git diff --git a/src/GUI/AirportDiagram.cxx b/src/GUI/AirportDiagram.cxx index 449957dfd..d268bc2f9 100644 --- a/src/GUI/AirportDiagram.cxx +++ b/src/GUI/AirportDiagram.cxx @@ -84,6 +84,19 @@ AirportDiagram::AirportDiagram(QWidget* pr) : BaseDiagram(pr), m_approachDistanceNm(-1.0) { + m_parkingIconPath.moveTo(0,0); + m_parkingIconPath.lineTo(-16, -16); + m_parkingIconPath.lineTo(-64, -16); + m_parkingIconPath.lineTo(-64, 16); + m_parkingIconPath.lineTo(-16, 16); + m_parkingIconPath.lineTo(0, 0); + + m_parkingIconLeftPath.moveTo(0,0); + m_parkingIconLeftPath.lineTo(16, -16); + m_parkingIconLeftPath.lineTo(64, -16); + m_parkingIconLeftPath.lineTo(64, 16); + m_parkingIconLeftPath.lineTo(16, 16); + m_parkingIconLeftPath.lineTo(0, 0); } AirportDiagram::~AirportDiagram() @@ -97,6 +110,7 @@ void AirportDiagram::setAirport(FGAirportRef apt) m_projectionCenter = apt ? apt->geod() : SGGeod(); m_runways.clear(); m_approachDistanceNm = -1.0; + m_parking.clear(); if (apt) { buildTaxiways(); @@ -201,6 +215,9 @@ void AirportDiagram::paintContents(QPainter* p) p->drawLine(t.p1, t.p2); } + + drawParkings(p); + // runways QFont f; f.setPixelSize(14); @@ -217,6 +234,10 @@ void AirportDiagram::paintContents(QPainter* p) drawILS(p, r.runway->reciprocalRunway()); } + bool drawAircraft = false; + SGGeod aircraftPos; + int headingDeg; + // now draw the runways for real Q_FOREACH(const RunwayData& r, m_runways) { @@ -256,6 +277,12 @@ void AirportDiagram::paintContents(QPainter* p) p->drawText(QRect(-100, 5, 200, 200), recipIdent, Qt::AlignHCenter | Qt::AlignTop); } + if (m_selectedRunway) { + drawAircraft = true; + aircraftPos = m_selectedRunway->geod(); + headingDeg = m_selectedRunway->headingDeg(); + } + if (m_selectedRunway && (m_approachDistanceNm > 0.0)) { p->setTransform(t); // draw approach extension point @@ -266,7 +293,57 @@ void AirportDiagram::paintContents(QPainter* p) pen.setWidth(2.0 / m_scale); p->setPen(pen); p->drawLine(pt, pt2); + + aircraftPos = m_selectedRunway->pointOnCenterline(-d); + } + + if (drawAircraft) { + p->setTransform(t); + paintAirplaneIcon(p, aircraftPos, headingDeg); + } +} + + +void AirportDiagram::drawParkings(QPainter* painter) +{ + QTransform t = painter->transform(); + + + QFont f = painter->font(); + f.setPixelSize(16); + painter->setFont(f); + + Q_FOREACH(const ParkingData& p, m_parking) { + painter->setTransform(t); + painter->translate(p.pt); + + double hdg = p.parking->getHeading(); + bool useLeftIcon = false; + QRect labelRect(-62, -14, 40, 28); + + if (hdg > 180.0) { + hdg += 90; + useLeftIcon = true; + labelRect = QRect(22, -14, 40, 28); + } else { + hdg -= 90; + } + + painter->rotate(hdg); + + painter->setBrush(QColor(255, 196, 196)); // kind of pink + painter->drawPath(useLeftIcon ? m_parkingIconLeftPath : m_parkingIconPath); + + painter->fillRect(labelRect, Qt::white); + + // draw text + painter->setPen(Qt::black); + painter->drawText(labelRect, + Qt::AlignVCenter | Qt::AlignHCenter, + QString::fromStdString(p.parking->name())); } + + painter->setTransform(t); } void AirportDiagram::drawILS(QPainter* painter, FGRunwayRef runway) const