File indexing completed on 2024-04-21 03:44:55
0001 /* 0002 SPDX-FileCopyrightText: 2015-2017 Pavel Mraz 0003 0004 SPDX-FileCopyrightText: 2017 Jasem Mutlaq 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "polarishourangle.h" 0010 0011 #include "skyobject.h" 0012 #include "kstarsdata.h" 0013 #include "skymapcomposite.h" 0014 0015 #include <QPainter> 0016 #include <QPen> 0017 0018 float hbase = 24; 0019 float vangle = 15; 0020 0021 PolarisHourAngle::PolarisHourAngle(QWidget *parent) : 0022 QDialog(parent), 0023 m_polarisHourAngle(0) 0024 { 0025 setupUi(this); 0026 setFixedHeight(size().height()); 0027 0028 SkyObject *polaris = KStarsData::Instance()->skyComposite()->findByName(i18nc("star name", "Polaris")); 0029 Q_ASSERT_X(polaris != nullptr, "PolarisHourAngle", "Unable to find Polaris!"); 0030 m_polaris = polaris->clone(); 0031 0032 m_reticle12.reset(new QPixmap(":/images/reticle12.png")); 0033 m_reticle24.reset(new QPixmap(":/images/reticle24.png")); 0034 0035 connect(dateTimeEdit, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(onTimeUpdated(QDateTime))); 0036 connect(currentTimeB, &QPushButton::clicked, this, [this]() { dateTimeEdit->setDateTime(KStarsData::Instance()->lt()); }); 0037 connect(twelveHourR, SIGNAL(toggled(bool)), this, SLOT(update())); 0038 0039 dateTimeEdit->setDateTime(KStarsData::Instance()->lt()); 0040 } 0041 0042 void PolarisHourAngle::paintEvent(QPaintEvent *) 0043 { 0044 QPainter p(this); 0045 QPointF center = frame->rect().center(); 0046 double r1 = 175; 0047 0048 p.setRenderHint(QPainter::Antialiasing); 0049 p.setRenderHint(QPainter::SmoothPixmapTransform); 0050 0051 p.drawPixmap(frame->pos(), twelveHourR->isChecked() ? *(m_reticle12.get()) : *(m_reticle24.get())); 0052 p.setPen(Qt::yellow); 0053 p.setBrush(Qt::white); 0054 p.translate(frame->pos()); 0055 0056 // double angle = (24.0 - m_polarisHourAngle) * 15.0; 0057 double angle = (hbase - m_polarisHourAngle) * vangle; 0058 p.save(); 0059 0060 p.translate(center); 0061 p.rotate(angle); 0062 0063 QPolygon poly; 0064 0065 p.setPen(QPen(Qt::red, 1, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin)); 0066 p.setBrush(p.pen().color()); 0067 0068 poly << QPoint(0, r1); 0069 poly << QPoint(10, -10); 0070 poly << QPoint(5, -14); 0071 poly << QPoint(-5, -14); 0072 poly << QPoint(-10, -10); 0073 poly << QPoint(0, r1); 0074 0075 p.drawPolygon(poly); 0076 0077 p.restore(); 0078 } 0079 0080 void PolarisHourAngle::onTimeUpdated(QDateTime newDateTime) 0081 { 0082 KStarsDateTime lt(newDateTime); 0083 KSNumbers num(lt.djd()); 0084 m_polaris->updateCoords(&num, false); 0085 dms lst = KStarsData::Instance()->geo()->GSTtoLST(lt.gst()); 0086 /* 0087 m_polarisHourAngle = (lst.Degrees() - m_polaris->ra().Degrees())/15.0; 0088 while (m_polarisHourAngle > 24) 0089 m_polarisHourAngle -= 24; 0090 while (m_polarisHourAngle < 0) 0091 m_polarisHourAngle += 24; 0092 */ 0093 m_polarisHourAngle = (lst.Degrees() - m_polaris->ra().Degrees())/vangle; 0094 while (m_polarisHourAngle > hbase) 0095 m_polarisHourAngle -= hbase; 0096 while (m_polarisHourAngle < hbase) 0097 m_polarisHourAngle += hbase; 0098 0099 labelPolarisHA->setText(dms(m_polarisHourAngle*vangle).toHMSString()); 0100 labelDate->setText(newDateTime.date().toString()); 0101 labelTime->setText(newDateTime.time().toString()); 0102 0103 update(); 0104 }