#include "StdAfx.h"
#include "Globe.h"







//视图类句柄
HWND g_viewHwnd;


//红灯
CBitmap g_bmpRed; 

//绿灯
CBitmap g_bmpGreen; 

//黄灯
CBitmap g_bmpYellow; 

//灰灯
CBitmap g_bmpGray;

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


//遥测数据帧主帧计数换算的时间
double g_mainFrameCountTime;


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


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


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


//功能:获得软件的运行目录
CString GetSoftwareCurrentDirectory()
{
	TCHAR exeFullPath[MAX_PATH];
	GetModuleFileName(NULL, exeFullPath, MAX_PATH);
	
	CString str;
	str.Format(_T("%s"), exeFullPath);
	
	int index = str.ReverseFind('\\');
	
	str.Delete(index, str.GetLength()-index);
	
	return str;
}

//功能:在文件夹中查找文件,看其是否存在
//输入:文件或文件夹名称strDir
//返回值:true——存在该文件或文件夹
//        false——不存在该文件或文件夹
bool SearchDirectory(const CString &strDir)
{
	CFileFind fileFind;
	
	if (fileFind.FindFile(strDir))
	{
		fileFind.Close();
		return true;
	}
	else
	{
		fileFind.Close();
		return false;
	}
}


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

	bitArray[0] =  oneByte&0X01;
	bitArray[1] =  (oneByte&0X02)>>1;
	bitArray[2] =  (oneByte&0X04)>>2;
	bitArray[3] =  (oneByte&0X08)>>3;
	bitArray[4] =  (oneByte&0X10)>>4;
	bitArray[5] =  (oneByte&0X20)>>5;
	bitArray[6] =  (oneByte&0X40)>>6;
	bitArray[7] =  (oneByte&0X80)>>7;
}


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

	pBitArray[0] =  usValue&0X01;
	pBitArray[1] =  (usValue&0X02)>>1;
	pBitArray[2] =  (usValue&0X04)>>2;
	pBitArray[3] =  (usValue&0X08)>>3;
	pBitArray[4] =  (usValue&0X10)>>4;
	pBitArray[5] =  (usValue&0X20)>>5;
	pBitArray[6] =  (usValue&0X40)>>6;
	pBitArray[7] =  (usValue&0X80)>>7;

	pBitArray[8] =  (usValue&0X100)>>8;
	pBitArray[9] =  (usValue&0X200)>>9;
	pBitArray[10] =  (usValue&0X400)>>10;
	pBitArray[11] =  (usValue&0X800)>>11;
	pBitArray[12] =  (usValue&0X1000)>>12;
	pBitArray[13] =  (usValue&0X2000)>>13;
	pBitArray[14] =  (usValue&0X4000)>>14;
	pBitArray[15] =  (usValue&0X8000)>>15;
}



//功能:GPS UTC时间转换成北京时间
//输入:GPS UTC时间utcTime
//返回值:北京时间
CString GPSUTCTime2BeijingTime(const double utcTime)
{
	long nTimeGps = static_cast<long>(utcTime);

	CString strBeijingTime = _T("");
	strBeijingTime.Format(_T("%02d:%02d:%02d"), (nTimeGps/3600+8>=24?nTimeGps/3600+8-24:nTimeGps/3600+8), nTimeGps%3600/60, nTimeGps%3600%60);	

	return strBeijingTime;
}






//获得航线文件名,输入航线号(1、2、3、4、5)
CString GetFlyLineName( const int lineID )
{
	CString str;
	str.Format( "%d", lineID );
	return (GetSoftwareCurrentDirectory() + _T( "\\route" ) + str + _T( ".txt" ));
}

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

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

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

structPoint g_structPointCrashReal[360];

long m_longGroundID = 0;              //地面站标绘图层

long m_visbleCircleLayerID = -1;      //可视区域图层
long m_notVisibleCircleLayerID = -1;  //不可视区域图层

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

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

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

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

long m_crashAreaLayerID = -1;         //实时碰撞检测区域图层

long m_fightRegionLayerID = -1;       //作用范围图层

long m_DemRegionLayerID[500] = {-1};  //高程数据图层

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

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

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

//限制参与高程分析的点数
double g_dDemPtLon[g_iDemAltPtNum];
double g_dDemPtLat[g_iDemAltPtNum];

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

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

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

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

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

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

//已经标记的点数
int g_iHaveMarkedPts = 0;

CString g_iMarkerName[g_iMarkerPtNum];
double  g_iMarkerLon[g_iMarkerPtNum];
double  g_iMarkerLat[g_iMarkerPtNum];
bool    g_bMarkerPlot[g_iMarkerPtNum] = {false};

/*-------------------------------------------------------------------------------------------------------------
说明:不同飞机型号变量,用于控制是否启用个性功能
-------------------------------------------------------------------------------------------------------------*/
bool g_b981ADesktop = true;
bool g_b981APad = false;
bool g_b981CDesktop = false;