Adding platesolving
This commit is contained in:
+93
-34
@@ -1,45 +1,61 @@
|
||||
#include "platesolving.h"
|
||||
#include <QSettings>
|
||||
#include "ui_platesolving.h"
|
||||
#include "solver.h"
|
||||
#include "imageringlist.h"
|
||||
#include "platesolvingsettings.h"
|
||||
|
||||
PlateSolving::PlateSolving(QWidget *parent)
|
||||
: QDockWidget(parent)
|
||||
, ui(new Ui::PlateSolving)
|
||||
, _ui(new Ui::PlateSolving)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
_ui->setupUi(this);
|
||||
|
||||
_solver = new Solver(this);
|
||||
|
||||
QSettings settings;
|
||||
_solver->setIndexFolder(settings.value("platesolving/indexPath", Solver::getTenmonIndexPath()).toString());
|
||||
auto profiles = StellarSolver::getBuiltInProfiles();
|
||||
int profileIdx = settings.value("platesolving/profile", 0).toInt();
|
||||
_solver->setParameters(profiles[profileIdx]);
|
||||
|
||||
for(auto &profile : profiles)
|
||||
{
|
||||
ui->profileComboBox->addItem(profile.listName);
|
||||
_ui->profileComboBox->addItem(profile.listName);
|
||||
}
|
||||
_ui->profileComboBox->setCurrentIndex(profileIdx);
|
||||
_ui->scaleUnit->setCurrentIndex(settings.value("platesolving/scaleUnit", 1).toInt());
|
||||
|
||||
connect(ui->profileComboBox, &QComboBox::currentIndexChanged, [this](int index){
|
||||
connect(_ui->profileComboBox, &QComboBox::currentIndexChanged, [this](int index){
|
||||
auto profiles = StellarSolver::getBuiltInProfiles();
|
||||
_solver->setParameters(profiles[index]);
|
||||
});
|
||||
|
||||
connect(ui->extractButton, &QPushButton::clicked, this, &PlateSolving::extract);
|
||||
connect(ui->solveButton, &QPushButton::clicked, this, &PlateSolving::solve);
|
||||
connect(_ui->extractButton, &QPushButton::clicked, this, &PlateSolving::extract);
|
||||
connect(_ui->solveButton, &QPushButton::clicked, this, &PlateSolving::solve);
|
||||
connect(_ui->settingsButton, &QPushButton::clicked, this, &PlateSolving::settings);
|
||||
connect(_solver, &Solver::solvingDone, this, &PlateSolving::solvingDone);
|
||||
connect(_solver, &Solver::extractionDone, this, &PlateSolving::extractionDone);
|
||||
connect(_solver, &Solver::logOutput, [this](const QString &log){ _ui->log->appendPlainText(log); });
|
||||
}
|
||||
|
||||
PlateSolving::~PlateSolving()
|
||||
{
|
||||
delete ui;
|
||||
QSettings settings;
|
||||
settings.setValue("platesolving/profile", _ui->profileComboBox->currentIndex());
|
||||
settings.setValue("platesolving/scaleUnit", _ui->scaleUnit->currentIndex());
|
||||
delete _ui;
|
||||
}
|
||||
|
||||
void PlateSolving::extract()
|
||||
{
|
||||
ui->solveButton->setDisabled(true);
|
||||
ui->extractButton->setDisabled(true);
|
||||
if(!_rawImage)return;
|
||||
_ui->solveButton->setDisabled(true);
|
||||
_ui->extractButton->setDisabled(true);
|
||||
_ui->log->clear();
|
||||
|
||||
_solver->loadImage(_rawImage, _path);
|
||||
_solver->extractSources(ui->withHFR->isChecked());
|
||||
_solvingTime.start();
|
||||
_solver->extractSources(_ui->withHFR->isChecked());
|
||||
}
|
||||
|
||||
void PlateSolving::extractionDone()
|
||||
@@ -61,49 +77,92 @@ void PlateSolving::extractionDone()
|
||||
hfr /= size;
|
||||
}
|
||||
|
||||
ui->stars->setText(QString::number(stars.size()));
|
||||
ui->hfr->setText(QString("%1 %2x%3").arg(hfr).arg(a).arg(b));
|
||||
_ui->stars->setText(QString::number(stars.size()));
|
||||
_ui->hfr->setText(QString("%1 %2x%3").arg(hfr).arg(a).arg(b));
|
||||
_ui->log->appendPlainText(QString("Extraction finished in %1 ms").arg(_solvingTime.elapsed()));
|
||||
|
||||
ui->solveButton->setDisabled(false);
|
||||
ui->extractButton->setDisabled(false);
|
||||
_ui->solveButton->setDisabled(false);
|
||||
_ui->extractButton->setDisabled(false);
|
||||
}
|
||||
|
||||
void PlateSolving::solve()
|
||||
{
|
||||
ui->solveButton->setDisabled(true);
|
||||
ui->extractButton->setDisabled(true);
|
||||
if(!_rawImage)return;
|
||||
_ui->solveButton->setDisabled(true);
|
||||
_ui->extractButton->setDisabled(true);
|
||||
_ui->log->clear();
|
||||
|
||||
_solver->loadImage(_rawImage, _path);
|
||||
if(_ui->usePosition->isChecked())
|
||||
_solver->setSearchPosition(_ui->raStart->value(), _ui->decStart->value());
|
||||
|
||||
if(_ui->useScale->isChecked())
|
||||
{
|
||||
SSolver::ScaleUnits scaleUnit;
|
||||
switch(_ui->scaleUnit->currentIndex())
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
scaleUnit = SSolver::ScaleUnits::DEG_WIDTH; break;
|
||||
case 1:
|
||||
scaleUnit = SSolver::ScaleUnits::ARCMIN_WIDTH; break;
|
||||
case 2:
|
||||
scaleUnit = SSolver::ScaleUnits::ARCSEC_PER_PIX; break;
|
||||
case 3:
|
||||
scaleUnit = SSolver::ScaleUnits::FOCAL_MM; break;
|
||||
}
|
||||
_solver->setSearchScale(_ui->fovLow->value(), _ui->fovHigh->value(), scaleUnit);
|
||||
}
|
||||
_solvingTime.start();
|
||||
_solver->solveImage();
|
||||
}
|
||||
|
||||
void PlateSolving::solvingDone()
|
||||
{
|
||||
ui->solveButton->setDisabled(false);
|
||||
ui->extractButton->setDisabled(false);
|
||||
_ui->solveButton->setDisabled(false);
|
||||
_ui->extractButton->setDisabled(false);
|
||||
|
||||
auto solution = _solver->getSolution();
|
||||
ui->ra->setText(QString::number(solution.ra));
|
||||
ui->dec->setText(QString::number(solution.dec));
|
||||
ui->orientation->setText(QString::number(solution.orientation));
|
||||
ui->fieldWidth->setText(QString::number(solution.fieldWidth));
|
||||
ui->fieldHeight->setText(QString::number(solution.fieldHeight));
|
||||
ui->pixelScale->setText(QString::number(solution.pixscale));
|
||||
_ui->ra->setText(QString::number(solution.ra));
|
||||
_ui->dec->setText(QString::number(solution.dec));
|
||||
_ui->orientation->setText(QString::number(solution.orientation));
|
||||
_ui->fieldWidth->setText(QString::number(solution.fieldWidth));
|
||||
_ui->fieldHeight->setText(QString::number(solution.fieldHeight));
|
||||
_ui->pixelScale->setText(QString::number(solution.pixscale));
|
||||
_ui->log->appendPlainText(QString("Solving finished in %1 ms").arg(_solvingTime.elapsed()));
|
||||
}
|
||||
|
||||
void PlateSolving::imageLoaded(Image *image)
|
||||
{
|
||||
if(image)
|
||||
if(image && image->rawImage())
|
||||
{
|
||||
_rawImage = image->rawImage();
|
||||
_path = image->name();
|
||||
ui->ra->clear();
|
||||
ui->dec->clear();
|
||||
ui->orientation->clear();
|
||||
ui->fieldWidth->clear();
|
||||
ui->fieldHeight->clear();
|
||||
ui->pixelScale->clear();
|
||||
ui->hfr->clear();
|
||||
ui->stars->clear();
|
||||
_ui->ra->clear();
|
||||
_ui->dec->clear();
|
||||
_ui->orientation->clear();
|
||||
_ui->fieldWidth->clear();
|
||||
_ui->fieldHeight->clear();
|
||||
_ui->pixelScale->clear();
|
||||
_ui->hfr->clear();
|
||||
_ui->stars->clear();
|
||||
|
||||
const ImageInfoData &info = image->info();
|
||||
SkyPointScale pointScale = info.getCenterRaDec();
|
||||
if(!std::isnan(pointScale.point.RA()) && !std::isnan(pointScale.point.DEC()))
|
||||
{
|
||||
_ui->raStart->setValue(pointScale.point.RAHour());
|
||||
_ui->decStart->setValue(pointScale.point.DEC());
|
||||
}
|
||||
|
||||
_ui->scaleUnit->setCurrentIndex(2);
|
||||
_ui->fovLow->setValue(pointScale.scaleLow);
|
||||
_ui->fovHigh->setValue(pointScale.scaleHigh);
|
||||
}
|
||||
}
|
||||
|
||||
void PlateSolving::settings()
|
||||
{
|
||||
PlateSolvingSettings settings(this);
|
||||
settings.exec();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user