CircularSurvey.h 3.96 KB
Newer Older
1 2 3 4
#pragma once

#include <QFutureWatcher>
#include <QVector>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
5
#include <memory>
6 7 8 9

#include "SettingsFact.h"
#include "TransectStyleComplexItem.h"

10 11
#include "Geometry/WimaJoinedAreaData.h"
#include "Geometry/WimaMeasurementAreaData.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
12
#include "WimaPlanData.h"
13

14
class RoutingThread;
15
class RoutingData;
16 17

namespace routing {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
18
class GeneratorBase;
19
}
20

21 22
class CircularSurvey : public TransectStyleComplexItem {
  Q_OBJECT
23

24
  using PtrGenerator = std::shared_ptr<routing::GeneratorBase>;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
25
  using PtrRoutingData = std::shared_ptr<RoutingData>;
26 27 28
  using PtrWorker = std::unique_ptr<RoutingThread>;
  using Transects = QList<QList<CoordInfo_t>>;
  using Variant = Transects;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
29

Valentin Platzgummer's avatar
Valentin Platzgummer committed
30 31
  enum class STATE { IDLE, ROUTING, SKIPP, REVERSE, VARIANT_CHANGE };

Valentin Platzgummer's avatar
Valentin Platzgummer committed
32
public:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
33 34
  CircularSurvey(PlanMasterController *masterController, bool flyView,
                 const QString &kmlOrShpFile, QObject *parent);
35
  ~CircularSurvey();
36

Valentin Platzgummer's avatar
Valentin Platzgummer committed
37
  Q_PROPERTY(Fact *variant READ variant CONSTANT)
38
  Q_PROPERTY(
39 40
      QStringList variantNames READ variantNames NOTIFY variantNamesChanged)
  Q_PROPERTY(QStringList generatorNameList READ generatorNameList NOTIFY
Valentin Platzgummer's avatar
Valentin Platzgummer committed
41 42
                 generatorNameListChanged)
  Q_PROPERTY(bool calculating READ calculating NOTIFY calculatingChanged)
43 44 45
  Q_PROPERTY(
      routing::GeneratorBase *generator READ generator NOTIFY generatorChanged)
  Q_PROPERTY(int generatorIndex READ generatorIndex NOTIFY generatorChanged)
46

47
  Q_INVOKABLE void reverse(void);
48 49

  // Property setters
Valentin Platzgummer's avatar
Valentin Platzgummer committed
50
  void setPlanData(const WimaPlanData &d);
51 52

  // Property getters
Valentin Platzgummer's avatar
Valentin Platzgummer committed
53 54
  const WimaPlanData &planData() const;
  WimaPlanData &planData();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
55
  Fact *variant();
56 57
  QStringList variantNames() const;
  bool calculating() const;
58

59
  // Overrides
Valentin Platzgummer's avatar
Valentin Platzgummer committed
60 61 62 63 64 65 66 67 68 69 70 71
  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;
72

Valentin Platzgummer's avatar
Valentin Platzgummer committed
73
  // Generator
74 75
  bool registerGenerator(const QString &name,
                         std::shared_ptr<routing::GeneratorBase> g);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
76 77 78 79
  bool unregisterGenerator(const QString &name);
  bool unregisterGenerator(int index);
  Q_INVOKABLE bool switchToGenerator(const QString &name);
  Q_INVOKABLE bool switchToGenerator(int index);
80 81 82
  QStringList generatorNameList();
  routing::GeneratorBase *generator();
  int generatorIndex();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
83

84
  static const char *settingsGroup;
85
  static const char *variantName;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
86 87
  static const char *jsonComplexItemTypeValue;
  static const QString name;
88 89 90

signals:
  void calculatingChanged();
91
  void variantNamesChanged();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
92 93
  void generatorNameListChanged();
  void generatorChanged();
94 95 96

private slots:
  // Overrides from TransectStyleComplexItem
Valentin Platzgummer's avatar
Valentin Platzgummer committed
97 98
  virtual void _rebuildTransectsPhase1(void) override final;
  virtual void _recalcCameraShots(void) override final;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
99 100

  // Worker functions.
101
  void _setTransects(PtrRoutingData pRoute);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
102
  void _changeVariant();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
103
  bool _updateWorker();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
104 105
  void _changeVariantWorker();
  void _reverseWorker();
106 107

private:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
108
  bool _switchToGenerator(const PtrGenerator &newG);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
109 110
  void _setState(STATE state);
  bool _calculating(STATE state) const;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
111 112 113

  // State.
  STATE _state;
114 115 116

  // center of the circular lanes, e.g. base station
  QMap<QString, FactMetaData *> _metaDataMap;
117
  SettingsFact _variant;
118
  QStringList _variantNames;
119

120
  // Area data
121
  std::shared_ptr<WimaPlanData> _pAreaData;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
122 123 124

  // Generators
  QList<PtrGenerator> _generatorList;
125
  QStringList _generatorNameList;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
126
  PtrGenerator _pGenerator;
127

128
  // Routing.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
129
  QVector<Variant> _variantVector;
130
  PtrWorker _pWorker;
131
};