Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
5f9f30c2
Commit
5f9f30c2
authored
Nov 27, 2020
by
Valentin Platzgummer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
generators fixed, _isIncomplete stuff added to MeasurementComplexItem
parent
8da5e19a
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
866 additions
and
849 deletions
+866
-849
AreaData.cc
src/MeasurementComplexItem/AreaData.cc
+2
-2
AreaData.h
src/MeasurementComplexItem/AreaData.h
+1
-1
CircularGenerator.cpp
src/MeasurementComplexItem/CircularGenerator.cpp
+40
-62
CircularGenerator.h
src/MeasurementComplexItem/CircularGenerator.h
+5
-5
GeneratorBase.cc
src/MeasurementComplexItem/GeneratorBase.cc
+2
-16
GeneratorBase.h
src/MeasurementComplexItem/GeneratorBase.h
+1
-1
LinearGenerator.cpp
src/MeasurementComplexItem/LinearGenerator.cpp
+32
-52
LinearGenerator.h
src/MeasurementComplexItem/LinearGenerator.h
+7
-5
MeasurementComplexItem.cc
src/MeasurementComplexItem/MeasurementComplexItem.cc
+48
-76
MeasurementComplexItem.h
src/MeasurementComplexItem/MeasurementComplexItem.h
+7
-7
GeoArea.cc
src/MeasurementComplexItem/geometry/GeoArea.cc
+31
-2
GeoArea.h
src/MeasurementComplexItem/geometry/GeoArea.h
+7
-0
MeasurementArea.cc
src/MeasurementComplexItem/geometry/MeasurementArea.cc
+27
-4
SafeArea.cc
src/MeasurementComplexItem/geometry/SafeArea.cc
+2
-2
SnakeTile.cpp
src/MeasurementComplexItem/nemo_interface/SnakeTile.cpp
+5
-3
SnakeTile.h
src/MeasurementComplexItem/nemo_interface/SnakeTile.h
+3
-0
CircularGeneratorMapVisual.qml
...MeasurementComplexItem/qml/CircularGeneratorMapVisual.qml
+34
-54
MeasurementItemMapVisual.qml
src/MeasurementComplexItem/qml/MeasurementItemMapVisual.qml
+111
-50
ParameterEditor.qml
src/MeasurementComplexItem/qml/ParameterEditor.qml
+20
-6
SafeAreaMapVisual.qml
src/MeasurementComplexItem/qml/SafeAreaMapVisual.qml
+31
-41
QGCMapPolygon.cc
src/MissionManager/QGCMapPolygon.cc
+450
-460
No files found.
src/MeasurementComplexItem/AreaData.cc
View file @
5f9f30c2
...
...
@@ -39,7 +39,7 @@ bool AreaData::insert(GeoArea *areaData) {
if
(
areaData
!=
nullptr
)
{
if
(
Q_LIKELY
(
!
this
->
_areaList
.
contains
(
areaData
)))
{
_areaList
.
append
(
areaData
);
emit
areaList
();
emit
areaList
Changed
();
auto
*
measurementArea
=
qobject_cast
<
MeasurementArea
*>
(
areaData
);
if
(
measurementArea
!=
nullptr
)
{
...
...
@@ -88,7 +88,7 @@ QmlObjectListModel *AreaData::areaList() { return &_areaList; }
const
QmlObjectListModel
*
AreaData
::
areaList
()
const
{
return
&
_areaList
;
}
const
QGeoCoordinate
&
AreaData
::
origin
()
const
{
return
_origin
;
}
QGeoCoordinate
AreaData
::
origin
()
const
{
return
_origin
;
}
bool
AreaData
::
isCorrect
()
{
if
(
!
initialized
())
{
...
...
src/MeasurementComplexItem/AreaData.h
View file @
5f9f30c2
...
...
@@ -47,7 +47,7 @@ public:
//! \brief origin
//! \return Returns an origin near one of the areas.
//! \note Origin might change if the list of areas changes.
const
QGeoCoordinate
&
origin
()
const
;
QGeoCoordinate
origin
()
const
;
Q_INVOKABLE
bool
isCorrect
();
//!
...
...
src/MeasurementComplexItem/CircularGenerator.cpp
View file @
5f9f30c2
...
...
@@ -37,13 +37,21 @@ CircularGenerator::CircularGenerator(QObject *parent)
:
CircularGenerator
(
nullptr
,
parent
)
{}
CircularGenerator
::
CircularGenerator
(
GeneratorBase
::
Data
d
,
QObject
*
parent
)
:
GeneratorBase
(
d
,
parent
),
_connectionsEstablished
(
false
),
:
GeneratorBase
(
d
,
parent
),
_metaDataMap
(
FactMetaData
::
createMapFromJsonFile
(
QStringLiteral
(
":/json/CircularGenerator.SettingsGroup.json"
),
this
)),
_distance
(
settingsGroup
,
_metaDataMap
[
distanceName
]),
_deltaAlpha
(
settingsGroup
,
_metaDataMap
[
deltaAlphaName
]),
_minLength
(
settingsGroup
,
_metaDataMap
[
minLengthName
])
{
establishConnections
();
_minLength
(
settingsGroup
,
_metaDataMap
[
minLengthName
]),
_measurementArea
(
nullptr
)
{
connect
(
this
->
distance
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
deltaAlpha
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
minLength
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
,
&
CircularGenerator
::
referenceChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
}
QString
CircularGenerator
::
editorQml
()
{
...
...
@@ -199,77 +207,47 @@ void CircularGenerator::resetReference() {
}
}
void
CircularGenerator
::
establishConnections
()
{
if
(
this
->
_d
!=
nullptr
&&
!
this
->
_connectionsEstablished
)
{
auto
measurementArea
=
getGeoArea
<
const
MeasurementArea
*>
(
*
this
->
_d
->
areaList
());
auto
serviceArea
=
getGeoArea
<
const
SafeArea
*>
(
*
this
->
_d
->
areaList
());
if
(
measurementArea
!=
nullptr
&&
serviceArea
!=
nullptr
)
{
GeneratorBase
::
establishConnections
();
Fact
*
CircularGenerator
::
distance
()
{
return
&
_distance
;
}
connect
(
this
->
_d
,
&
AreaData
::
originChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
measurementArea
,
&
MeasurementArea
::
progressChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
measurementArea
,
&
MeasurementArea
::
tilesChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
measurementArea
,
&
MeasurementArea
::
centerChanged
,
this
,
&
CircularGenerator
::
resetReferenceIfInvalid
);
connect
(
measurementArea
,
&
MeasurementArea
::
pathChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
serviceArea
,
&
SafeArea
::
depotChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
distance
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
deltaAlpha
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
minLength
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
,
&
CircularGenerator
::
referenceChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
this
->
_connectionsEstablished
=
true
;
}
}
Fact
*
CircularGenerator
::
deltaAlpha
()
{
return
&
_deltaAlpha
;
}
Fact
*
CircularGenerator
::
minLength
()
{
return
&
_minLength
;
}
void
CircularGenerator
::
onAreaListChanged
()
{
auto
*
measurementArea
=
getGeoArea
<
MeasurementArea
*>
(
*
this
->
_d
->
areaList
());
setMeasurementArea
(
measurementArea
);
}
void
CircularGenerator
::
deleteConnections
()
{
if
(
this
->
_d
!=
nullptr
&&
this
->
_connectionsEstablished
)
{
auto
measurementArea
=
getGeoArea
<
const
MeasurementArea
*>
(
*
this
->
_d
->
areaList
());
auto
serviceArea
=
getGeoArea
<
const
SafeArea
*>
(
*
this
->
_d
->
areaList
());
if
(
measurementArea
!=
nullptr
&&
serviceArea
!=
nullptr
)
{
GeneratorBase
::
deleteConnections
();
void
CircularGenerator
::
setMeasurementArea
(
MeasurementArea
*
area
)
{
if
(
_measurementArea
!=
area
)
{
disconnect
(
this
->
_d
,
&
AreaData
::
originChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
measurementArea
,
&
MeasurementArea
::
progressChanged
,
this
,
if
(
_measurementArea
!=
nullptr
)
{
disconnect
(
_measurementArea
,
&
MeasurementArea
::
progressChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
measurementArea
,
&
MeasurementArea
::
tilesChanged
,
this
,
disconnect
(
_
measurementArea
,
&
MeasurementArea
::
tilesChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
measurementArea
,
&
MeasurementArea
::
centerChanged
,
this
,
disconnect
(
_
measurementArea
,
&
MeasurementArea
::
centerChanged
,
this
,
&
CircularGenerator
::
resetReferenceIfInvalid
);
disconnect
(
measurementArea
,
&
MeasurementArea
::
pathChanged
,
this
,
disconnect
(
_
measurementArea
,
&
MeasurementArea
::
pathChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
serviceArea
,
&
SafeArea
::
depotChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
this
->
distance
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
this
->
deltaAlpha
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
this
->
minLength
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
this
,
&
CircularGenerator
::
referenceChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
this
->
_connectionsEstablished
=
true
;
}
}
}
Fact
*
CircularGenerator
::
distance
()
{
return
&
_distance
;
}
_measurementArea
=
area
;
Fact
*
CircularGenerator
::
deltaAlpha
()
{
return
&
_deltaAlpha
;
}
if
(
_measurementArea
!=
nullptr
)
{
connect
(
_measurementArea
,
&
MeasurementArea
::
progressChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
_measurementArea
,
&
MeasurementArea
::
tilesChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
_measurementArea
,
&
MeasurementArea
::
centerChanged
,
this
,
&
CircularGenerator
::
resetReferenceIfInvalid
);
connect
(
_measurementArea
,
&
MeasurementArea
::
pathChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
}
Fact
*
CircularGenerator
::
minLength
()
{
return
&
_minLength
;
}
emit
generatorChanged
();
}
}
bool
circularTransects
(
const
snake
::
FPoint
&
reference
,
const
snake
::
FPolygon
&
polygon
,
...
...
src/MeasurementComplexItem/CircularGenerator.h
View file @
5f9f30c2
...
...
@@ -4,6 +4,8 @@
#include "SettingsFact.h"
class
MeasurementArea
;
namespace
routing
{
class
CircularGenerator
:
public
GeneratorBase
{
...
...
@@ -48,18 +50,16 @@ public slots:
Q_INVOKABLE
void
resetReferenceIfInvalid
();
Q_INVOKABLE
void
resetReference
();
protected:
virtual
void
establishConnections
()
override
;
virtual
void
deleteConnections
()
override
;
private:
bool
_connectionsEstablished
;
void
onAreaListChanged
();
void
setMeasurementArea
(
MeasurementArea
*
area
);
QGeoCoordinate
_reference
;
QMap
<
QString
,
FactMetaData
*>
_metaDataMap
;
SettingsFact
_distance
;
SettingsFact
_deltaAlpha
;
SettingsFact
_minLength
;
MeasurementArea
*
_measurementArea
;
};
}
// namespace routing
src/MeasurementComplexItem/GeneratorBase.cc
View file @
5f9f30c2
...
...
@@ -8,8 +8,6 @@ GeneratorBase::GeneratorBase(QObject *parent)
GeneratorBase
::
GeneratorBase
(
GeneratorBase
::
Data
d
,
QObject
*
parent
)
:
QObject
(
parent
),
_d
(
d
)
{
establishConnections
();
connect
(
_d
,
&
AreaData
::
areaListChanged
,
this
,
&
GeneratorBase
::
_areaListChangedHandler
);
}
GeneratorBase
::~
GeneratorBase
()
{}
...
...
@@ -17,27 +15,15 @@ GeneratorBase::~GeneratorBase() {}
GeneratorBase
::
Data
GeneratorBase
::
data
()
const
{
return
_d
;
}
void
GeneratorBase
::
setData
(
Data
d
)
{
if
(
d
!=
nullptr
)
{
if
(
_d
!=
nullptr
)
{
disconnect
(
_d
,
&
AreaData
::
areaListChanged
,
this
,
&
GeneratorBase
::
_areaListChangedHandler
);
}
if
(
d
!=
_d
&&
d
!=
nullptr
)
{
deleteConnections
();
_d
=
d
;
establishConnections
();
connect
(
_d
,
&
AreaData
::
areaListChanged
,
this
,
&
GeneratorBase
::
_areaListChangedHandler
);
emit
dataChanged
();
}
}
void
GeneratorBase
::
establishConnections
()
{}
void
GeneratorBase
::
deleteConnections
()
{}
void
GeneratorBase
::
_areaListChangedHandler
()
{
deleteConnections
();
establishConnections
();
emit
generatorChanged
();
}
}
// namespace routing
src/MeasurementComplexItem/GeneratorBase.h
View file @
5f9f30c2
...
...
@@ -37,6 +37,7 @@ public:
signals:
void
generatorChanged
();
void
dataChanged
();
protected:
virtual
void
establishConnections
();
...
...
@@ -44,7 +45,6 @@ protected:
Data
_d
;
private:
void
_areaListChangedHandler
();
};
}
// namespace routing
src/MeasurementComplexItem/LinearGenerator.cpp
View file @
5f9f30c2
...
...
@@ -32,8 +32,16 @@ LinearGenerator::LinearGenerator(GeneratorBase::Data d, QObject *parent)
QStringLiteral
(
":/json/LinearGenerator.SettingsGroup.json"
),
this
)),
_distance
(
settingsGroup
,
_metaDataMap
[
distanceName
]),
_alpha
(
settingsGroup
,
_metaDataMap
[
alphaName
]),
_minLength
(
settingsGroup
,
_metaDataMap
[
minLengthName
])
{
establishConnections
();
_minLength
(
settingsGroup
,
_metaDataMap
[
minLengthName
]),
_measurementArea
(
nullptr
),
_safeArea
(
nullptr
)
{
connect
(
this
->
distance
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
alpha
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
minLength
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
_d
,
&
AreaData
::
areaListChanged
,
this
,
&
LinearGenerator
::
onAreaListChanged
);
}
QString
LinearGenerator
::
editorQml
()
{
...
...
@@ -147,63 +155,35 @@ Fact *LinearGenerator::alpha() { return &_alpha; }
Fact
*
LinearGenerator
::
minLength
()
{
return
&
_minLength
;
}
void
LinearGenerator
::
establishConnections
()
{
if
(
this
->
_d
!=
nullptr
&&
!
this
->
_connectionsEstablished
)
{
auto
measurementArea
=
getGeoArea
<
const
MeasurementArea
*>
(
*
this
->
_d
->
areaList
());
auto
serviceArea
=
getGeoArea
<
const
SafeArea
*>
(
*
this
->
_d
->
areaList
());
if
(
measurementArea
!=
nullptr
&&
serviceArea
!=
nullptr
)
{
GeneratorBase
::
establishConnections
();
connect
(
this
->
_d
,
&
AreaData
::
originChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
measurementArea
,
&
MeasurementArea
::
progressChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
measurementArea
,
&
MeasurementArea
::
tilesChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
measurementArea
,
&
MeasurementArea
::
pathChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
serviceArea
,
&
SafeArea
::
depotChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
distance
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
alpha
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
this
->
minLength
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
this
->
_connectionsEstablished
=
true
;
}
}
void
LinearGenerator
::
onAreaListChanged
()
{
auto
*
measurementArea
=
getGeoArea
<
MeasurementArea
*>
(
*
this
->
_d
->
areaList
());
setMeasurementArea
(
measurementArea
);
}
void
LinearGenerator
::
deleteConnections
()
{
if
(
this
->
_d
!=
nullptr
&&
this
->
_connectionsEstablished
)
{
auto
measurementArea
=
getGeoArea
<
const
MeasurementArea
*>
(
*
this
->
_d
->
areaList
());
auto
serviceArea
=
getGeoArea
<
const
SafeArea
*>
(
*
this
->
_d
->
areaList
());
if
(
measurementArea
!=
nullptr
&&
serviceArea
!=
nullptr
)
{
GeneratorBase
::
deleteConnections
();
void
LinearGenerator
::
setMeasurementArea
(
MeasurementArea
*
area
)
{
if
(
_measurementArea
!=
area
)
{
disconnect
(
this
->
_d
,
&
AreaData
::
originChanged
,
this
,
if
(
_measurementArea
!=
nullptr
)
{
disconnect
(
_measurementArea
,
&
MeasurementArea
::
progressChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
measurementArea
,
&
MeasurementArea
::
progres
sChanged
,
this
,
disconnect
(
_measurementArea
,
&
MeasurementArea
::
tile
sChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
measurementArea
,
&
MeasurementArea
::
tiles
Changed
,
this
,
disconnect
(
_measurementArea
,
&
MeasurementArea
::
path
Changed
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
measurementArea
,
&
MeasurementArea
::
pathChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
serviceArea
,
&
SafeArea
::
depotChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
this
->
distance
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
this
->
alpha
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
disconnect
(
this
->
minLength
(),
&
Fact
::
rawValueChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
this
->
_connectionsEstablished
=
true
;
}
_measurementArea
=
area
;
if
(
_measurementArea
!=
nullptr
)
{
connect
(
_measurementArea
,
&
MeasurementArea
::
progressChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
_measurementArea
,
&
MeasurementArea
::
tilesChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
connect
(
_measurementArea
,
&
MeasurementArea
::
pathChanged
,
this
,
&
GeneratorBase
::
generatorChanged
);
}
emit
generatorChanged
();
}
}
...
...
src/MeasurementComplexItem/LinearGenerator.h
View file @
5f9f30c2
...
...
@@ -4,6 +4,9 @@
#include "SettingsFact.h"
class
MeasurementArea
;
class
SafeArea
;
namespace
routing
{
class
LinearGenerator
:
public
GeneratorBase
{
...
...
@@ -33,17 +36,16 @@ public:
static
const
char
*
alphaName
;
static
const
char
*
minLengthName
;
protected:
virtual
void
establishConnections
()
override
;
virtual
void
deleteConnections
()
override
;
private:
bool
_connectionsEstablished
;
void
onAreaListChanged
();
void
setMeasurementArea
(
MeasurementArea
*
area
);
QMap
<
QString
,
FactMetaData
*>
_metaDataMap
;
SettingsFact
_distance
;
SettingsFact
_alpha
;
SettingsFact
_minLength
;
MeasurementArea
*
_measurementArea
;
SafeArea
*
_safeArea
;
};
}
// namespace routing
src/MeasurementComplexItem/MeasurementComplexItem.cc
View file @
5f9f30c2
...
...
@@ -72,15 +72,32 @@ MeasurementComplexItem::MeasurementComplexItem(
this
->
exitCoordinateSameAsEntry
());
});
// Connect isIncomplete.
connect
(
this
,
&
MeasurementComplexItem
::
idleChanged
,
[
this
]
{
if
(
this
->
idle
())
{
if
(
this
->
route
().
size
()
>
0
&&
this
->
_isIncomplete
==
true
)
{
this
->
_isIncomplete
=
false
;
emit
this
->
isIncompleteChanged
();
}
}
else
{
if
(
this
->
_isIncomplete
==
false
)
{
this
->
_isIncomplete
=
true
;
emit
this
->
isIncompleteChanged
();
}
}
});
connect
(
this
,
&
MeasurementComplexItem
::
idleChanged
,
this
,
&
MeasurementComplexItem
::
readyForSaveStateChanged
);
// Connect complexDistance.
connect
(
this
,
&
MeasurementComplexItem
::
routeChanged
,
[
this
]
{
emit
this
->
complexDistanceChanged
();
});
// Register Generators.
auto
lg
=
new
routing
::
LinearGenerator
(
this
->
_pAreaData
,
this
);
register
Generator
(
lg
->
name
(),
lg
);
add
Generator
(
lg
->
name
(),
lg
);
auto
cg
=
new
routing
::
CircularGenerator
(
this
->
_pAreaData
,
this
);
register
Generator
(
cg
->
name
(),
cg
);
add
Generator
(
cg
->
name
(),
cg
);
qCritical
()
<<
"ToDo: _altitude connections missing."
;
qCritical
()
<<
"ToDo: add generator saveing."
;
...
...
@@ -192,7 +209,7 @@ void MeasurementComplexItem::save(QJsonArray &planItems) {
qWarning
()
<<
"MeasurementComplexItem::save(): area data save missing."
;
qWarning
()
<<
"MeasurementComplexItem::save(): mission item save missing."
;
if
(
ready
())
{
if
(
idle
())
{
QJsonObject
saveObject
;
saveObject
[
JsonHelper
::
jsonVersionKey
]
=
1
;
...
...
@@ -270,7 +287,7 @@ double MeasurementComplexItem::specifiedGimbalPitch() {
void
MeasurementComplexItem
::
appendMissionItems
(
QList
<
MissionItem
*>
&
items
,
QObject
*
missionItemParent
)
{
if
(
ready
())
{
if
(
idle
())
{
qCDebug
(
MeasurementComplexItemLog
)
<<
"appendMissionItems()"
;
int
seqNum
=
this
->
_sequenceNumber
;
...
...
@@ -350,8 +367,8 @@ void MeasurementComplexItem::_setState(MeasurementComplexItem::STATE state) {
emit
editingChanged
();
}
if
(
_
ready
(
oldState
)
!=
_ready
(
state
))
{
emit
ready
Changed
();
if
(
_
idle
(
oldState
)
!=
_idle
(
state
))
{
emit
idle
Changed
();
}
}
}
...
...
@@ -364,7 +381,7 @@ bool MeasurementComplexItem::_editing(MeasurementComplexItem::STATE state) {
return
state
==
STATE
::
EDITING
;
}
bool
MeasurementComplexItem
::
_
ready
(
MeasurementComplexItem
::
STATE
state
)
{
bool
MeasurementComplexItem
::
_
idle
(
MeasurementComplexItem
::
STATE
state
)
{
return
state
==
STATE
::
IDLE
;
}
...
...
@@ -380,6 +397,7 @@ void MeasurementComplexItem::_updateRoute() {
if
(
!
editing
())
{
// Reset data.
this
->
_route
.
clear
();
emit
routeChanged
();
this
->
_variantVector
.
clear
();
this
->
_variantNames
.
clear
();
emit
variantNamesChanged
();
...
...
@@ -443,14 +461,14 @@ void MeasurementComplexItem::_updateRoute() {
}
}
else
{
qCDebug
(
MeasurementComplexItemLog
)
<<
"_updateWorker():
plan
data invalid."
;
<<
"_updateWorker():
area
data invalid."
;
return
;
}
}
}
void
MeasurementComplexItem
::
_changeVariant
()
{
if
(
ready
())
{
if
(
idle
())
{
auto
variant
=
this
->
_variant
.
rawValue
().
toUInt
();
// Find old variant and run. Old run corresponts with empty list.
...
...
@@ -470,11 +488,11 @@ void MeasurementComplexItem::_changeVariant() {
if
(
old_variant
!=
std
::
numeric_limits
<
std
::
size_t
>::
max
())
{
// this->_route containes a route, swap it back to
// this->_solutionVector
auto
&
old
VariantCoordinates
=
this
->
_variantVector
[
old_variant
];
old
VariantCoordinates
.
swap
(
this
->
_route
);
auto
&
old
Route
=
this
->
_variantVector
[
old_variant
];
old
Route
.
swap
(
this
->
_route
);
}
auto
&
new
VariantCoordinates
=
this
->
_variantVector
[
variant
];
this
->
_route
.
swap
(
new
VariantCoordinates
);
auto
&
new
Route
=
this
->
_variantVector
[
variant
];
this
->
_route
.
swap
(
new
Route
);
emit
routeChanged
();
}
else
{
// error
qCDebug
(
MeasurementComplexItemLog
)
...
...
@@ -496,7 +514,7 @@ void MeasurementComplexItem::_changeVariant() {
}
void
MeasurementComplexItem
::
_reverseRoute
()
{
if
(
ready
())
{
if
(
idle
())
{
if
(
this
->
_route
.
size
()
>
0
)
{
auto
&
t
=
this
->
_route
;
std
::
reverse
(
t
.
begin
(),
t
.
end
());
...
...
@@ -507,7 +525,7 @@ void MeasurementComplexItem::_reverseRoute() {
ComplexMissionItem
::
ReadyForSaveState
MeasurementComplexItem
::
readyForSaveState
()
const
{
if
(
ready
())
{
if
(
idle
())
{
return
ReadyForSaveState
::
ReadyForSave
;
}
else
{
return
ReadyForSaveState
::
NotReadyForSaveData
;
...
...
@@ -557,8 +575,8 @@ int MeasurementComplexItem::lastSequenceNumber() const {
return
_sequenceNumber
+
std
::
max
(
0
,
this
->
_route
.
size
()
-
1
);
}
bool
MeasurementComplexItem
::
register
Generator
(
const
QString
&
name
,
routing
::
GeneratorBase
*
g
)
{
bool
MeasurementComplexItem
::
add
Generator
(
const
QString
&
name
,
routing
::
GeneratorBase
*
g
)
{
if
(
name
.
isEmpty
())
{
qCDebug
(
MeasurementComplexItemLog
)
<<
"registerGenerator(): empty name string."
;
...
...
@@ -587,7 +605,7 @@ bool MeasurementComplexItem::registerGenerator(const QString &name,
}
}
bool
MeasurementComplexItem
::
unregister
Generator
(
const
QString
&
name
)
{
bool
MeasurementComplexItem
::
remove
Generator
(
const
QString
&
name
)
{
auto
index
=
this
->
_generatorNameList
.
indexOf
(
name
);
if
(
index
>=
0
)
{
// Is this the current generator?
...
...
@@ -615,9 +633,9 @@ bool MeasurementComplexItem::unregisterGenerator(const QString &name) {
}
}
bool
MeasurementComplexItem
::
unregister
Generator
(
int
index
)
{
bool
MeasurementComplexItem
::
remove
Generator
(
int
index
)
{
if
(
index
>
0
&&
index
<
this
->
_generatorNameList
.
size
())
{
return
unregister
Generator
(
this
->
_generatorNameList
.
at
(
index
));
return
remove
Generator
(
this
->
_generatorNameList
.
at
(
index
));
}
else
{
qCDebug
(
MeasurementComplexItemLog
)
<<
"unregisterGenerator(): index ("
<<
index
...
...
@@ -701,7 +719,6 @@ void MeasurementComplexItem::_storeRoutingData(
// Store solutions.
auto
ori
=
this
->
_pAreaData
->
origin
();
ori
.
setAltitude
(
0
);
const
auto
&
transectsENU
=
pRoute
->
transects
;
QVector
<
Variant
>
variantVector
;
const
auto
nSolutions
=
pRoute
->
solutionVector
.
size
();
...
...
@@ -711,60 +728,13 @@ void MeasurementComplexItem::_storeRoutingData(
if
(
solution
.
size
()
>
0
)
{
const
auto
&
route
=
solution
.
at
(
0
);
const
auto
&
path
=
route
.
path
;
const
auto
&
info
=
route
.
info
;
if
(
info
.
size
()
>
1
)
{
// Find index of first waypoint.
std
::
size_t
idxFirst
=
0
;
const
auto
&
infoFirst
=
info
.
at
(
1
);
const
auto
&
firstTransect
=
transectsENU
[
infoFirst
.
index
];
if
(
firstTransect
.
size
()
>
0
)
{
const
auto
&
firstWaypoint
=
infoFirst
.
reversed
?
firstTransect
.
back
()
:
firstTransect
.
front
();
double
th
=
0.01
;
for
(
std
::
size_t
i
=
0
;
i
<
path
.
size
();
++
i
)
{
auto
dist
=
bg
::
distance
(
path
[
i
],
firstWaypoint
);
if
(
dist
<
th
)
{
idxFirst
=
i
;
break
;
}
}
// Find index of last waypoint.
std
::
size_t
idxLast
=
path
.
size
()
-
1
;
const
auto
&
infoLast
=
info
.
at
(
info
.
size
()
-
2
);
const
auto
&
lastTransect
=
transectsENU
[
infoLast
.
index
];
if
(
lastTransect
.
size
()
>
0
)
{
const
auto
&
lastWaypoint
=
infoLast
.
reversed
?
lastTransect
.
front
()
:
lastTransect
.
back
();
for
(
long
i
=
path
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
auto
dist
=
bg
::
distance
(
path
[
i
],
lastWaypoint
);
if
(
dist
<
th
)
{
idxLast
=
i
;
break
;
}
}
// Convert to geo coordinates.
for
(
std
::
size_t
i
=
idxFirst
;
i
<=
idxLast
;
++
i
)
{
auto
&
vertex
=
path
[
i
];
QGeoCoordinate
c
;
snake
::
fromENU
(
ori
,
vertex
,
c
);
var
.
append
(
QVariant
::
fromValue
(
c
));
}
}
else
{
qCDebug
(
MeasurementComplexItemLog
)
<<
"_setTransects(): lastTransect.size() == 0"
;
}
}
else
{
qCDebug
(
MeasurementComplexItemLog
)
<<
"_setTransects(): firstTransect.size() == 0"
;
}
}
else
{
qCDebug
(
MeasurementComplexItemLog
)
<<
"_setTransects(): transectsInfo.size() <= 1"
;
// Convert to geo coordinates.
for
(
const
auto
&
vertex
:
path
)
{
QGeoCoordinate
c
;
snake
::
fromENU
(
ori
,
vertex
,
c
);
var
.
append
(
QVariant
::
fromValue
(
c
));
}
}
else
{
qCDebug
(
MeasurementComplexItemLog
)
...
...
@@ -789,12 +759,14 @@ void MeasurementComplexItem::_storeRoutingData(
}
emit
variantNamesChanged
();
// Set variant to 0.
disconnect
(
&
this
->
_variant
,
&
Fact
::
rawValueChanged
,
this
,
&
MeasurementComplexItem
::
_changeVariant
);
this
->
_variant
.
setCookedValue
(
QVariant
(
0
));
connect
(
&
this
->
_variant
,
&
Fact
::
rawValueChanged
,
this
,
&
MeasurementComplexItem
::
_changeVariant
);
// Select first variant as route.
this
->
_route
.
swap
(
this
->
_variantVector
.
first
());
emit
routeChanged
();
...
...
@@ -817,6 +789,6 @@ bool MeasurementComplexItem::calculating() const {
bool
MeasurementComplexItem
::
editing
()
const
{
return
_editing
(
this
->
_state
);
}
bool
MeasurementComplexItem
::
ready
()
const
{
return
_ready
(
this
->
_state
);
}
bool
MeasurementComplexItem
::
idle
()
const
{
return
_idle
(
this
->
_state
);
}
bool
MeasurementComplexItem
::
followTerrain
()
const
{
return
_followTerrain
;
}
src/MeasurementComplexItem/MeasurementComplexItem.h
View file @
5f9f30c2
...
...
@@ -41,7 +41,7 @@ public:
generatorNameListChanged
)
Q_PROPERTY
(
bool
calculating
READ
calculating
NOTIFY
calculatingChanged
)
Q_PROPERTY
(
bool
editing
READ
editing
NOTIFY
editingChanged
)
Q_PROPERTY
(
bool
ready
READ
ready
NOTIFY
ready
Changed
)
Q_PROPERTY
(
bool
idle
READ
idle
NOTIFY
idle
Changed
)
Q_PROPERTY
(
routing
::
GeneratorBase
*
generator
READ
generator
NOTIFY
generatorChanged
)
Q_PROPERTY
(
int
generatorIndex
READ
generatorIndex
NOTIFY
generatorChanged
)
...
...
@@ -94,9 +94,9 @@ public:
virtual
QString
abbreviation
(
void
)
const
override
final
;
// Generator
bool
register
Generator
(
const
QString
&
name
,
routing
::
GeneratorBase
*
g
);
bool
unregister
Generator
(
const
QString
&
name
);
bool
unregister
Generator
(
int
index
);
bool
add
Generator
(
const
QString
&
name
,
routing
::
GeneratorBase
*
g
);
bool
remove
Generator
(
const
QString
&
name
);
bool
remove
Generator
(
int
index
);
Q_INVOKABLE
bool
switchToGenerator
(
const
QString
&
name
);
Q_INVOKABLE
bool
switchToGenerator
(
int
index
);
QStringList
generatorNameList
();
...
...
@@ -137,7 +137,7 @@ public:
bool
calculating
()
const
;
bool
editing
()
const
;
bool
ready
()
const
;
bool
idle
()
const
;
bool
followTerrain
()
const
;
static
const
char
*
settingsGroup
;
...
...
@@ -154,7 +154,7 @@ signals:
void
calculatingChanged
();
void
editingChanged
();
void
ready
Changed
();
void
idle
Changed
();
void
areaDataChanged
();
void
routeChanged
();
...
...
@@ -173,7 +173,7 @@ private:
void
_setAreaData
(
PtrAreaData
data
);
static
bool
_calculating
(
STATE
state
);
static
bool
_editing
(
STATE
state
);
static
bool
_
ready
(
STATE
state
);
static
bool
_
idle
(
STATE
state
);
// Hirarcical stuff.
PlanMasterController
*
_masterController
;
...
...
src/MeasurementComplexItem/geometry/GeoArea.cc
View file @
5f9f30c2
...
...
@@ -17,13 +17,16 @@ const char *GeoArea::settingsGroup = "GeoArea";
GeoArea
::
GeoArea
(
QObject
*
parent
)
:
QGCMapPolygon
(
parent
)
{
init
();
}