#pragma once #include #include #include #include "SettingsFact.h" #include "TransectStyleComplexItem.h" #include "Geometry/WimaJoinedAreaData.h" #include "Geometry/WimaMeasurementAreaData.h" #include "WimaPlanData.h" class RoutingThread; class RoutingData; namespace routing { class GeneratorBase; } class CircularSurvey : public TransectStyleComplexItem { Q_OBJECT using PtrGenerator = std::shared_ptr; using PtrRoutingData = std::shared_ptr; using PtrWorker = std::unique_ptr; using Transects = QList>; using Variant = Transects; enum class STATE { IDLE, ROUTING, SKIPP, REVERSE, VARIANT_CHANGE }; public: CircularSurvey(PlanMasterController *masterController, bool flyView, const QString &kmlOrShpFile, QObject *parent); ~CircularSurvey(); Q_PROPERTY(Fact *variant READ variant CONSTANT) Q_PROPERTY( QStringList variantNames READ variantNames NOTIFY variantNamesChanged) Q_PROPERTY(QStringList generatorNameList READ generatorNameList NOTIFY generatorNameListChanged) Q_PROPERTY(bool calculating READ calculating NOTIFY calculatingChanged) Q_PROPERTY( routing::GeneratorBase *generator READ generator NOTIFY generatorChanged) Q_PROPERTY(int generatorIndex READ generatorIndex NOTIFY generatorChanged) Q_INVOKABLE void reverse(void); // Property setters void setPlanData(const WimaPlanData &d); // Property getters const WimaPlanData &planData() const; WimaPlanData &planData(); Fact *variant(); QStringList variantNames() const; bool calculating() const; // Overrides virtual bool load(const QJsonObject &complexObject, int sequenceNumber, QString &errorString) override final; virtual QString mapVisualQML(void) const override final; virtual void save(QJsonArray &planItems) override final; virtual bool specifiesCoordinate(void) const override final; virtual double timeBetweenShots(void) override final; virtual QString commandDescription(void) const override final; virtual QString commandName(void) const override final; virtual QString abbreviation(void) const override final; virtual ReadyForSaveState readyForSaveState(void) const override final; virtual double additionalTimeDelay(void) const override final; virtual QString patternName(void) const override; // Generator bool registerGenerator(const QString &name, std::shared_ptr g); bool unregisterGenerator(const QString &name); bool unregisterGenerator(int index); Q_INVOKABLE bool switchToGenerator(const QString &name); Q_INVOKABLE bool switchToGenerator(int index); QStringList generatorNameList(); routing::GeneratorBase *generator(); int generatorIndex(); static const char *settingsGroup; static const char *variantName; static const char *jsonComplexItemTypeValue; static const QString name; signals: void calculatingChanged(); void variantNamesChanged(); void generatorNameListChanged(); void generatorChanged(); private slots: // Overrides from TransectStyleComplexItem virtual void _rebuildTransectsPhase1(void) override final; virtual void _recalcCameraShots(void) override final; // Worker functions. void _setTransects(PtrRoutingData pRoute); void _changeVariant(); bool _updateWorker(); void _changeVariantWorker(); void _reverseWorker(); private: bool _switchToGenerator(const PtrGenerator &newG); void _setState(STATE state); bool _calculating(STATE state) const; // State. STATE _state; // center of the circular lanes, e.g. base station QMap _metaDataMap; SettingsFact _variant; QStringList _variantNames; // Area data std::shared_ptr _pAreaData; // Generators QList _generatorList; QStringList _generatorNameList; PtrGenerator _pGenerator; // Routing. QVector _variantVector; PtrWorker _pWorker; };