#ifndef  GLOBE_H
#define  GLOBE_H

#include <afxwin.h>  


/////////////////////////////////////////////////////////消息定义////////////////////////////////////////////////////////////


const UINT WM_SET_LAYER_STATUS			=    WM_USER+1056;					         //设置图层的显示状态
const UINT WM_CLOSE_LONLAT_DIALOG		=    WM_USER+1057;					         //关闭经度、纬度显示的界面
const UINT WM_CLOSE_DISTANCE_DIALOG		=    WM_USER+1058;					         //关闭显示2点之间的测量距离的界面
const UINT WM_CLOSE_LINEDESIGN_DIALOG   =    WM_USER+1059;					         //关闭航线设计对话框

const UINT WM_ADD_LINE_POINT		    =    WM_USER+1060;					         //增加航点
const UINT WM_EDIT_LINE_POINT		    =    WM_USER+1061;					         //编辑航点
const UINT WM_DELETE_LINE_POINT		    =    WM_USER+1062;					         //删除航点
const UINT WM_SAVE_LINE_POINTS		    =    WM_USER+1063;					         //保存航线
const UINT WM_CHECK_FLY_LINE_STATUS		=    WM_USER+1064;							 //检查航线的显示状态
const UINT WM_SEL_UAV					=    WM_USER+1065;							 //切换飞机
const UINT WM_DRAW_TARGET				=    WM_USER+1066;							 //标绘目标点

const UINT WM_SEND_SELECTTARGET         =    WM_USER+1067;                           //在地图上选点

const UINT WM_SEND_CLOSEDEMALT          =    WM_USER+1068;                           //关闭高程分析对话框

const UINT WM_SEND_DRAWMARKER           =    WM_USER+1069;                           //绘制标记点

const UINT WM_SEND_DRAWUAV              =    WM_USER+1070;                           //绘制无人机

//可视域分析相关消息

const UINT WM_SEND_REGIONTOGIS          =    WM_USER+1073;                           //可视域分析对话框到GISDlg的消息
const UINT WM_SEND_UPDATEDIALOG         =    WM_USER+1074;                           //更新可视域对话框信息
const UINT WM_SHOW_POINTINMAP           =    WM_USER+1075;                           //显示通视分析目标点

const UINT WM_SHOW_ISVISIBLE            =    WM_USER+1076;                           //显示可视点
const UINT WM_SHOW_NOTVISIBLE           =    WM_USER+1077;                           //显示不可视点
const UINT WM_SEND_CLEARSHAPE           =    WM_USER+1078;                           //清除图层

const UINT WM_SHOW_VISI_REALTIME        =    WM_USER+1079;                           //实时显示可视区域
const UINT WM_SHOW_NOTVISI_REALTIME     =    WM_USER+1080;                           //实时显示不可视区域
const UINT WM_SHOW_VISI_DELETE          =    WM_USER+1081;                           //清除实时区域

const UINT WM_DEL_LINELAYER             =    WM_USER+1082;                           //删除通视等高线图层
const UINT WM_ADD_LINELAYER             =    WM_USER+1083;                           //添加点到通视等高线图层

const UINT WM_DRAW_LINEPOINT            =    WM_USER+1084;                           //标绘航线上的点

const UINT WM_SHOW_CRASH_REALTIME       =    WM_USER+1085;                           //实时显示碰撞检测区域

const UINT WM_SEND_DRAWFIGHT            =    WM_USER+1086;                           //绘制作用范围

const UINT WM_SEND_DRAWDEMREGION        =    WM_USER+1087;                           //绘制高程数据区域

const UINT WM_SEND_MAPLOCATION			=	 WM_USER+1088;							 //在线地图定位

const UINT WM_SEND_MAPCURSORMODE		=	 WM_USER+1089;							 //设置Map CursorMode

/////////////////////////////////////////////////////////消息定义////////////////////////////////////////////////////////////









/////////////////////////////////////////////////////////数据结构体定义////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////数据结构体定义////////////////////////////////////////////////////////////





//视图类句柄
extern HWND g_viewHwnd;

//红绿灯的位图实例
extern CBitmap g_bmpRed; 
extern CBitmap g_bmpGreen; 

//黄灯
extern CBitmap g_bmpYellow; 

//灰灯
extern CBitmap g_bmpGray;	


//数据刷新显示的间隔
extern int g_refreshTimes;



//地图显示区软件界面句柄
extern HWND g_mapHwnd;


//地面站位置
extern double g_gcsLon;   //经度
extern double g_gcsLat;   //纬度
extern double g_gcsAlt;   //高度

//航线设计时航点模式:0为置点;1为航点编辑和删除模式
extern int g_ptModeInLineDesign;


struct UAVState
{
	UAVState()
	{
		pitch = pitchPreset = 0.0;
		roll = rollPreset = 0.0;
		drift = 0.0;

		wflypt = 0;
		flyPtH = 0;
		wflyDis = 0.0;

		orgptDis = 0.0;
	}

