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
e6718b14
Commit
e6718b14
authored
Dec 23, 2017
by
DonLakeFlyer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixes to CameraCalc loading plus versioning
parent
f58fe001
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
151 additions
and
167 deletions
+151
-167
CameraCalc.cc
src/MissionManager/CameraCalc.cc
+94
-78
CameraCalc.h
src/MissionManager/CameraCalc.h
+28
-29
MissionController.h
src/MissionManager/MissionController.h
+1
-1
PlanMasterController.cc
src/MissionManager/PlanMasterController.cc
+1
-1
QGCMapPolygonVisuals.qml
src/MissionManager/QGCMapPolygonVisuals.qml
+1
-5
StructureScanComplexItem.cc
src/MissionManager/StructureScanComplexItem.cc
+8
-8
StructureScanComplexItem.h
src/MissionManager/StructureScanComplexItem.h
+1
-1
StructureScanComplexItemTest.cc
src/MissionManager/StructureScanComplexItemTest.cc
+4
-4
CameraCalc.qml
src/PlanView/CameraCalc.qml
+12
-39
StructureScanEditor.qml
src/PlanView/StructureScanEditor.qml
+1
-1
No files found.
src/MissionManager/CameraCalc.cc
View file @
e6718b14
...
@@ -21,14 +21,14 @@ const char* CameraCalc::_frontalOverlapName = "FrontalOverlap";
...
@@ -21,14 +21,14 @@ const char* CameraCalc::_frontalOverlapName = "FrontalOverlap";
const
char
*
CameraCalc
::
_sideOverlapName
=
"SideOverlap"
;
const
char
*
CameraCalc
::
_sideOverlapName
=
"SideOverlap"
;
const
char
*
CameraCalc
::
_adjustedFootprintFrontalName
=
"AdjustedFootprintFrontal"
;
const
char
*
CameraCalc
::
_adjustedFootprintFrontalName
=
"AdjustedFootprintFrontal"
;
const
char
*
CameraCalc
::
_adjustedFootprintSideName
=
"AdjustedFootprintSide"
;
const
char
*
CameraCalc
::
_adjustedFootprintSideName
=
"AdjustedFootprintSide"
;
const
char
*
CameraCalc
::
_jsonCameraNameKey
=
"CameraName"
;
const
char
*
CameraCalc
::
_jsonCameraSpecTypeKey
=
"CameraSpecType"
;
const
char
*
CameraCalc
::
_jsonCameraSpecTypeKey
=
"CameraSpecType"
;
const
char
*
CameraCalc
::
_jsonKnownCameraNameKey
=
"CameraName"
;
CameraCalc
::
CameraCalc
(
Vehicle
*
vehicle
,
QObject
*
parent
)
CameraCalc
::
CameraCalc
(
Vehicle
*
vehicle
,
QObject
*
parent
)
:
CameraSpec
(
parent
)
:
CameraSpec
(
parent
)
,
_vehicle
(
vehicle
)
,
_vehicle
(
vehicle
)
,
_dirty
(
false
)
,
_dirty
(
false
)
,
_camera
SpecType
(
CameraSpecNone
)
,
_camera
Name
(
manualCameraName
()
)
,
_disableRecalc
(
false
)
,
_disableRecalc
(
false
)
,
_metaDataMap
(
FactMetaData
::
createMapFromJsonFile
(
QStringLiteral
(
":/json/CameraCalc.FactMetaData.json"
),
this
))
,
_metaDataMap
(
FactMetaData
::
createMapFromJsonFile
(
QStringLiteral
(
":/json/CameraCalc.FactMetaData.json"
),
this
))
,
_valueSetIsDistanceFact
(
0
,
_valueSetIsDistanceName
,
FactMetaData
::
valueTypeBool
)
,
_valueSetIsDistanceFact
(
0
,
_valueSetIsDistanceName
,
FactMetaData
::
valueTypeBool
)
...
@@ -52,9 +52,7 @@ CameraCalc::CameraCalc(Vehicle* vehicle, QObject* parent)
...
@@ -52,9 +52,7 @@ CameraCalc::CameraCalc(Vehicle* vehicle, QObject* parent)
_adjustedFootprintSideFact
.
setMetaData
(
_metaDataMap
[
_adjustedFootprintSideName
],
true
);
_adjustedFootprintSideFact
.
setMetaData
(
_metaDataMap
[
_adjustedFootprintSideName
],
true
);
_adjustedFootprintFrontalFact
.
setMetaData
(
_metaDataMap
[
_adjustedFootprintFrontalName
],
true
);
_adjustedFootprintFrontalFact
.
setMetaData
(
_metaDataMap
[
_adjustedFootprintFrontalName
],
true
);
connect
(
this
,
&
CameraCalc
::
knownCameraNameChanged
,
this
,
&
CameraCalc
::
_knownCameraNameChanged
);
connect
(
this
,
&
CameraCalc
::
cameraNameChanged
,
this
,
&
CameraCalc
::
_recalcTriggerDistance
);
connect
(
this
,
&
CameraCalc
::
cameraSpecTypeChanged
,
this
,
&
CameraCalc
::
_recalcTriggerDistance
);
connect
(
&
_distanceToSurfaceFact
,
&
Fact
::
rawValueChanged
,
this
,
&
CameraCalc
::
_recalcTriggerDistance
);
connect
(
&
_distanceToSurfaceFact
,
&
Fact
::
rawValueChanged
,
this
,
&
CameraCalc
::
_recalcTriggerDistance
);
connect
(
&
_imageDensityFact
,
&
Fact
::
rawValueChanged
,
this
,
&
CameraCalc
::
_recalcTriggerDistance
);
connect
(
&
_imageDensityFact
,
&
Fact
::
rawValueChanged
,
this
,
&
CameraCalc
::
_recalcTriggerDistance
);
...
@@ -73,59 +71,57 @@ void CameraCalc::setDirty(bool dirty)
...
@@ -73,59 +71,57 @@ void CameraCalc::setDirty(bool dirty)
}
}
}
}
void
CameraCalc
::
setCameraSpecType
(
CameraSpecType
cameraSpecType
)
void
CameraCalc
::
setCameraName
(
QString
cameraName
)
{
if
(
cameraSpecType
!=
_cameraSpecType
)
{
_cameraSpecType
=
cameraSpecType
;
emit
cameraSpecTypeChanged
(
_cameraSpecType
);
}
}
void
CameraCalc
::
setKnownCameraName
(
QString
knownCameraName
)
{
if
(
knownCameraName
!=
_knownCameraName
)
{
_knownCameraName
=
knownCameraName
;
emit
knownCameraNameChanged
(
_knownCameraName
);
}
}
void
CameraCalc
::
_knownCameraNameChanged
(
QString
knownCameraName
)
{
{
if
(
_cameraSpecType
==
CameraSpecKnown
)
{
if
(
cameraName
!=
_cameraName
)
{
CameraMetaData
*
cameraMetaData
=
NULL
;
_cameraName
=
cameraName
;
// Update camera specs to new camera
if
(
_cameraName
==
manualCameraName
()
||
_cameraName
==
customCameraName
())
{
for
(
int
cameraIndex
=
0
;
cameraIndex
<
_knownCameraList
.
count
();
cameraIndex
++
)
{
// These values are unknown for these types
cameraMetaData
=
_knownCameraList
[
cameraIndex
].
value
<
CameraMetaData
*>
();
fixedOrientation
()
->
setRawValue
(
false
);
if
(
knownCameraName
==
cameraMetaData
->
name
())
{
minTriggerInterval
()
->
setRawValue
(
0
);
break
;
if
(
_cameraName
==
manualCameraName
())
{
valueSetIsDistance
()
->
setRawValue
(
false
);
}
}
}
_disableRecalc
=
true
;
if
(
cameraMetaData
)
{
sensorWidth
()
->
setRawValue
(
cameraMetaData
->
sensorWidth
());
sensorHeight
()
->
setRawValue
(
cameraMetaData
->
sensorHeight
());
imageWidth
()
->
setRawValue
(
cameraMetaData
->
imageWidth
());
imageHeight
()
->
setRawValue
(
cameraMetaData
->
imageHeight
());
focalLength
()
->
setRawValue
(
cameraMetaData
->
focalLength
());
landscape
()
->
setRawValue
(
cameraMetaData
->
landscape
());
fixedOrientation
()
->
setRawValue
(
cameraMetaData
->
fixedOrientation
());
minTriggerInterval
()
->
setRawValue
(
cameraMetaData
->
minTriggerInterval
());
}
else
{
}
else
{
// We don't know this camera, switch back to custom
// This should be a known camera name. Update camera specs to new camera
_cameraSpecType
=
CameraSpecCustom
;
emit
cameraSpecTypeChanged
(
_cameraSpecType
);
bool
foundKnownCamera
=
false
;
CameraMetaData
*
cameraMetaData
=
NULL
;
for
(
int
cameraIndex
=
0
;
cameraIndex
<
_knownCameraList
.
count
();
cameraIndex
++
)
{
cameraMetaData
=
_knownCameraList
[
cameraIndex
].
value
<
CameraMetaData
*>
();
if
(
cameraName
==
cameraMetaData
->
name
())
{
foundKnownCamera
=
true
;
break
;
}
}
_disableRecalc
=
true
;
if
(
foundKnownCamera
)
{
sensorWidth
()
->
setRawValue
(
cameraMetaData
->
sensorWidth
());
sensorHeight
()
->
setRawValue
(
cameraMetaData
->
sensorHeight
());
imageWidth
()
->
setRawValue
(
cameraMetaData
->
imageWidth
());
imageHeight
()
->
setRawValue
(
cameraMetaData
->
imageHeight
());
focalLength
()
->
setRawValue
(
cameraMetaData
->
focalLength
());
landscape
()
->
setRawValue
(
cameraMetaData
->
landscape
());
fixedOrientation
()
->
setRawValue
(
cameraMetaData
->
fixedOrientation
());
minTriggerInterval
()
->
setRawValue
(
cameraMetaData
->
minTriggerInterval
());
}
else
{
// We don't know this camera, switch back to custom
_cameraName
=
customCameraName
();
fixedOrientation
()
->
setRawValue
(
false
);
minTriggerInterval
()
->
setRawValue
(
0
);
}
_disableRecalc
=
false
;
}
}
_disableRecalc
=
false
;
_recalcTriggerDistance
(
);
emit
cameraNameChanged
(
_cameraName
);
}
}
}
}
void
CameraCalc
::
_recalcTriggerDistance
(
void
)
void
CameraCalc
::
_recalcTriggerDistance
(
void
)
{
{
if
(
_disableRecalc
||
_camera
SpecType
==
CameraSpecNone
)
{
if
(
_disableRecalc
||
_camera
Name
==
manualCameraName
()
)
{
return
;
return
;
}
}
...
@@ -168,14 +164,14 @@ void CameraCalc::_recalcTriggerDistance(void)
...
@@ -168,14 +164,14 @@ void CameraCalc::_recalcTriggerDistance(void)
void
CameraCalc
::
save
(
QJsonObject
&
json
)
const
void
CameraCalc
::
save
(
QJsonObject
&
json
)
const
{
{
json
[
_jsonCameraSpecTypeKey
]
=
(
int
)
_cameraSpecType
;
json
[
JsonHelper
::
jsonVersionKey
]
=
1
;
json
[
_adjustedFootprintSideName
]
=
_adjustedFootprintSideFact
.
rawValue
().
toDouble
();
json
[
_adjustedFootprintSideName
]
=
_adjustedFootprintSideFact
.
rawValue
().
toDouble
();
json
[
_adjustedFootprintFrontalName
]
=
_adjustedFootprintFrontalFact
.
rawValue
().
toDouble
();
json
[
_adjustedFootprintFrontalName
]
=
_adjustedFootprintFrontalFact
.
rawValue
().
toDouble
();
json
[
_distanceToSurfaceName
]
=
_distanceToSurfaceFact
.
rawValue
().
toDouble
();
json
[
_distanceToSurfaceName
]
=
_distanceToSurfaceFact
.
rawValue
().
toDouble
();
json
[
_jsonCameraNameKey
]
=
_cameraName
;
if
(
_camera
SpecType
!=
CameraSpecNone
)
{
if
(
_camera
Name
!=
manualCameraName
()
)
{
CameraSpec
::
save
(
json
);
CameraSpec
::
save
(
json
);
json
[
_jsonKnownCameraNameKey
]
=
_knownCameraName
;
json
[
_valueSetIsDistanceName
]
=
_valueSetIsDistanceFact
.
rawValue
().
toBool
();
json
[
_valueSetIsDistanceName
]
=
_valueSetIsDistanceFact
.
rawValue
().
toBool
();
json
[
_imageDensityName
]
=
_imageDensityFact
.
rawValue
().
toDouble
();
json
[
_imageDensityName
]
=
_imageDensityFact
.
rawValue
().
toDouble
();
json
[
_frontalOverlapName
]
=
_frontalOverlapFact
.
rawValue
().
toDouble
();
json
[
_frontalOverlapName
]
=
_frontalOverlapFact
.
rawValue
().
toDouble
();
...
@@ -184,55 +180,65 @@ void CameraCalc::save(QJsonObject& json) const
...
@@ -184,55 +180,65 @@ void CameraCalc::save(QJsonObject& json) const
}
}
bool
CameraCalc
::
load
(
const
QJsonObject
&
json
,
QString
&
errorString
)
bool
CameraCalc
::
load
(
const
QJsonObject
&
json
,
QString
&
errorString
)
{
{
QJsonObject
v1Json
=
json
;
if
(
!
v1Json
.
contains
(
JsonHelper
::
jsonVersionKey
))
{
// Version 0 file. Differences from Version 1 for conversion:
// JsonHelper::jsonVersionKey not stored
// _jsonCameraSpecTypeKey stores CameraSpecType
// _jsonCameraNameKey only set if CameraSpecKnown
int
cameraSpec
=
v1Json
[
_jsonCameraSpecTypeKey
].
toInt
(
CameraSpecNone
);
if
(
cameraSpec
==
CameraSpecCustom
)
{
v1Json
[
_jsonCameraNameKey
]
=
customCameraName
();
}
else
if
(
cameraSpec
==
CameraSpecNone
)
{
v1Json
[
_jsonCameraNameKey
]
=
manualCameraName
();
}
v1Json
.
remove
(
_jsonCameraSpecTypeKey
);
v1Json
[
JsonHelper
::
jsonVersionKey
]
=
1
;
}
int
version
=
v1Json
[
JsonHelper
::
jsonVersionKey
].
toInt
();
if
(
version
!=
1
)
{
errorString
=
tr
(
"CameraCalc section version %1 not supported"
).
arg
(
version
);
return
false
;
}
QList
<
JsonHelper
::
KeyValidateInfo
>
keyInfoList1
=
{
QList
<
JsonHelper
::
KeyValidateInfo
>
keyInfoList1
=
{
{
_jsonCamera
SpecTypeKey
,
QJsonValue
::
Double
,
true
},
{
_jsonCamera
NameKey
,
QJsonValue
::
String
,
true
},
{
_adjustedFootprintSideName
,
QJsonValue
::
Double
,
true
},
{
_adjustedFootprintSideName
,
QJsonValue
::
Double
,
true
},
{
_adjustedFootprintFrontalName
,
QJsonValue
::
Double
,
true
},
{
_adjustedFootprintFrontalName
,
QJsonValue
::
Double
,
true
},
{
_distanceToSurfaceName
,
QJsonValue
::
Double
,
true
},
{
_distanceToSurfaceName
,
QJsonValue
::
Double
,
true
},
};
};
if
(
!
JsonHelper
::
validateKeys
(
json
,
keyInfoList1
,
errorString
))
{
if
(
!
JsonHelper
::
validateKeys
(
v1Json
,
keyInfoList1
,
errorString
))
{
return
false
;
}
int
cameraSpecType
=
json
[
_jsonCameraSpecTypeKey
].
toInt
();
switch
(
cameraSpecType
)
{
case
CameraSpecNone
:
case
CameraSpecCustom
:
case
CameraSpecKnown
:
break
;
default:
errorString
=
tr
(
"Unsupported CameraSpecType %d"
).
arg
(
cameraSpecType
);
return
false
;
return
false
;
}
}
_disableRecalc
=
true
;
_disableRecalc
=
true
;
setCamera
SpecType
((
CameraSpecType
)
cameraSpecType
);
setCamera
Name
(
v1Json
[
_jsonCameraNameKey
].
toString
()
);
_adjustedFootprintSideFact
.
setRawValue
(
j
son
[
_adjustedFootprintSideName
].
toDouble
());
_adjustedFootprintSideFact
.
setRawValue
(
v1J
son
[
_adjustedFootprintSideName
].
toDouble
());
_adjustedFootprintFrontalFact
.
setRawValue
(
j
son
[
_adjustedFootprintFrontalName
].
toDouble
());
_adjustedFootprintFrontalFact
.
setRawValue
(
v1J
son
[
_adjustedFootprintFrontalName
].
toDouble
());
_distanceToSurfaceFact
.
setRawValue
(
j
son
[
_distanceToSurfaceName
].
toDouble
());
_distanceToSurfaceFact
.
setRawValue
(
v1J
son
[
_distanceToSurfaceName
].
toDouble
());
if
(
_camera
SpecType
!=
CameraSpecNone
)
{
if
(
_camera
Name
!=
manualCameraName
()
)
{
QList
<
JsonHelper
::
KeyValidateInfo
>
keyInfoList2
=
{
QList
<
JsonHelper
::
KeyValidateInfo
>
keyInfoList2
=
{
{
_jsonKnownCameraNameKey
,
QJsonValue
::
String
,
true
},
{
_valueSetIsDistanceName
,
QJsonValue
::
Bool
,
true
},
{
_valueSetIsDistanceName
,
QJsonValue
::
Bool
,
true
},
{
_imageDensityName
,
QJsonValue
::
Double
,
true
},
{
_imageDensityName
,
QJsonValue
::
Double
,
true
},
{
_frontalOverlapName
,
QJsonValue
::
Double
,
true
},
{
_frontalOverlapName
,
QJsonValue
::
Double
,
true
},
{
_sideOverlapName
,
QJsonValue
::
Double
,
true
},
{
_sideOverlapName
,
QJsonValue
::
Double
,
true
},
};
};
if
(
!
JsonHelper
::
validateKeys
(
j
son
,
keyInfoList2
,
errorString
))
{
if
(
!
JsonHelper
::
validateKeys
(
v1J
son
,
keyInfoList2
,
errorString
))
{
return
false
;
return
false
;
_disableRecalc
=
false
;
_disableRecalc
=
false
;
}
}
setKnownCameraName
(
json
[
_jsonKnownCameraNameKey
].
toString
());
_valueSetIsDistanceFact
.
setRawValue
(
v1Json
[
_valueSetIsDistanceName
].
toBool
());
_valueSetIsDistanceFact
.
setRawValue
(
json
[
_valueSetIsDistanceName
].
toBool
());
_imageDensityFact
.
setRawValue
(
v1Json
[
_imageDensityName
].
toDouble
());
_imageDensityFact
.
setRawValue
(
json
[
_imageDensityName
].
toDouble
());
_frontalOverlapFact
.
setRawValue
(
v1Json
[
_frontalOverlapName
].
toDouble
());
_frontalOverlapFact
.
setRawValue
(
json
[
_frontalOverlapName
].
toDouble
());
_sideOverlapFact
.
setRawValue
(
v1Json
[
_sideOverlapName
].
toDouble
());
_sideOverlapFact
.
setRawValue
(
json
[
_sideOverlapName
].
toDouble
());
if
(
!
CameraSpec
::
load
(
j
son
,
errorString
))
{
if
(
!
CameraSpec
::
load
(
v1J
son
,
errorString
))
{
return
false
;
return
false
;
}
}
}
}
...
@@ -241,3 +247,13 @@ bool CameraCalc::load(const QJsonObject& json, QString& errorString)
...
@@ -241,3 +247,13 @@ bool CameraCalc::load(const QJsonObject& json, QString& errorString)
return
true
;
return
true
;
}
}
QString
CameraCalc
::
customCameraName
(
void
)
{
return
tr
(
"Custom Camera"
);
}
QString
CameraCalc
::
manualCameraName
(
void
)
{
return
tr
(
"Manual (no camera specs)"
);
}
src/MissionManager/CameraCalc.h
View file @
e6718b14
...
@@ -20,32 +20,25 @@ class CameraCalc : public CameraSpec
...
@@ -20,32 +20,25 @@ class CameraCalc : public CameraSpec
public:
public:
CameraCalc
(
Vehicle
*
vehicle
,
QObject
*
parent
=
NULL
);
CameraCalc
(
Vehicle
*
vehicle
,
QObject
*
parent
=
NULL
);
Q_ENUMS
(
CameraSpecType
)
Q_PROPERTY
(
QString
cameraName
READ
cameraName
WRITE
setCameraName
NOTIFY
cameraNameChanged
)
Q_PROPERTY
(
QString
customCameraName
READ
customCameraName
CONSTANT
)
// Camera name for custom camera setting
Q_PROPERTY
(
CameraSpecType
cameraSpecType
READ
cameraSpecType
WRITE
setCameraSpecType
NOTIFY
cameraSpecTypeChanged
)
Q_PROPERTY
(
QString
manualCameraName
READ
manualCameraName
CONSTANT
)
// Camera name for manual camera setting
Q_PROPERTY
(
QString
knownCameraName
READ
knownCameraName
WRITE
setKnownCameraName
NOTIFY
knownCameraNameChanged
)
Q_PROPERTY
(
Fact
*
valueSetIsDistance
READ
valueSetIsDistance
CONSTANT
)
///< true: distance specified, resolution calculated
Q_PROPERTY
(
Fact
*
valueSetIsDistance
READ
valueSetIsDistance
CONSTANT
)
///< true: distance specified, resolution calculated
Q_PROPERTY
(
Fact
*
distanceToSurface
READ
distanceToSurface
CONSTANT
)
///< Distance to surface for image foot print calculation
Q_PROPERTY
(
Fact
*
distanceToSurface
READ
distanceToSurface
CONSTANT
)
///< Distance to surface for image foot print calculation
Q_PROPERTY
(
Fact
*
imageDensity
READ
imageDensity
CONSTANT
)
///< Image density on surface (cm/px)
Q_PROPERTY
(
Fact
*
imageDensity
READ
imageDensity
CONSTANT
)
///< Image density on surface (cm/px)
Q_PROPERTY
(
Fact
*
frontalOverlap
READ
frontalOverlap
CONSTANT
)
Q_PROPERTY
(
Fact
*
frontalOverlap
READ
frontalOverlap
CONSTANT
)
Q_PROPERTY
(
Fact
*
sideOverlap
READ
sideOverlap
CONSTANT
)
Q_PROPERTY
(
Fact
*
sideOverlap
READ
sideOverlap
CONSTANT
)
Q_PROPERTY
(
Fact
*
adjustedFootprintSide
READ
adjustedFootprintSide
CONSTANT
)
///< Side footprint adjusted down for overlap
Q_PROPERTY
(
Fact
*
adjustedFootprintSide
READ
adjustedFootprintSide
CONSTANT
)
///< Side footprint adjusted down for overlap
Q_PROPERTY
(
Fact
*
adjustedFootprintFrontal
READ
adjustedFootprintFrontal
CONSTANT
)
///< Frontal footprint adjusted down for overlap
Q_PROPERTY
(
Fact
*
adjustedFootprintFrontal
READ
adjustedFootprintFrontal
CONSTANT
)
///< Frontal footprint adjusted down for overlap
// The following values are calculated from the camera properties
// The following values are calculated from the camera properties
Q_PROPERTY
(
double
imageFootprintSide
READ
imageFootprintSide
NOTIFY
imageFootprintSideChanged
)
///< Size of image size side in meters
Q_PROPERTY
(
double
imageFootprintSide
READ
imageFootprintSide
NOTIFY
imageFootprintSideChanged
)
///< Size of image size side in meters
Q_PROPERTY
(
double
imageFootprintFrontal
READ
imageFootprintFrontal
NOTIFY
imageFootprintFrontalChanged
)
///< Size of image size frontal in meters
Q_PROPERTY
(
double
imageFootprintFrontal
READ
imageFootprintFrontal
NOTIFY
imageFootprintFrontalChanged
)
///< Size of image size frontal in meters
enum
CameraSpecType
{
static
QString
customCameraName
(
void
);
CameraSpecNone
,
static
QString
manualCameraName
(
void
);
CameraSpecCustom
,
QString
cameraName
(
void
)
const
{
return
_cameraName
;
}
CameraSpecKnown
void
setCameraName
(
QString
cameraName
);
};
CameraSpecType
cameraSpecType
(
void
)
const
{
return
_cameraSpecType
;
}
QString
knownCameraName
(
void
)
const
{
return
_knownCameraName
;
}
void
setCameraSpecType
(
CameraSpecType
cameraSpecType
);
void
setKnownCameraName
(
QString
knownCameraName
);
Fact
*
valueSetIsDistance
(
void
)
{
return
&
_valueSetIsDistanceFact
;
}
Fact
*
valueSetIsDistance
(
void
)
{
return
&
_valueSetIsDistanceFact
;
}
Fact
*
distanceToSurface
(
void
)
{
return
&
_distanceToSurfaceFact
;
}
Fact
*
distanceToSurface
(
void
)
{
return
&
_distanceToSurfaceFact
;
}
...
@@ -65,21 +58,18 @@ public:
...
@@ -65,21 +58,18 @@ public:
bool
load
(
const
QJsonObject
&
json
,
QString
&
errorString
);
bool
load
(
const
QJsonObject
&
json
,
QString
&
errorString
);
signals:
signals:
void
cameraSpecTypeChanged
(
CameraSpecType
cameraSpecType
);
void
cameraNameChanged
(
QString
cameraName
);
void
knownCameraNameChanged
(
QString
knownCameraName
);
void
dirtyChanged
(
bool
dirty
);
void
dirtyChanged
(
bool
dirty
);
void
imageFootprintSideChanged
(
double
imageFootprintSide
);
void
imageFootprintSideChanged
(
double
imageFootprintSide
);
void
imageFootprintFrontalChanged
(
double
imageFootprintFrontal
);
void
imageFootprintFrontalChanged
(
double
imageFootprintFrontal
);
private
slots
:
private
slots
:
void
_knownCameraNameChanged
(
QString
knownCameraName
);
void
_recalcTriggerDistance
(
void
);
void
_recalcTriggerDistance
(
void
);
private:
private:
Vehicle
*
_vehicle
;
Vehicle
*
_vehicle
;
bool
_dirty
;
bool
_dirty
;
CameraSpecType
_cameraSpecType
;
QString
_cameraName
;
QString
_knownCameraName
;
bool
_disableRecalc
;
bool
_disableRecalc
;
QMap
<
QString
,
FactMetaData
*>
_metaDataMap
;
QMap
<
QString
,
FactMetaData
*>
_metaDataMap
;
...
@@ -104,6 +94,15 @@ private:
...
@@ -104,6 +94,15 @@ private:
static
const
char
*
_sideOverlapName
;
static
const
char
*
_sideOverlapName
;
static
const
char
*
_adjustedFootprintSideName
;
static
const
char
*
_adjustedFootprintSideName
;
static
const
char
*
_adjustedFootprintFrontalName
;
static
const
char
*
_adjustedFootprintFrontalName
;
static
const
char
*
_jsonCameraNameKey
;
// The following are deprecated usage and only included in order to convert older formats
enum
CameraSpecType
{
CameraSpecNone
,
CameraSpecCustom
,
CameraSpecKnown
};
static
const
char
*
_jsonCameraSpecTypeKey
;
static
const
char
*
_jsonCameraSpecTypeKey
;
static
const
char
*
_jsonKnownCameraNameKey
;
};
};
src/MissionManager/MissionController.h
View file @
e6718b14
...
@@ -125,7 +125,7 @@ public:
...
@@ -125,7 +125,7 @@ public:
bool
loadTextFile
(
QFile
&
file
,
QString
&
errorString
);
bool
loadTextFile
(
QFile
&
file
,
QString
&
errorString
);
// Overrides from PlanElementController
// Overrides from PlanElementController
bool
supported
(
void
)
const
final
{
return
true
;
}
;
bool
supported
(
void
)
const
final
{
return
true
;
}
void
start
(
bool
editMode
)
final
;
void
start
(
bool
editMode
)
final
;
void
save
(
QJsonObject
&
json
)
final
;
void
save
(
QJsonObject
&
json
)
final
;
bool
load
(
const
QJsonObject
&
json
,
QString
&
errorString
)
final
;
bool
load
(
const
QJsonObject
&
json
,
QString
&
errorString
)
final
;
...
...
src/MissionManager/PlanMasterController.cc
View file @
e6718b14
...
@@ -273,7 +273,7 @@ void PlanMasterController::sendToVehicle(void)
...
@@ -273,7 +273,7 @@ void PlanMasterController::sendToVehicle(void)
void
PlanMasterController
::
loadFromFile
(
const
QString
&
filename
)
void
PlanMasterController
::
loadFromFile
(
const
QString
&
filename
)
{
{
QString
errorString
;
QString
errorString
;
QString
errorMessage
=
tr
(
"Error
re
ading Plan file (%1). %2"
).
arg
(
filename
).
arg
(
"%1"
);
QString
errorMessage
=
tr
(
"Error
lo
ading Plan file (%1). %2"
).
arg
(
filename
).
arg
(
"%1"
);
if
(
filename
.
isEmpty
())
{
if
(
filename
.
isEmpty
())
{
return
;
return
;
...
...
src/MissionManager/QGCMapPolygonVisuals.qml
View file @
e6718b14
...
@@ -148,10 +148,6 @@ Item {
...
@@ -148,10 +148,6 @@ Item {
setCircleRadius
(
center
,
radius
)
setCircleRadius
(
center
,
radius
)
}
}
function
loadKMLFile
()
{
mapPolygon
.
loadKMLFile
(
"
/Users/Don/Downloads/polygon.kml
"
)
}
onInteractiveChanged
:
{
onInteractiveChanged
:
{
if
(
interactive
)
{
if
(
interactive
)
{
addHandles
()
addHandles
()
...
@@ -418,7 +414,7 @@ Item {
...
@@ -418,7 +414,7 @@ Item {
MenuItem
{
MenuItem
{
text
:
qsTr
(
"
Set radius...
"
)
text
:
qsTr
(
"
Set radius...
"
)
enabled
:
_circle
visible
:
_circle
onTriggered
:
radiusDialog
.
visible
=
true
onTriggered
:
radiusDialog
.
visible
=
true
}
}
...
...
src/MissionManager/StructureScanComplexItem.cc
View file @
e6718b14
...
@@ -87,7 +87,7 @@ StructureScanComplexItem::StructureScanComplexItem(Vehicle* vehicle, QObject* pa
...
@@ -87,7 +87,7 @@ StructureScanComplexItem::StructureScanComplexItem(Vehicle* vehicle, QObject* pa
connect
(
&
_flightPolygon
,
&
QGCMapPolygon
::
pathChanged
,
this
,
&
StructureScanComplexItem
::
_flightPathChanged
);
connect
(
&
_flightPolygon
,
&
QGCMapPolygon
::
pathChanged
,
this
,
&
StructureScanComplexItem
::
_flightPathChanged
);
connect
(
_cameraCalc
.
distanceToSurface
(),
&
Fact
::
valueChanged
,
this
,
&
StructureScanComplexItem
::
_rebuildFlightPolygon
);
connect
(
_cameraCalc
.
distanceToSurface
(),
&
Fact
::
valueChanged
,
this
,
&
StructureScanComplexItem
::
_rebuildFlightPolygon
);
connect
(
&
_cameraCalc
,
&
CameraCalc
::
camera
SpecTypeChanged
,
this
,
&
StructureScanComplexItem
::
_cameraSpecTypeChanged
);
connect
(
&
_cameraCalc
,
&
CameraCalc
::
camera
NameChanged
,
this
,
&
StructureScanComplexItem
::
_resetGimbal
);
connect
(
&
_flightPolygon
,
&
QGCMapPolygon
::
pathChanged
,
this
,
&
StructureScanComplexItem
::
_recalcCameraShots
);
connect
(
&
_flightPolygon
,
&
QGCMapPolygon
::
pathChanged
,
this
,
&
StructureScanComplexItem
::
_recalcCameraShots
);
connect
(
_cameraCalc
.
adjustedFootprintSide
(),
&
Fact
::
valueChanged
,
this
,
&
StructureScanComplexItem
::
_recalcCameraShots
);
connect
(
_cameraCalc
.
adjustedFootprintSide
(),
&
Fact
::
valueChanged
,
this
,
&
StructureScanComplexItem
::
_recalcCameraShots
);
...
@@ -205,12 +205,17 @@ bool StructureScanComplexItem::load(const QJsonObject& complexObject, int sequen
...
@@ -205,12 +205,17 @@ bool StructureScanComplexItem::load(const QJsonObject& complexObject, int sequen
int
version
=
complexObject
[
JsonHelper
::
jsonVersionKey
].
toInt
();
int
version
=
complexObject
[
JsonHelper
::
jsonVersionKey
].
toInt
();
if
(
version
!=
1
)
{
if
(
version
!=
1
)
{
errorString
=
tr
(
"
Version %1 not supported"
).
arg
(
version
);
errorString
=
tr
(
"
%1 complex item version %2 not supported"
).
arg
(
jsonComplexItemTypeValue
).
arg
(
version
);
return
false
;
return
false
;
}
}
setSequenceNumber
(
sequenceNumber
);
setSequenceNumber
(
sequenceNumber
);
// Load CameraCalc first since it will trigger camera name change which will trounce gimbal angles
if
(
!
_cameraCalc
.
load
(
complexObject
[
_jsonCameraCalcKey
].
toObject
(),
errorString
))
{
return
false
;
}
_gimbalPitchFact
.
setRawValue
(
complexObject
[
_gimbalPitchFactName
].
toDouble
());
_gimbalPitchFact
.
setRawValue
(
complexObject
[
_gimbalPitchFactName
].
toDouble
());
_gimbalYawFact
.
setRawValue
(
complexObject
[
_gimbalYawFactName
].
toDouble
());
_gimbalYawFact
.
setRawValue
(
complexObject
[
_gimbalYawFactName
].
toDouble
());
_altitudeFact
.
setRawValue
(
complexObject
[
_altitudeFactName
].
toDouble
());
_altitudeFact
.
setRawValue
(
complexObject
[
_altitudeFactName
].
toDouble
());
...
@@ -218,9 +223,6 @@ bool StructureScanComplexItem::load(const QJsonObject& complexObject, int sequen
...
@@ -218,9 +223,6 @@ bool StructureScanComplexItem::load(const QJsonObject& complexObject, int sequen
_altitudeRelative
=
complexObject
[
_jsonAltitudeRelativeKey
].
toBool
(
true
);
_altitudeRelative
=
complexObject
[
_jsonAltitudeRelativeKey
].
toBool
(
true
);
_yawVehicleToStructure
=
complexObject
[
_jsonYawVehicleToStructureKey
].
toBool
(
true
);
_yawVehicleToStructure
=
complexObject
[
_jsonYawVehicleToStructureKey
].
toBool
(
true
);
if
(
!
_cameraCalc
.
load
(
complexObject
[
_jsonCameraCalcKey
].
toObject
(),
errorString
))
{
return
false
;
}
if
(
!
_structurePolygon
.
loadFromJson
(
complexObject
,
true
/* required */
,
errorString
))
{
if
(
!
_structurePolygon
.
loadFromJson
(
complexObject
,
true
/* required */
,
errorString
))
{
_structurePolygon
.
clear
();
_structurePolygon
.
clear
();
return
false
;
return
false
;
...
@@ -455,10 +457,8 @@ void StructureScanComplexItem::_recalcCameraShots(void)
...
@@ -455,10 +457,8 @@ void StructureScanComplexItem::_recalcCameraShots(void)
_setCameraShots
(
cameraShots
*
_layersFact
.
rawValue
().
toInt
());
_setCameraShots
(
cameraShots
*
_layersFact
.
rawValue
().
toInt
());
}
}
void
StructureScanComplexItem
::
_
cameraSpecTypeChanged
(
CameraCalc
::
CameraSpecType
cameraSpecType
)
void
StructureScanComplexItem
::
_
resetGimbal
(
void
)
{
{
Q_UNUSED
(
cameraSpecType
);
_gimbalPitchFact
.
setCookedValue
(
0
);
_gimbalPitchFact
.
setCookedValue
(
0
);
_gimbalYawFact
.
setCookedValue
(
90
);
_gimbalYawFact
.
setCookedValue
(
90
);
}
}
...
...
src/MissionManager/StructureScanComplexItem.h
View file @
e6718b14
...
@@ -113,7 +113,7 @@ private slots:
...
@@ -113,7 +113,7 @@ private slots:
void
_updateCoordinateAltitudes
(
void
);
void
_updateCoordinateAltitudes
(
void
);
void
_rebuildFlightPolygon
(
void
);
void
_rebuildFlightPolygon
(
void
);
void
_recalcCameraShots
(
void
);
void
_recalcCameraShots
(
void
);
void
_
cameraSpecTypeChanged
(
CameraCalc
::
CameraSpecType
cameraSpecType
);
void
_
resetGimbal
(
void
);
private:
private:
void
_setExitCoordinate
(
const
QGeoCoordinate
&
coordinate
);
void
_setExitCoordinate
(
const
QGeoCoordinate
&
coordinate
);
...
...
src/MissionManager/StructureScanComplexItemTest.cc
View file @
e6718b14
...
@@ -99,7 +99,7 @@ void StructureScanComplexItemTest::_initItem(void)
...
@@ -99,7 +99,7 @@ void StructureScanComplexItemTest::_initItem(void)
mapPolygon
->
appendVertex
(
vertex
);
mapPolygon
->
appendVertex
(
vertex
);
}
}
_structureScanItem
->
cameraCalc
()
->
setCamera
SpecType
(
CameraCalc
::
CameraSpecNone
);
_structureScanItem
->
cameraCalc
()
->
setCamera
Name
(
CameraCalc
::
manualCameraName
()
);
_structureScanItem
->
gimbalPitch
()
->
setCookedValue
(
45
);
_structureScanItem
->
gimbalPitch
()
->
setCookedValue
(
45
);
_structureScanItem
->
gimbalYaw
()
->
setCookedValue
(
45
);
_structureScanItem
->
gimbalYaw
()
->
setCookedValue
(
45
);
_structureScanItem
->
layers
()
->
setCookedValue
(
2
);
_structureScanItem
->
layers
()
->
setCookedValue
(
2
);
...
@@ -118,7 +118,7 @@ void StructureScanComplexItemTest::_validateItem(StructureScanComplexItem* item)
...
@@ -118,7 +118,7 @@ void StructureScanComplexItemTest::_validateItem(StructureScanComplexItem* item)
QCOMPARE
(
expectedVertex
,
actualVertex
);
QCOMPARE
(
expectedVertex
,
actualVertex
);
}
}
QCOMPARE
(
(
int
)
item
->
cameraCalc
()
->
cameraSpecType
(),
(
int
)
CameraCalc
::
CameraSpecNone
);
QCOMPARE
(
_structureScanItem
->
cameraCalc
()
->
cameraName
()
,
CameraCalc
::
manualCameraName
()
);
QCOMPARE
(
item
->
gimbalPitch
()
->
cookedValue
().
toDouble
(),
45.0
);
QCOMPARE
(
item
->
gimbalPitch
()
->
cookedValue
().
toDouble
(),
45.0
);
QCOMPARE
(
item
->
gimbalYaw
()
->
cookedValue
().
toDouble
(),
45.0
);
QCOMPARE
(
item
->
gimbalYaw
()
->
cookedValue
().
toDouble
(),
45.0
);
QCOMPARE
(
item
->
layers
()
->
cookedValue
().
toInt
(),
2
);
QCOMPARE
(
item
->
layers
()
->
cookedValue
().
toInt
(),
2
);
...
@@ -144,8 +144,8 @@ void StructureScanComplexItemTest::_testGimbalAngleUpdate(void)
...
@@ -144,8 +144,8 @@ void StructureScanComplexItemTest::_testGimbalAngleUpdate(void)
// This sets the item to CameraCalc::CameraSpecNone and non-standard gimbal angles
// This sets the item to CameraCalc::CameraSpecNone and non-standard gimbal angles
_initItem
();
_initItem
();
// Switching to a camera specific setup should set gimbal angles to defaults
surface scan
// Switching to a camera specific setup should set gimbal angles to defaults
_structureScanItem
->
cameraCalc
()
->
setCamera
SpecType
(
CameraCalc
::
CameraSpecCustom
);
_structureScanItem
->
cameraCalc
()
->
setCamera
Name
(
CameraCalc
::
customCameraName
()
);
QCOMPARE
(
_structureScanItem
->
gimbalPitch
()
->
cookedValue
().
toDouble
(),
0.0
);
QCOMPARE
(
_structureScanItem
->
gimbalPitch
()
->
cookedValue
().
toDouble
(),
0.0
);
QCOMPARE
(
_structureScanItem
->
gimbalYaw
()
->
cookedValue
().
toDouble
(),
90.0
);
QCOMPARE
(
_structureScanItem
->
gimbalYaw
()
->
cookedValue
().
toDouble
(),
90.0
);
}
}
...
...
src/PlanView/CameraCalc.qml
View file @
e6718b14
...
@@ -23,7 +23,7 @@ Column {
...
@@ -23,7 +23,7 @@ Column {
property
real
_margin
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
real
_margin
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
int
_cameraIndex
:
1
property
int
_cameraIndex
:
1
property
real
_fieldWidth
:
ScreenTools
.
defaultFontPixelWidth
*
10.5
property
real
_fieldWidth
:
ScreenTools
.
defaultFontPixelWidth
*
10.5
property
var
_cameraList
:
[
qsTr
(
"
Manual (no camera specs)
"
),
qsTr
(
"
Custom Camera
"
)
]
property
var
_cameraList
:
[
]
property
var
_vehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
?
QGroundControl
.
multiVehicleManager
.
activeVehicle
:
QGroundControl
.
multiVehicleManager
.
offlineEditingVehicle
property
var
_vehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
?
QGroundControl
.
multiVehicleManager
.
activeVehicle
:
QGroundControl
.
multiVehicleManager
.
offlineEditingVehicle
property
var
_vehicleCameraList
:
_vehicle
?
_vehicle
.
staticCameraList
:
[]
property
var
_vehicleCameraList
:
_vehicle
?
_vehicle
.
staticCameraList
:
[]
...
@@ -32,31 +32,18 @@ Column {
...
@@ -32,31 +32,18 @@ Column {
readonly
property
int
_gridTypeCamera
:
2
readonly
property
int
_gridTypeCamera
:
2
Component.onCompleted
:
{
Component.onCompleted
:
{
_cameraList
.
push
(
cameraCalc
.
manualCameraName
)
_cameraList
.
push
(
cameraCalc
.
customCameraName
)
for
(
var
i
=
0
;
i
<
_vehicle
.
staticCameraList
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
_vehicle
.
staticCameraList
.
length
;
i
++
)
{
_cameraList
.
push
(
_vehicle
.
staticCameraList
[
i
].
name
)
_cameraList
.
push
(
_vehicle
.
staticCameraList
[
i
].
name
)
}
}
gridTypeCombo
.
model
=
_cameraList
gridTypeCombo
.
model
=
_cameraList
if
(
cameraCalc
.
cameraSpecType
===
CameraCalc
.
CameraSpecNone
)
{
var
knownCameraIndex
=
gridTypeCombo
.
find
(
cameraCalc
.
cameraName
)
gridTypeCombo
.
currentIndex
=
_gridTypeManual
if
(
knownCameraIndex
!=
-
1
)
{
gridTypeCombo
.
currentIndex
=
knownCameraIndex
}
else
{
}
else
{
var
index
=
-
1
console
.
log
(
"
Internal error: Known camera not found
"
,
cameraCalc
.
cameraName
)
for
(
index
=
0
;
index
<
_cameraList
.
length
;
index
++
)
{
gridTypeCombo
.
currentIndex
=
_gridTypeCustomCamera
if
(
_cameraList
[
index
]
==
cameraCalc
.
knownCameraName
)
{
break
;
}
}
cameraCalc
.
fixedOrientation
.
value
=
false
if
(
index
==
_cameraList
.
length
)
{
gridTypeCombo
.
currentIndex
=
_gridTypeCustomCamera
}
else
{
gridTypeCombo
.
currentIndex
=
index
if
(
index
!=
1
)
{
// Specific camera is selected
var
camera
=
_vehicleCameraList
[
index
-
_gridTypeCamera
]
cameraCalc
.
fixedOrientation
.
value
=
camera
.
fixedOrientation
cameraCalc
.
minTriggerInterval
.
value
=
camera
.
minTriggerInterval
}
}
}
}
}
}
...
@@ -86,21 +73,7 @@ Column {
...
@@ -86,21 +73,7 @@ Column {
anchors.right
:
parent
.
right
anchors.right
:
parent
.
right
model
:
_cameraList
model
:
_cameraList
currentIndex
:
-
1
currentIndex
:
-
1
onActivated
:
cameraCalc
.
cameraName
=
gridTypeCombo
.
textAt
(
index
)
onActivated
:
{
if
(
index
==
_gridTypeManual
)
{
cameraCalc
.
cameraSpecType
=
CameraCalc
.
CameraSpecNone
cameraCalc
.
valueSetIsDistance
.
value
=
false
}
else
if
(
index
==
_gridTypeCustomCamera
)
{
cameraCalc
.
cameraSpecType
=
CameraCalc
.
CameraSpecCustom
cameraCalc
.
knownCameraName
=
gridTypeCombo
.
textAt
(
index
)
cameraCalc
.
fixedOrientation
.
value
=
false
cameraCalc
.
minTriggerInterval
.
value
=
0
}
else
{
cameraCalc
.
cameraSpecType
=
CameraCalc
.
CameraSpecKnown
cameraCalc
.
knownCameraName
=
gridTypeCombo
.
textAt
(
index
)
}
}
}
// QGCComboxBox
}
// QGCComboxBox
// Camera based grid ui
// Camera based grid ui
...
@@ -108,7 +81,7 @@ Column {
...
@@ -108,7 +81,7 @@ Column {
anchors.left
:
parent
.
left
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
anchors.right
:
parent
.
right
spacing
:
_margin
spacing
:
_margin
visible
:
cameraCalc
.
camera
SpecType
!==
CameraCalc
.
CameraSpecNon
e
visible
:
cameraCalc
.
camera
Name
!==
cameraCalc
.
manualCameraNam
e
Row
{
Row
{
spacing
:
_margin
spacing
:
_margin
...
@@ -138,7 +111,7 @@ Column {
...
@@ -138,7 +111,7 @@ Column {
anchors.left
:
parent
.
left
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
anchors.right
:
parent
.
right
spacing
:
_margin
spacing
:
_margin
visible
:
cameraCalc
.
camera
SpecType
===
CameraCalc
.
CameraSpecCustom
visible
:
cameraCalc
.
camera
Name
===
cameraCalc
.
customCameraName
RowLayout
{
RowLayout
{
anchors.left
:
parent
.
left
anchors.left
:
parent
.
left
...
@@ -306,7 +279,7 @@ Column {
...
@@ -306,7 +279,7 @@ Column {
columnSpacing
:
_margin
columnSpacing
:
_margin
rowSpacing
:
_margin
rowSpacing
:
_margin
columns
:
2
columns
:
2
visible
:
cameraCalc
.
camera
SpecType
===
CameraCalc
.
CameraSpecNon
e
visible
:
cameraCalc
.
camera
Name
===
cameraCalc
.
manualCameraNam
e
QGCLabel
{
text
:
distanceToSurfaceLabel
}
QGCLabel
{
text
:
distanceToSurfaceLabel
}
FactTextField
{
FactTextField
{
...
...
src/PlanView/StructureScanEditor.qml
View file @
e6718b14
...
@@ -92,7 +92,7 @@ Rectangle {
...
@@ -92,7 +92,7 @@ Rectangle {
columnSpacing
:
ScreenTools
.
defaultFontPixelWidth
/
2
columnSpacing
:
ScreenTools
.
defaultFontPixelWidth
/
2
rowSpacing
:
0
rowSpacing
:
0
columns
:
3
columns
:
3
enabled
:
missionItem
.
cameraCalc
.
camera
SpecType
===
CameraCalc
.
CameraSpecNon
e
enabled
:
missionItem
.
cameraCalc
.
camera
Name
===
missionItem
.
cameraCalc
.
manualCameraNam
e
Item
{
width
:
1
;
height
:
1
}
Item
{
width
:
1
;
height
:
1
}
QGCLabel
{
text
:
qsTr
(
"
Pitch
"
)
}
QGCLabel
{
text
:
qsTr
(
"
Pitch
"
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment