1. 流程分析
航向规划中航点编辑,就是下图中的红色框Waypoint的编辑,当然也包括其他特殊点编辑。它属于航线规划视图PlanView.qml中的内容
通过倒推分析,顺着问题找答案逻辑会更清晰。
● 通过关键词锁定文件位置
直接搜:“Travel to a position in 3D space” 发现在.json文件中,不直接。
继续搜:“Altitude relative to launch altitude” :
● SimpleItemEditor.qml
简单分析 SimpleItemEditor.qml 文件发现和航点UI都能一一对应。
● SimpleItemEditor
继续搜"SimpleItemEditor.qml"发现:
//SimpleMissionItem.cc
_editorQml = QStringLiteral("qrc:/qml/SimpleItemEditor.qml");
//TakeoffMissionItem.cc
_editorQml = QStringLiteral("qrc:/qml/SimpleItemEditor.qml");
再搜下 “_editorQml” 能发现不少“同类”
//测绘相关
//SurveyComplexItem.cc
_editorQml = "qrc:/qml/SurveyItemEditor.qml";
//固定翼的复杂航点
//FixedWingLandingComplexItem.cc
_editorQml = "qrc:/qml/FWLandingPatternEditor.qml";
//第一个航点,也就是“Mission Start”,如下图
//MissionSettingsItem.cc
_editorQml = "qrc:/qml/MissionSettingsEditor.qml";
另通过Q_PROPERTY修饰后,editorQml 就可以在 QML 中访问,VisualMissionItem继承流程此处不做分析。
//VisualMissionItem.h
Q_PROPERTY(QString editorQml MEMBER _editorQml CONSTANT) ///< Qml code for editing this item
● editorQml
扫描二维码关注公众号,回复:
12442129 查看本文章
editorQml在QML的调用:
//MissionItemEditor.qml
//在
Loader {
id: editorLoader
...
source: missionItem.editorQml ///---[Mark]
...
}
● PlanView
MissionItemEditor 最终被PlanView.qml中调用,并作为 listView-model-delegate 模型中的 delegate
//PlanView.qml
//Mission Item Editor
Item {
id: missionItemEditor
...
QGCListView {
id: missionItemEditorListView
...
model: _missionController.visualItems
//-- List Elements
delegate: MissionItemEditor {
...
}
}
2. 流程总结
具体流程图如下: