You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
6.4 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//MSVC编译器界面显示乱码问题
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
#include <QMainWindow>
#include <QStackedWidget>
#include <QProgressDialog>
#include <QString>
#include <QMutex>
//子窗口头文件
#include "saveroutedialog.h"
#include "bindroutedialog.h"
#include "computeoffsetpositiondialog.h"
//supermap
#include <Workspace/UGWorkspace.h>
#include <Engine/UGDataset.h>
#include "Map/UGLayer.h"
#include "scenecontrol.h"
#include "sceneview.h"
namespace UGC
{
class UGWorkspace;
class UGImage;
class UGGraphics;
class UGDataset;
class UGDataSource;
class UGLayer;
class UGMap;
class UGDatasetVector;
// class UGMapEditorWnd;
}
using namespace UGC;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class QMapControl; //声明所依赖的QMapControl类
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
enum RBtnMenuType
{
DefaultMenu,
AttributeMenu,
EditMenu
};
Q_ENUM(RBtnMenuType);
enum MapType
{
Map2D,
Map3D,
};
Q_ENUM(MapType);
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void setupUI(QMainWindow* mainWindow);//声明搭建界面的函数
void initWorkSpace();//工作空间初始化
void initMapControl(); //二维地图容器初始化
void initMenu(QMainWindow* mainWindow); //Map菜单初始化
void addMapAction(QMainWindow *mainWindow);//声明界面上各元素的行为函数
void addMapMenuAction();//声明Map右键菜单的行为函数
void addMapConnect();//声明Map连接信号和槽的函数
void initSceneControl(QWidget* parent); //三维场景容器初始化
void initSceneMene(); //场景菜单初始化
void addSceneMenuAction();//声明Scene右键菜单的行为函数
void addSceneActionConnect(); //声明Scene QAction连接信号和槽的函数
void addSceneConnect();//声明Scene连接信号和槽的函数
UGbool DirExist(QString fullPath); //判断文件夹是否存在
void importKMLData(); //导入KML,仅用于二维地图
void importKML3DData(); //导入KML,仅用于三维地图
void exportKMLFile(); //导出KML文件
//加载模型文件
void loadModelData();
protected:
// 如果窗口设置了 Qt::DefaultContextMenu 策略,
// 点击鼠标右键该函数被Qt框架调用
void contextMenuEvent(QContextMenuEvent *event);
private:
Ui::MainWindow *ui;
QStackedWidget* stackedWidget;
QProgressDialog* progressDlg;
RBtnMenuType rMenuType;
MapType mapType;
ComputeOffsetPositionDialog* inputPosDlg;
saveRouteDialog *saveRouteDlg;
bindRouteDialog *bindRouteDlg;
QMapControl* qMapControl;//声明一个地图窗口对象QMapControl类对象
SceneControl* pSceneControl; //三维场景对象
SceneView* pSceneView;
UGWorkspace* m_pWorkspace; //声明一个工作空间对象
QMenu* mapRBtnMenu;//声明一个地图右键菜单对象
//声明右键菜单各按钮对象
QAction* actionShowRoute; //显示航线
QAction* actionBindRoute;//装订航线
QAction* actionImportRoute; //导入航线
QMenu* attributeRBtnMenu; //声明属性右键菜单对象
QAction* actionAttribute; //属性
QAction* actionExportFile; //文件导出
QMenu* EditRBtnMenu; //编辑右键菜单
QAction* saveRoute;//保存航线
QAction* cancelRoute;//取消航线
/*******************场景菜单对象*******************/
QMenu* sceneRBtnMenu;//声明一个场景右键菜单对象
//声明场景右键菜单各按钮对象
QAction* actionSceneShowRoute; //显示航线
QAction* actionSceneBindRoute;//装订航线
QAction* actionSceneImportRoute; //导入航线
//声明界面上工具条对象
QToolBar *mainToolBar;
//声明工具条上各个按钮对象
QAction *actionOpen;
QAction *actionZoomout;
QAction *actionZoomin;
QAction *actionPan;
QAction *actionViewEntire;
QAction *actionCalcLength;
QAction *actionCalcArea;
QAction *actionCalcAngle;
QAction *actionSelect;
QAction *actionDrawPoint;
QAction *actionDrawLine;
QAction *actionDrawPolygon;
QAction *actionInputPoint;
QAction *actionOnlineMap;
QAction *actionMapLocation;
QAction *actionTransformMap;
QAction *actionImportData;
//绘制模式
qint16 drawMode;
//
// QStringList imageDataList;
// QStringList terrainDataList;
// int imageDataCount;
// int terrainDataCount;
QMutex m_mutex;
// QThread* loadSceneDataThread;
signals:
void sendAddRouteState(int addState);// 航线是否添加成功信号
void sendSceneDataList(SceneControl* pSceneControl,UGDataSource* pDataSource,QStringList imagePathList,QStringList terrianPathList);
// void closedProgressDialog();
public slots:
void openRasterMap(); //声明槽函数openRasterMap打开地图操作
void zoomIn();//声明槽函数zoomIn放大地图操作
void zoomOut();//声明槽函数zoomOut缩小地图操作
void viewEntire();//声明槽函数viewEntire全幅显示地图
void pan();//声明槽函数pan平移浏览地图
void calcLength();//声明槽函数calcLength量算距离
void calcArea();//声明槽函数calcArea量算面积
void calcAngle();//声明槽函数calcAngle量算角度
void Select(); //声明槽函数Select
void drawPoint();//声明槽函数drawPoint(绘制点)
void drawLine();//声明槽函数drawLine(绘制线)
void drawPolygon();//声明槽函数drawPolygon(绘制多边形)
void showBindRouteDialog(); //显示航线装订弹窗
void showComputeOffsetPosition(); //显示坐标点输入坐标弹窗
void showOnlineMapDialog(); //显示在线地图选择弹窗
void showAttributeMenu(); //显示属性右键菜单
void transformMap(); //二三维地图切换
void importSceneData(QStringList imagePathList,QStringList terrianPathList); //导入场景数据
void closedProgressDialog(QString taskName); //关闭进度条
void showSettingFlightPoint3DDialog(); //显示航高设置对话框
void showSaveRoute3DDialog(UGGeometry* pGeometry); //显示三维航线保存对话框
void highLightKMLGeometry(int currentGeometryID,int lastGeometryID); //高亮当前导入的KML 3D几何对象
};
#endif // MAINWINDOW_H