📄 gpssimview.cpp
字号:
float fy = float(m_centerLati - lati) / (float)m_scaleLati;
x = fx * (g_rectTrack.right - g_rectTrack.left) + (g_rectTrack.right + g_rectTrack.left) / 2;
y = fy * (g_rectTrack.bottom - g_rectTrack.top) + (g_rectTrack.bottom - g_rectTrack.top) / 2;
}
void CGPSSimView::DrawAllTrack(CDC *pDC)
{
CGPSSimDoc *pDoc = GetDocument();
CBrush br(RGB(192,255,192));
pDC->FillRect(&g_rectTrack, &br);
pDC->MoveTo(g_rectTrack.left, g_rectTrack.top);
pDC->LineTo(g_rectTrack.right, g_rectTrack.top);
pDC->LineTo(g_rectTrack.right, g_rectTrack.bottom);
pDC->LineTo(g_rectTrack.left, g_rectTrack.bottom);
pDC->LineTo(g_rectTrack.left, g_rectTrack.top);
const vector<KNPosition> &allpos = CGPSSimDoc::m_bDisplayFlag?
pDoc->GetAllTrnPos():
pDoc->GetAllRawPos();
vector<KNPosition>::const_iterator it = allpos.begin();
for (; it != allpos.end(); ++it)
{
int i = it->speed / 10;
if (i < 0) i = 0;
if (i > 17) i = 17;
DrawTrack(pDC, it->longitude, it->latitude, g_crSpeed[i], 1);
}
if (allpos.size())
{
--it;
int i = it->speed / 10;
if (i < 0) i = 0;
if (i > 17) i = 17;
DrawTrack(pDC, it->longitude, it->latitude, g_crSpeed[i], 0);
}
}
void CGPSSimView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CDC *pDC = GetDC();
DrawAllTrack(pDC);
RefreshChart();
ReleaseDC(pDC);
}
BOOL CGPSSimView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rectWnd, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
BOOL bRet = CFormView::Create(lpszClassName, lpszWindowName, dwStyle, rectWnd, pParentWnd, nID, pContext);
m_chart.SubclassDlgItem(IDC_CHART, this);
return bRet;
}
void CGPSSimView::OnSignalBegin()
{
CGPSSimDoc *pDoc = GetDocument();
/*
if (!m_bSignalPause)
{
pDoc->Begin();
}*/
SetTimer(1212, 995, NULL);
// SetTimer(1212, 395, NULL);
m_bSignalStart = true;
m_bSignalPause = false;
}
void CGPSSimView::OnSignalPause()
{
m_bSignalPause = true;
KillTimer(1212);
}
void CGPSSimView::OnSignalStop()
{
m_bSignalStart = false;
m_bSignalPause = false;
KillTimer(1212);
}
void CGPSSimView::OnUpdateSignalPause(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_bSignalPause);
pCmdUI->Enable(m_bSignalStart);
}
void CGPSSimView::OnUpdateSignalStop(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bSignalStart);
}
void CGPSSimView::OnUpdateSignalBegin(CCmdUI* pCmdUI)
{
pCmdUI->Enable((!m_bSignalStart || m_bSignalPause)&& GetDocument()->Validate());
}
void CGPSSimView::RefreshChart()
{
CGPSSimDoc *pDoc = GetDocument();
ASSERT(pDoc != NULL);
int item = m_table.GetCurSel();
const vector<KNPosition> &pos = CGPSSimDoc::m_bDisplayFlag?
pDoc->GetAllTrnPos():
pDoc->GetAllRawPos();
if (item == 0) // 速度
{
m_chart.SetRangeY(0, 50);
vector<KNPosition>::const_reverse_iterator it = pos.rbegin();
for (int i = 0; it != pos.rend() && i < 20; ++it,++i)
{
m_chart.SetData(0, i, it->speed);
}
}
else if (item == 1) // 高度
{
m_chart.SetRangeY(0, 100);
vector<KNPosition>::const_reverse_iterator it = pos.rbegin();
for (int i = 0; it != pos.rend() && i < 20; ++it,++i)
{
m_chart.SetData(0, i, it->height);
}
}
else if (item == 2) // 速度分布
{
vector<KNPosition>::const_iterator it = pos.begin();
double aData[20] = {0.0f};
long count = 0;
for (; it != pos.end(); ++it)
{
int seg = (it->speed+4) / 5;
if (seg < 0) seg = 0;
if (seg > 19) seg = 19;
aData[seg]++;
count++;
}
for (int i = 0; i < 20; i++)
{
m_chart.SetData(0, i, aData[i]/count);
}
}
else if (item == 3) // 高度分布
{
vector<KNPosition>::const_iterator it = pos.begin();
double aData[20] = {0.0f};
long count = 0;
for (; it != pos.end(); ++it)
{
int seg = (it->height+4) / 5;
if (seg < 0) seg = 0;
if (seg > 19) seg = 19;
aData[seg]++;
count++;
}
for (int i = 0; i < 20; i++)
{
m_chart.SetData(0, i, aData[i]/count);
}
}
m_chart.Invalidate();
m_chart.UpdateWindow();
}
void CGPSSimView::RefreshText()
{
CGPSSimDoc *pDoc = GetDocument();
const vector<char*> &vtxt = CGPSSimDoc::m_bDisplayFlag?
pDoc->GetCurTrnText():
pDoc->GetCurRawText();
m_textRaw.Empty();
vector<char*>::const_iterator it = vtxt.begin();
for (; it != vtxt.end(); ++it)
{
m_textRaw += *it;
//m_textRaw += "\r\n";
}
UpdateData(FALSE);
}
void CGPSSimView::OnSetScaleAdd()
{
m_scaleLngi += 160;
m_scaleLati += 120;
Invalidate();
UpdateWindow();
}
void CGPSSimView::OnSetScaleSub()
{
m_scaleLngi -= 160;
m_scaleLati -= 120;
if (m_scaleLngi < 40) m_scaleLngi = 80;
if (m_scaleLati < 30) m_scaleLati = 60;
Invalidate();
UpdateWindow();
}
void CGPSSimView::OnUpdateSignalTrn(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_bShowSignal);
pCmdUI->Enable(FALSE);
}
void CGPSSimView::OnUpdateSignalOri(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(!m_bShowSignal);
}
void CGPSSimView::OnSignalOri()
{
m_bShowSignal = false;
CGPSSimDoc::m_bDisplayFlag = false;
}
void CGPSSimView::OnSignalTrn()
{
m_bShowSignal = true;
CGPSSimDoc::m_bDisplayFlag = true;
}
void CGPSSimView::RefreshList(void)
{
CGPSSimDoc *pDoc = GetDocument();
const vector<KNPosition>& allpos = CGPSSimDoc::m_bDisplayFlag?
pDoc->GetAllTrnPos():
pDoc->GetAllRawPos();
if (allpos.empty()) return;
const KNPosition &pos = allpos.back();
int count = m_list.GetItemCount();
if (count > 20)
{
m_list.DeleteItem(19);
}
int num;
char buff[20] = {pos.time[0], pos.time[1], ':',
pos.time[2], pos.time[3], ':' ,
pos.time[4], pos.time[5], 0};
m_list.InsertItem(0, buff);
// Longitude
num = pos.longitude >> 3;
int dd = num/3600;
int mm = (num%3600)/60;
int ss = num%60;
sprintf(buff, "%d:%d:%d", dd, mm, ss);
m_list.SetItem(0, 1, LVIF_TEXT, buff, 0, 0, 0, 0, 0);
// Latitude
num = pos.latitude >> 3;
dd = num/3600;
mm = (num%3600)/60;
ss = num%60;
sprintf(buff, "%d:%d:%d", dd, mm, ss);
m_list.SetItem(0, 2, LVIF_TEXT, buff, 0, 0, 0, 0, 0);
// Speed
sprintf(buff, "%.1f", pos.speed);
m_list.SetItem(0, 3, LVIF_TEXT, buff, 0, 0, 0, 0, 0);
// Direction
sprintf(buff, "%.1f", pos.direction);
m_list.SetItem(0, 4, LVIF_TEXT, buff, 0, 0, 0, 0, 0);
// Height
sprintf(buff, "%.1f", pos.height);
m_list.SetItem(0, 5, LVIF_TEXT, buff, 0, 0, 0, 0, 0);
}
void CGPSSimView::OnSetProperty()
{
CPropertySheet sheet;
CNormalSetPage page1;
//CNoisePage page2;
sheet.AddPage(&page1);
//sheet.AddPage(&page2);
if (sheet.DoModal() == IDOK)
{
CGPSSimDoc *pDoc = GetDocument();
/*
char a,b,c;
a = page2.m_nAbnormal;
b = page2.m_nNoSignal;
c = page2.m_nAcel;
pDoc->SetSetting(a, b, c);
*/
pDoc->m_strPort = page1.m_strPort;
pDoc->m_dwBand = page1.m_dwBand;
}
}
void CGPSSimView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
{
CGPSSimDoc *pDoc = GetDocument();
int count = pDoc->GetCount();
int index = pDoc->GetCurIndex();
m_slider.SetRange(0, count, TRUE);
m_slider.SetPos(index);
}
void CGPSSimView::OnNMReleasedcaptureSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
CGPSSimDoc *pDoc = GetDocument();
int nPos = m_slider.GetPos();
pDoc->Reset();
while (nPos-- > 0)
pDoc->Next();
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -