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.

252 lines
8.7 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.

#pragma once
#include "Resource.h"
#include "deque"
#include <string>
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();
};