	float pitch;       //俯仰角
	float pitchPreset; //俯仰给定
	float roll;        //滚转角
	float rollPreset;  //滚转给定
	float drift;       //偏航角

	int wflypt;   //待飞点
	float flyPtH;        //航点高度
	float wflyDis;     //待飞距
	float orgptDis;    //原点距离

};


struct TargetPt
{
	int id;
	double lon;
	double lat;
};

///////////////////////////////////////////////以下为全局函数///////////////////////////////////////////


//功能:获得软件的运行目录
extern CString GetSoftwareCurrentDirectory();


//功能:在文件夹中查找文件,看其是否存在
//输入:文件或文件夹名称strDir
//返回值:true——存在该文件或文件夹
//        false——不存在该文件或文件夹
extern bool SearchDirectory(const CString &strDir);

//功能:一个字节分成8位,分别存储到数组中
//输入:字节oneByte
//输出:8位的位集合bitArray
extern void BYTE2BitArray(int *bitArray, const BYTE oneByte);

//功能:无符号2个字节的整数转换成位数组(16个数据)
//输入:无符号的整数usValue
//返回值:含16个数据的一维数组
extern void UnsignedShort2BitArray(int *pBitArray, const unsigned short usValue);

//功能:GPS UTC时间转换成北京时间
//输入:GPS UTC时间utcTime
//返回值:北京时间
extern CString GPSUTCTime2BeijingTime(const double utcTime);


//获得航线文件名,输入航线号(1、2、3、4、5)
extern CString GetFlyLineName( const int lineID );


const int LINEPTNUM = 256;


//可视域分析相关变量
/************************************************************************/

struct structPoint
{
	double lon;
	double lat;
};

extern structPoint g_structPointVisible[360];
extern structPoint g_structPointNotVisible[722];

extern structPoint g_structPointVisiReal[180];
extern structPoint g_structPointNotVisiReal[180];

extern structPoint g_structPointCrashReal[360];

extern long m_longGroundID;             //地面站标绘图层

extern long m_visbleCircleLayerID;      //可视区域图层
extern long m_notVisibleCircleLayerID;  //不可视区域图层

extern long m_visiRealCircleLayerID;    //实时可视区域图层
extern long m_notVisiRealCircleLayerID; //实时不可视区域图层
extern long m_RealCircleLayerID;        //实时圆图层

extern long m_longContourLineID[20];    //通视等高线图层 每500米一条 500 1000 1500 2000 2500 .... 10000
extern long m_longContourTextID[20];    //通视等高线标签图层

extern bool g_bSelectDropPoint;         //可视域分析对话框是否在选点
extern long m_longSelectLineID;         //地面站与目标点连线图层
extern long m_longLabelPlotID;          //地面站与目标点连线标注图层

extern long m_longLinePointID;          //航线上的点标绘图层

extern long m_crashAreaLayerID;         //实时碰撞检测区域图层

extern long m_fightRegionLayerID;       //作用范围图层

extern long m_DemRegionLayerID[500];    //高程数据图层

/************************************************************************/

//多点高程分析相关变量
/************************************************************************/
extern bool g_bDemAnalysising; //是否在高程分析中

extern int g_iDemPointNum;     //参与高程分析的点数

//限制参与高程分析的点数
const int g_iDemAltPtNum = 10;

extern double g_dDemPtLon[g_iDemAltPtNum];
extern double g_dDemPtLat[g_iDemAltPtNum];

//两点所连线段图层
extern long g_lDemAltLayerID[g_iDemAltPtNum];

//两点所连线段标注距离方位图层
extern long g_lDemAltDisLayerID[g_iDemAltPtNum];

//点序号的标注图层
extern long g_lDemPtNumLayerID[g_iDemAltPtNum];

/************************************************************************/

/*-------------------------------------------------------------------------------------------------------------
说明:标记点相关变量
-------------------------------------------------------------------------------------------------------------*/
//是否在移动鼠标选择标记点
extern bool g_bSelectMarker;

//最大支持的标记点数
const int g_iMarkerPtNum = 20;

//标记点图层
extern long g_lMarkerLayerID[g_iMarkerPtNum];

//已经标记的点数
extern int g_iHaveMarkedPts;

extern CString g_iMarkerName[g_iMarkerPtNum];
extern double  g_iMarkerLon[g_iMarkerPtNum];
extern double  g_iMarkerLat[g_iMarkerPtNum];
extern bool    g_bMarkerPlot[g_iMarkerPtNum];

/*-------------------------------------------------------------------------------------------------------------
说明:不同型号变量,用于控制是否启用个性功能
-------------------------------------------------------------------------------------------------------------*/
extern bool g_b981ADesktop;		// 981A电脑端
extern bool g_b981APad;			// 981A平板端
extern bool g_b98CADesktop;		// 981C电脑端

#endif