12#include "rotatorsettings.h"
15#include "kstarsdata.h"
16#include "ekos/manager.h"
17#include "indi/indirotator.h"
19#include <basedevice.h>
22#include "ekos/align/align.h"
23#include "ekos/capture/capturedeviceadaptor.h"
24#include "ekos/align/opsalign.h"
25#include "ekos/auxiliary/rotatorutils.h"
27#include "ekos_capture_debug.h"
33 connect(
this, &RotatorSettings::newLog, Ekos::Manager::Instance()->captureModule(), &Ekos::Capture::appendLogText);
34 connect(RotatorUtils::Instance(), &RotatorUtils::changedPierside,
this, &RotatorSettings::updateGaugeZeroPos);
41 CameraPA->setKeyboardTracking(
false);
44 double RAngle = RotatorUtils::Instance()->calcRotatorAngle(PAngle);
45 RotatorAngle->setValue(RAngle);
47 activateRotator(RAngle);
48 CameraPASlider->setSliderPosition(PAngle * 100);
52 CameraPA->setValue(CameraPASlider->sliderPosition() / 100.0);
56 double PAngle = PAngle100 / 100;
57 paGauge->setValue(-(PAngle));
65 commitRotatorDirection(toggled);
69 rotatorGauge->setFormat(
"R");
70 rotatorGauge->setMinimum(-360);
71 rotatorGauge->setMaximum(0);
74 paGauge->setFormat(
"P");
75 paGauge->setMinimum(-181);
76 paGauge->setMaximum(181);
79 paRuler->plotLayout()->clear();
82 QColor TransparentBlack(0, 0, 0, 100);
83 QPen Pen(TransparentBlack, 3);
90 paRuler->plotLayout()->addElement(0, 0, angularAxis);
91 paRuler->setBackground(Qt::GlobalColor::transparent);
97 CameraPA->setMaximum(180.00);
98 CameraPA->setMinimum(-179.99);
100 CameraOffset->setValue(Options::pAOffset());
102 MountPierside->setCurrentIndex(ISD::Mount::PIER_UNKNOWN);
103 MountPierside->setDisabled(
true);
109 m_CaptureDA = CaptureDA;
110 RotatorUtils::Instance()->initRotatorUtils(train);
113 RotatorName->setText(m_Rotator->getDeviceName());
114 updateFlipPolicy(Options::astrometryFlipRotationAllowed());
118 if (m_CaptureDA->getRotatorAngleState() < IPS_BUSY)
120 double RAngle = m_CaptureDA->getRotatorAngle();
121 updateRotator(RAngle);
122 updateGaugeZeroPos(RotatorUtils::Instance()->getMountPierside());
123 qCInfo(KSTARS_EKOS_CAPTURE()) <<
"Rotator Settings: Initial raw angle is" << RAngle <<
".";
124 emit newLog(
i18n(
"Initial rotator angle %1° is read in successfully.", RAngle));
127 qCWarning(KSTARS_EKOS_CAPTURE()) <<
"Rotator Settings: Reading initial raw angle failed.";
131void RotatorSettings::updateRotator(
double RAngle)
133 RotatorAngle->setValue(RAngle);
134 double PAngle = RotatorUtils::Instance()->calcCameraAngle(RAngle,
false);
135 CameraPA->blockSignals(
true);
136 CameraPA->setValue(PAngle);
137 CameraPA->blockSignals(
false);
138 CameraPASlider->setSliderPosition(PAngle * 100);
142void RotatorSettings::updateGauge(
double RAngle)
144 rotatorGauge->setValue(-RAngle);
146 paGauge->setValue(-(RotatorUtils::Instance()->calcCameraAngle(RAngle,
false)));
149void RotatorSettings::updateGaugeZeroPos(ISD::Mount::PierSide Pierside)
152 if (Pierside == ISD::Mount::PIER_UNKNOWN)
153 MountPierside->setStyleSheet(
"QComboBox {border: 1px solid red;}");
155 MountPierside->setStyleSheet(
"QComboBox {}");
156 MountPierside->setCurrentIndex(Pierside);
157 if (Pierside == ISD::Mount::PIER_WEST)
158 rotatorGauge->setNullPosition(QRoundProgressBar::PositionTop);
159 else if (Pierside == ISD::Mount::PIER_EAST)
160 rotatorGauge->setNullPosition(QRoundProgressBar::PositionBottom);
161 if (Options::astrometryFlipRotationAllowed())
162 RAngle = RotatorAngle->value();
165 RAngle = RotatorUtils::Instance()->calcRotatorAngle(CameraPA->value());
166 activateRotator(RAngle);
169 updateRotator(RAngle);
172void RotatorSettings::setFlipPolicy(
const int index)
174 Ekos::OpsAlign::FlipPriority Priority =
static_cast<Ekos::OpsAlign::FlipPriority
>(index);
175 Ekos::OpsAlign *AlignOptionsModule = Ekos::Manager::Instance()->alignModule()->getAlignOptionsModule();
176 if (AlignOptionsModule)
177 AlignOptionsModule->setFlipPolicy(Priority);
180void RotatorSettings::updateFlipPolicy(
const bool FlipRotationAllowed)
183 if (FlipRotationAllowed)
184 i =
static_cast<int>(Ekos::OpsAlign::FlipPriority::ROTATOR_ANGLE);
186 i =
static_cast<int>(Ekos::OpsAlign::FlipPriority::POSITION_ANGLE);
187 FlipPolicy->blockSignals(
true);
188 FlipPolicy->setCurrentIndex(i);
189 FlipPolicy->blockSignals(
false);
192void RotatorSettings::showAlignOptions()
198 alignSettings->
show();
202void RotatorSettings::activateRotator(
double Angle)
204 m_CaptureDA->setRotatorAngle(Angle);
207void RotatorSettings::commitRotatorDirection(
bool Reverse)
209 m_CaptureDA->reverseRotator(Reverse);
212void RotatorSettings::refresh(
double PAngle)
214 CameraPA->setValue(PAngle);
216 CameraOffset->setValue(Options::pAOffset());
219void RotatorSettings::syncFOV(
double PA)
221 for (
auto oneFOV : KStarsData::Instance()->getTransientFOVs())
224 if (oneFOV->objectName() ==
"sensor_fov")
227 if (!Options::showSensorFOV())
229 Options::setShowSensorFOV(
true);
230 oneFOV->setProperty(
"visible",
true);
Rotator class handles control of INDI Rotator devices.
static KConfigDialog * exists(const QString &name)
The main container for polar plots, representing the angular axis as a circle.
void setTickPen(const QPen &pen)
void setTickLabels(bool show)
void setSubTickPen(const QPen &pen)
void setTickLength(int inside, int outside=0)
void setSubTickLength(int inside, int outside=0)
bool removeRadialAxis(QCPPolarAxisRadial *axis)
void setBasePen(const QPen &pen)
QCPPolarAxisRadial * radialAxis(int index=0) const
void setAngularPen(const QPen &pen)
QString i18n(const char *text, const TYPE &arg...)
void valueChanged(int value)
void currentIndexChanged(int index)
void valueChanged(double d)
QString number(double n, char format, int precision)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)