QGC 任务规划 -》Survey功能 底层执行逻辑
2018-03-07 13:11
597 查看
追踪了 一下 当点击 【Survey】按钮后,地图上 绘制出了 一个多边形,这个交互的 底层执行顺序。
1,首先加载给地图加载代理。PlanView.qml 。给FlightMap 添加了一个代理(MissionItemMapVisual),用来展示 不同的任务 效果。比如简单的航点任务 和多边形的测量任务。
Repeater{ model:_editingLayer==_layerMission?_missionController.visualItems:undefined delegate:MissionItemMapVisual{ map: editorMap onClicked: setCurrentItem(sequenceNumber,false) visible: _editingLayer==_layerMission } }2,MissionItemMapVisual.qml 代理 调用 mapVisualQML 属性
Component.onCompleted:{ if(object.mapVisualQML){//载入地图效果。添加 抽象基类代理 varcomponent=Qt.createComponent(object.mapVisualQML) if(component.status===Component.Error){ console.log("ErrorloadingQml:",object.mapVisualQML,component.errorString()) } _visualItem=component.createObject(map,{"map":_root.map}) _visualItem.clicked.connect(_root.clicked) }}3,VisualMissionItem.h 一个代理的抽象基类 .提供了 mapVisualQML 属性,供第2步使用。
// Abstract base class for all Simple and Complex visual mission objects.
class VisualMissionItem : public QObject
Q_PROPERTY(QString mapVisualQML READ mapVisualQML CONSTANT) ///< QMl code for map visuals
classSimpleMissionItem:publicVisualMissionItem //单独 航点 简单任务
classComplexMissionItem:publicVisualMissionItem
classSurveyMissionItem:publicComplexMissionItem //多边形 航线 加载多边形航线(SurveyMapVisual.qml) -》
QString mapVisualQML (void)constfinal{returnQStringLiteral("SurveyMapVisual.qml");}//加载 SurveyMapVisual.qml 文件
4,按下 【Survey】按钮时。 PlanView.qml
case1: if(_singleComplexItem){ addComplexItem(_missionController.complexMissionItemNames[0]) }//////////
functionaddComplexItem(complexItemName){ varcoordinate=editorMap.center coordinate.latitude=coordinate.latitude.toFixed(_decimalPlaces) coordinate.longitude=coordinate.longitude.toFixed(_decimalPlaces) coordinate.altitude=coordinate.altitude.toFixed(_decimalPlaces) insertComplexMissionItem(complexItemName,coordinate,_missionController.visualItems.count)
}
//////////
functioninsertComplexMissionItem(complexItemName,coordinate,index){ varsequenceNumber=_missionController.insertComplexMissionItem(complexItemName,coordinate,index) setCurrentItem(sequenceNumber,true)
}
5,MisssonController.h
intMissionController::insertComplexMissionItem(QStringitemName,QGeoCoordinatemapCenterCoordinate,inti){ ComplexMissionItem*newItem; intsequenceNumber=_nextSequenceNumber(); if(itemName==_surveyMissionItemName){ newItem=new SurveyMissionItem(_controllerVehicle,_visualItems);6,SurveyMissionItem.h 定义一个代理 使用,mapVisualQML ,根据按下的 按钮 来加载不同代理的不同文件内容
QString mapVisualQML (void) const final { return QStringLiteral("SurveyMapVisual.qml"); }
7,SurveyMapVisual.qml
Component.onCompleted:{ _addInitialPolygon()//组件加载完毕 添加四边形 _addVisualElements() }/////
addInitalPolygon()_mapPolygon.appendVertex(topLeftCoord) _mapPolygon.appendVertex(topRightCoord) _mapPolygon.appendVertex(bottomRightCoord)
_mapPolygon.appendVertex(bottomLeftCoord)
8,QGCMapPolygon.h
voidQGCMapPolygon::appendVertex(constQGeoCoordinate&coordinate){ _polygonPath.append(QVariant::fromValue(coordinate)); _polygonModel.append(newQGCQGeoCoordinate(coordinate,_newCoordParent)); emitpathChanged();}
////
connect(&_mapPolygon,&QGCMapPolygon::pathChanged, this,&SurveyMissionItem::_generateGrid);
9,SurveyMissionItem.h 网格生成
voidSurveyMissionItem::_generateGrid(void) 生成网格emitlastSequenceNumberChanged(lastSequenceNumber()); 最后一个索引 添加完
10,具体算法 基于凸多边形的往复运动
https://www.jianshu.com/p/015dd5b53263?from=singlemessage相关文章推荐
- QGC 连接功能 底层执行逻辑
- QGC PlanView(任务规划功能) 界面加载顺序
- 单线程实现定时执行任务功能
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- Windows任务计划实现自动执行ArcGIS相关功能
- Swoole入门:执行异步任务01(使用案列,简单逻辑梳理)
- Java:利用java Timer类实现定时执行任务的功能
- 使用任务计划功能结合shutdown命令让Win7实现定时自动执行
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- 关于Oracle Toad功能的Execute As Script执行逻辑(方法原理)
- Java:利用java Timer类实现定时执行任务的功能
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- 多线程异步编程(2):创建多个线程执行任务,同时更新进度条,使用观察者模式,利用事件通知界面更新。移除对Form的引用,彻底解除界面与逻辑的耦合
- 有一个任务队列,分别有A、B、C三种类型的任务,设计一种功能,让三种任务分别按照x:y:z(具体比例可配置)的比例进行执行
- Java定时任务:利用java Timer类实现定时执行任务的功能
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
- js简易计算器底层运算逻辑(带撤销功能)
- ASP.NET MVC计划任务实现方法(定时执行某个功能)
- 使用服务程序实现PHP定时执行任务功能