From 236f66ed2fb03e90e49607e34da14b93ba52e584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Fri, 27 Dec 2024 23:20:51 +0100 Subject: [PATCH] Add solver profile to script engine --- scriptengine.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ scriptengine.h | 3 +++ solver.cpp | 5 +++++ solver.h | 1 + 4 files changed, 62 insertions(+) diff --git a/scriptengine.cpp b/scriptengine.cpp index 5db6edd..252d6f1 100644 --- a/scriptengine.cpp +++ b/scriptengine.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "loadrunable.h" #include "rawimage.h" #include "loadrunable.h" @@ -162,6 +163,58 @@ bool ScriptEngine::convert(File *file, QString &outpath, const QString &format, } #ifdef PLATESOLVER +void ScriptEngine::setSolverProfile(int index) +{ + if(_solver && index >= SSolver::Parameters::DEFAULT && index < SSolver::Parameters::BIG_STARS) + { + _solver->setParameters((SSolver::Parameters::ParametersProfile)index); + } +} + +void ScriptEngine::setSolverProfile(const QVariantMap &profile) +{ + if(_solver) + { + SSolver::Parameters params = SSolver::Parameters::convertFromMap(profile); + _solver->setParameters(params); + } +} + +QJSValue ScriptEngine::getSolverProfile() const +{ + if(_solver) + { + QMap params = SSolver::Parameters::convertToMap(_solver->getProfile()); + QJSValue ret = _jsEngine->newObject(); + for(auto i = params.begin(); i != params.end(); i++) + { + switch(i.value().metaType().id()) + { + case QMetaType::Int: + ret.setProperty(i.key(), i.value().toInt()); + break; + case QMetaType::Double: + ret.setProperty(i.key(), i.value().toDouble()); + break; + case QMetaType::Bool: + ret.setProperty(i.key(), i.value().toBool()); + break; + case QMetaType::QString: + ret.setProperty(i.key(), i.value().toString()); + break; + default: + qWarning() << "unhandled metatype" << i.key() << i.value(); + break; + } + } + return ret; + } + else + { + return QJSValue(); + } +} + void ScriptEngine::setStartingSolution(const QJSValue &solution) { if(solution.isObject()) diff --git a/scriptengine.h b/scriptengine.h index fefbe07..57d94e0 100644 --- a/scriptengine.h +++ b/scriptengine.h @@ -49,6 +49,9 @@ public: Q_INVOKABLE QJSValue getItem(const QStringList &items, const QString &label = "", int current = 0) const; bool convert(File *file, QString &outpath, const QString &format, const QVariantMap ¶ms, bool async); #ifdef PLATESOLVER + Q_INVOKABLE void setSolverProfile(int index); + Q_INVOKABLE void setSolverProfile(const QVariantMap &profile); + Q_INVOKABLE QJSValue getSolverProfile() const; Q_INVOKABLE void setStartingSolution(const QJSValue &solution = QJSValue()); QJSValue solveImage(File *file, bool updateHeader); QJSValue extractStars(File *file, bool hfr); diff --git a/solver.cpp b/solver.cpp index 0809383..dba8dbe 100644 --- a/solver.cpp +++ b/solver.cpp @@ -205,6 +205,11 @@ void Solver::setParameters(const Parameters ¶meters) _solver->setParameters(profile); } +Parameters Solver::getProfile() const +{ + return _solver->getCurrentParameters(); +} + void Solver::setSearchScale(double fovLow, double fowHigh, SSolver::ScaleUnits units) { _solver->setSearchScale(fovLow, fowHigh, units); diff --git a/solver.h b/solver.h index 51fcc6d..858364c 100644 --- a/solver.h +++ b/solver.h @@ -34,6 +34,7 @@ public: bool updateHeader(QString &error); void setParameters(SSolver::Parameters::ParametersProfile profile); void setParameters(const SSolver::Parameters ¶meters); + SSolver::Parameters getProfile() const; void setSearchScale(double fovLow, double fowHigh, ScaleUnits units); void setSearchPosition(double ra, double dec); void clearStartingPositionAndScale();