#pragma once #include "Resource.h" #include "deque" #include using namespace std; //已知地球上两点经纬高,计算两点间的斜率(假定地球是圆的,考虑地球曲率) double CalSlopeBetweenTwoPoint(const double fromPtLon, const double fromPtLat, const float fromPtAlt, const double endPtLon, const double endPtLat, const float endPtAlt); //已知地球A点经纬度高,以及B点和A点连线相对于水平方向的斜率,求B点的高度 double CalAltFromSlope(const double fromPtLon, const double fromPtLat, const float fromPtAlt, const double endPtLon, const double endPtLat,const double slope); /*------------------------------------------------------------------------------------------------------------- 说明:可视域分析 -------------------------------------------------------------------------------------------------------------*/ //线程函数,处理可视域分析 void ThreadFuncLightRegion(); //给定飞行高度,进行可视域分析 bool AnalysisLightRegion(int iAngle, int iRadius); /*------------------------------------------------------------------------------------------------------------- 说明:实时通视检测 -------------------------------------------------------------------------------------------------------------*/ //线程函数,处理实时通视检测 void ThreadFuncRealTimeDetection(); //给定无人机高度,角度和距离范围,进行通视分析 bool AnalysisVisiArea(double uavAlt, double dAngle, double dDistanceMin, double dDistanceMax, double lonGCS, double latGCS); /*------------------------------------------------------------------------------------------------------------- 说明:实时碰撞检测 -------------------------------------------------------------------------------------------------------------*/ //线程函数,处理实时碰撞检测 void ThreadFuncRealTimeCrash(); /*------------------------------------------------------------------------------------------------------------- 说明:航线通视分析 -------------------------------------------------------------------------------------------------------------*/ //线程函数,处理航线通视分析 void ThreadFuncAnalysisRoute(); //给定某点的经度、纬度,计算该点相对于地面站的通视高度 float CalculateVisibleAlt(const double& lon, const double& lat); /*------------------------------------------------------------------------------------------------------------- 说明:实时视线通视分析 -------------------------------------------------------------------------------------------------------------*/ //线程函数,处理实时视线通视分析 void ThreadFuncAnalysisLOS(); /*------------------------------------------------------------------------------------------------------------- 说明:通视等高线分析 -------------------------------------------------------------------------------------------------------------*/ //线程函数,处理通视等高线分析 void ThreadFuncAnalysisContour(); //通视等高线分析并在地图上标绘等高线,iAngle 角度 bool AnalysisContourLine(int iAngle); //添加点到通视等高线图层 void InsertPtToContourLine(float _fLightAlt, double _dPtLon, double _dPtLat); // CDlgLightRegion 对话框 class CDlgLightRegion : public CBCGPDialog { DECLARE_DYNAMIC(CDlgLightRegion) public: CDlgLightRegion(CWnd* pParent = NULL); // 标准构造函数 virtual ~CDlgLightRegion(); // 对话框数据 enum { IDD = IDD_DIALOG_LIGHTREGION }; CBCGPChartCtrl m_wndChart; CBCGPChartVisualObject* pChart; CBCGPChartAxis* pXAxis; CBCGPChartAxis* pYAxis; CBCGPChartSeries* pSeries1; CBCGPChartSeries* pSeries2; CBCGPChartSeries* pSeries3; CBCGPChartLineObject* m_pLine1; CBCGPStrokeStyle m_strokeStyle; CBCGPChartTextObject* m_pTextTip; double m_dGroundLon; //地面站经度 double m_dGroundLat; //地面站纬度 float m_fGroudAlt; //地面站高程 double m_dCabinHgt; //方舱本身高度 protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); //标绘地面站位置 afx_msg void OnBnClickedButtonDrawPoint(); //接收其他线程来的消息,更新对话框内容 afx_msg LRESULT OnSendUpdateDialog(WPARAM wParam, LPARAM lParam); /*------------------------------------------------------------------------------------------------------------- 说明:可视域分析绘制相关变量和函数 -------------------------------------------------------------------------------------------------------------*/ public: HANDLE hThreadRegion; DWORD ThreadIDRegion; int m_iFlightAlt; //飞行高度 int m_iRegionRadius; //分析半径 //提示文字 CBCGPVisualContainerCtrl m_RegionTextContainer; CBCGPTextGaugeImpl* m_pRegionTTextIndicator; //初始化可视域分析提示文字显示仪表 void InitRegionTextContainer(); //可视域分析 afx_msg void OnBnClickedButtonRegionAnaylsis(); //清除可视域分析绘制图层 afx_msg void OnBnClickedButtonRegionDelete(); /*------------------------------------------------------------------------------------------------------------- 说明:实时通视检测相关变量和函数 -------------------------------------------------------------------------------------------------------------*/ public: //是否在实时通视检测 BOOL m_bRealTime_Visi; HANDLE hThreadDetect; DWORD ThreadIDDetect; //选中实时通视检测 afx_msg void OnBnClickedCheckRealtime(); //地图上实时在无人机周边绘制可视域 void DrawVisiAreaRealTime(double uavAlt, double distanceToGCS, double angleToGCS, double lonGCS, double latGCS); /*------------------------------------------------------------------------------------------------------------- 说明:实时碰撞检测相关变量和函数 -------------------------------------------------------------------------------------------------------------*/ public: //是否在实时碰撞检测 BOOL m_bRealTime_Crash; HANDLE hThreadCrash; DWORD ThreadIDCrash; //选中实时碰撞检测 afx_msg void OnBnClickedCheckRtDetection(); //地图上实时在无人机周边检测高程 void DrawCrashAreaRealTime(double uavAlt, double uavLon, double uavLat); /*------------------------------------------------------------------------------------------------------------- 说明:航线通视分析相关变量和函数 -------------------------------------------------------------------------------------------------------------*/ HANDLE hThreadRoute; DWORD ThreadIDRoute; CBCGPVisualContainerCtrl m_LineTextContainer; CBCGPTextGaugeImpl* m_pLineTextIndicator; //初始化航线通视分析提示文字显示仪表 void InitLineTextContainer(); //加载航线 afx_msg void OnBnClickedButtonLoadRoute(); //保存航线通视分析结果 afx_msg void OnBnClickedButtonSaveImage(); //停止分析 afx_msg void OnBnClickedButtonStopRoute(); //清除航线通视分析结果 afx_msg void OnBnClickedButtonClearResult(); afx_msg LRESULT OnMouseDown(WPARAM wp, LPARAM lp); /*------------------------------------------------------------------------------------------------------------- 说明:实时视线分析相关变量和函数 -------------------------------------------------------------------------------------------------------------*/ public: HANDLE hThreadLight; DWORD ThreadIDLight; BOOL m_bRTlight; //是否在实时视线分析:地面站-飞机视线方向通视情况 //选中实时视线分析 afx_msg void OnBnClickedCheckRtLight(); //实时视线分析:地面站-飞机方向,在图表上完成结果绘制 void AnalysisRealTime(double uavAlt, double distanceToGCS, double angleToGCS, double lonGCS, double latGCS); /*------------------------------------------------------------------------------------------------------------- 说明:通视等高线分析 -------------------------------------------------------------------------------------------------------------*/ HANDLE hThreadContour; DWORD ThreadIDContour; int m_iMaxLosAlt; //最大通视等高线高度 CBCGPVisualContainerCtrl m_ContourTextContainer; CBCGPTextGaugeImpl* m_pContourTextIndicator; //初始化通视等高线分析提示文字显示仪表 void InitContourTextContainer(); //通视等高线分析 afx_msg void OnBnClickedButtonContourline(); //清除通视等高线分析 afx_msg void OnBnClickedButtonContourDelete(); /*------------------------------------------------------------------------------------------------------------- 说明:两点间通视分析 -------------------------------------------------------------------------------------------------------------*/ afx_msg void OnBnClickedButtonSelectPtInMap(); void ShowPointPosition(double ptLon, double ptLat); void LosBetweenTwoPoints(); afx_msg void OnBnClickedButtonClearLineLayer(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnBnClickedButtonGetAltValue(); afx_msg void OnBnClickedButtonReverse(); //标绘作战范围 afx_msg void OnBnClickedButtonDrawFight(); //清除作战范围 afx_msg void OnBnClickedButtonDeleteFight(); //作战半径 int m_iFightRegion; //标绘高程数据区域 afx_msg void OnBnClickedButtonGetDemRegion(); };