beaconmanage.cpp

来自「VC&Matlab混合编程实现无线电导航指示器」· C++ 代码 · 共 164 行

CPP
164
字号
// BeaconManage.cpp: implementation of the CBeaconManage class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RADIO.h"
#include "BeaconManage.h"
#include "APPStatic.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


IMPLEMENT_SERIAL(CBeaconManage, CCmdTarget,SCHEMA_BEACON)

BEGIN_MESSAGE_MAP(CBeaconManage, CCmdTarget)
	//{{AFX_MSG_MAP(CBeaconManage)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBeaconManage::CBeaconManage()
{
  m_bIsBeaconAvailable=FALSE;
  m_beaconList.SetSize(0,5);
  	//测距误差
	m_dMavInitErDisAir = 150.0;
	m_dMavInitErDisGround = 100.0;
	m_dMavTimeDisAir = 0.5;
	m_dMavTimeDisGround = 0.5;
	m_dMavWhiteErDisAir = 15.0;//实际上是白噪声误差,不是mav的驱动白噪声
	m_dMavWhiteErDisGround = 10.0;
    //顶空盲区
	m_dBlindAir = 60.0;
	m_dBlindGround = 50.0;
	//测角误差
	m_dMavInitErAzAir = 1.0;
	m_dMavInitErAzGround = 0.5;
	m_dMavTimeAzAir = 0.5;
	m_dMavTimeAzGround = 0.5;
	m_MavWhiteErAzAir = 0.1;
	m_MavWhiteErAzGround = 0.05;
	//工作距离
	m_dDistAir = 180.0;
	m_dDistGround = 350.0;
	//输出频率
	m_dFreq = 30;

	m_iAvailableBCIndex=-1;
}

CBeaconManage::~CBeaconManage()
{

}

CArray<BEACON,BEACON>* CBeaconManage::GetBeaconList()
{
return &m_beaconList;
}

BOOL CBeaconManage::IsBeaconAvailable()
{
return m_bIsBeaconAvailable;
}

void CBeaconManage::Serialize(CArchive& ar) 
{  
    //Schema自己写去,这里放在前两字节。
	if (ar.IsStoring())
	{
		ar<<RUNTIME_CLASS(CBeaconManage)->m_wSchema;
	}
	else if(ar.IsLoading())
	{
		UINT nSchema;
		ar>>nSchema;		
		if(nSchema!=SCHEMA_BEACON)
		{
			AfxMessageBox(_T("信标设置文件版本不符"));
			return;		
		}
	}
	else{}
	//
	m_beaconList.Serialize(ar);
    if (ar.IsStoring()){
    	ar<<m_dMavInitErDisAir;
		ar<<m_dMavInitErDisGround;
		ar<<m_dMavTimeDisAir;
		ar<<m_dMavTimeDisGround;
		ar<<m_dMavWhiteErDisAir;
		ar<<m_dMavWhiteErDisGround;
		ar<<m_dBlindAir;
		ar<<m_dBlindGround;
		ar<<m_dMavInitErAzAir;
		ar<<m_dMavInitErAzGround;
		ar<<m_dMavTimeAzAir;
		ar<<m_dMavTimeAzGround;
		ar<<m_MavWhiteErAzAir;
		ar<<m_MavWhiteErAzGround;
		ar<<m_dDistAir;
		ar<<m_dDistGround;
		ar<<m_dFreq;
		
	}else{
       ar>>m_dMavInitErDisAir;
		ar>>m_dMavInitErDisGround;
		ar>>m_dMavTimeDisAir;
		ar>>m_dMavTimeDisGround;
		ar>>m_dMavWhiteErDisAir;
		ar>>m_dMavWhiteErDisGround;
		ar>>m_dBlindAir;
		ar>>m_dBlindGround;
		ar>>m_dMavInitErAzAir;
		ar>>m_dMavInitErAzGround;
		ar>>m_dMavTimeAzAir;
		ar>>m_dMavTimeAzGround;
		ar>>m_MavWhiteErAzAir;
		ar>>m_MavWhiteErAzGround;
		ar>>m_dDistAir;
		ar>>m_dDistGround;
		ar>>m_dFreq;
	}

}

void CBeaconManage::DrawBeacon(mwArray mwhAxis){
	if(m_beaconList.GetSize()==0) return;
	BEACON bc;
	mwArray mwBc=APPStatic::GetMainView()->m_mwhBeacon;
	TCHAR marker[5];
	if(m_bIsBeaconAvailable){
	
		bc=m_beaconList.GetAt(m_iAvailableBCIndex);
		if(bc.type==AIR){
			lstrcpy(marker,_T("o"));
		}
		else if(bc.type==GROUND){
			lstrcpy(marker,_T("^"));
		}
		else{lstrcpy(marker,_T("^"));}
	
		POINT3 ori=APPStatic::GetMainView()->m_traj3dShow.m_ptOrigin;
		double x=(bc.pos.x-ori.x)*pi().ExtractScalar(1)/(180.0*APPStatic::GetMainView()->m_traj3dShow.m_C2);
		double y=(bc.pos.y-ori.y)*pi().ExtractScalar(1)/(180.0*APPStatic::GetMainView()->m_traj3dShow.m_C1);
		Vset(mwBc,"xdata",x,"ydata",y,"zdata",bc.pos.z,
			"parent",mwhAxis,"marker",marker,"markersize",6,"color","w","visible","on");	
	}
	
	else{
      	Vset(mwBc,"visible","off");
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?