www.pudn.com > GPS ToolKit Pro.rar > SatPicture.cpp
// SatPicture.cpp : implementation file // #include "stdafx.h" #include "GTKTestPanel.h" #include "GTKTestPanelDlg.h" #include "SatPicture.h" #include "comdef.h" #include#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define HEIGHT_MARGIN 6 #define WIDTH_MARGIN 6 #define PI 3.14159265358979 ///////////////////////////////////////////////////////////////////////////// // CSatPicture CSatPicture::CSatPicture() : m_bParamsCaluclated(false) { } CSatPicture::~CSatPicture() { } BEGIN_MESSAGE_MAP(CSatPicture, CStatic) //{{AFX_MSG_MAP(CSatPicture) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSatPicture message handlers void CSatPicture::OnPaint() { CPaintDC dc(this); // device context for painting if(!m_bParamsCaluclated) { // Set our parameters GetClientRect(&m_clientRect); m_outerCircle.left = m_clientRect.left + WIDTH_MARGIN; m_outerCircle.right = m_clientRect.right - WIDTH_MARGIN; m_outerCircle.top = m_clientRect.top + HEIGHT_MARGIN; m_outerCircle.bottom = m_clientRect.bottom - HEIGHT_MARGIN; m_outerCircleRadius = (m_outerCircle.right - m_outerCircle.left)/2; m_innerCircle.left = m_outerCircle.left + (m_outerCircleRadius / 2); m_innerCircle.right = m_outerCircle.right - (m_outerCircleRadius / 2); m_innerCircle.top = m_outerCircle.top + (m_outerCircleRadius / 2); m_innerCircle.bottom = m_outerCircle.bottom - (m_outerCircleRadius / 2); m_tinyCircle.left = m_outerCircle.left + m_outerCircleRadius - 2; m_tinyCircle.right = m_outerCircle.right - (m_outerCircleRadius - 2); m_tinyCircle.top = m_outerCircle.top + (m_outerCircleRadius - 2); m_tinyCircle.bottom = m_outerCircle.bottom - (m_outerCircleRadius - 2); m_bParamsCaluclated = true; } // Draw background // Clear client area CBrush bgBrush(GetSysColor(COLOR_BTNFACE)); dc.FillRect(&m_clientRect, &bgBrush); // Clear brush fill dc.SelectStockObject(NULL_BRUSH); // Set FG, BG colors and font dc.SetBkColor(GetSysColor(COLOR_BTNFACE)); dc.SetTextColor(CIRCLECOLOR); dc.SelectStockObject(DEFAULT_GUI_FONT); CPen thePen(PS_SOLID, 0, CIRCLECOLOR); dc.SelectObject(thePen); // Draw circles dc.Ellipse(&m_outerCircle); dc.Ellipse(&m_innerCircle); dc.Ellipse(&m_tinyCircle); // Compass point labels dc.ExtTextOut(m_outerCircle.left + m_outerCircleRadius - 3, m_outerCircle.top - 6, ETO_OPAQUE, NULL, "N", NULL); dc.ExtTextOut(m_outerCircle.right - 5, m_outerCircle.top + m_outerCircleRadius - 7, ETO_OPAQUE, NULL, "E", NULL); dc.ExtTextOut(m_outerCircle.left + m_outerCircleRadius - 3, m_outerCircle.bottom - 7, ETO_OPAQUE, NULL, "S", NULL); dc.ExtTextOut(m_outerCircle.left - 4, m_outerCircle.top + m_outerCircleRadius - 7, ETO_OPAQUE, NULL, "W", NULL); // Calculate and draw satellite positions double r, x, y; long centerPoint = m_outerCircle.left + m_outerCircleRadius; CString strPRN; char lpszPRN[3]; bool bIsFixSat; int i, j; for(i = 0; i < m_vecSatelliteInViewPRNs.size(); i++) { bIsFixSat = false; //if(i < SNRBarUbound) r = ((90. - m_vecEl[i]) / 90.) * m_outerCircleRadius; x = (sin(m_vecAz[i] * PI / 180.) * r) + centerPoint; y = -(cos(m_vecAz[i] * PI / 180.) * r) + centerPoint; // Determine whether this satellite is a fix satellite for(j = 0; j < m_vecFixSatellitePRNs.size(); j++) { if(m_vecFixSatellitePRNs[j] == m_vecSatelliteInViewPRNs[i]) { bIsFixSat = true; break; } } if(bIsFixSat) { dc.SetBkColor(FIXSATCOLOR); } else { dc.SetBkColor(SATINVIEWCOLOR); } // Set satellite name string itoa(m_vecSatelliteInViewPRNs[i], lpszPRN, 10); if(m_vecSatelliteInViewPRNs[i] < 10) { strPRN = CString("0") + lpszPRN; } else { strPRN = lpszPRN; } // Draw Satellite dc.SetTextColor(SATTEXTCOLOR); dc.ExtTextOut((int)x-5, (int)y-5, ETO_OPAQUE, NULL, strPRN, NULL); } // Do not call CStatic::OnPaint() for painting messages } void CSatPicture::DrawSatellites(vector &vecFixSatellitePRNs, vector &vecSatelliteInViewPRNs, vector &vecAz, vector &vecEl) { m_vecFixSatellitePRNs = vecFixSatellitePRNs; m_vecSatelliteInViewPRNs = vecSatelliteInViewPRNs; m_vecAz = vecAz; m_vecEl = vecEl; Invalidate(); }