You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
5.0 KiB
C++

2 years ago
// DlgDemAlt.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "DlgDemAlt.h"
#include "afxdialogex.h"
#include "MapElevation.h"
MapElevation m_mapElevationDem;
// CDlgDemAlt <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CDlgDemAlt, CBCGPDialog)
CDlgDemAlt::CDlgDemAlt(CWnd* pParent /*=NULL*/)
: CBCGPDialog(CDlgDemAlt::IDD, pParent)
{
EnableVisualManagerStyle(TRUE, TRUE);
}
CDlgDemAlt::~CDlgDemAlt()
{
}
void CDlgDemAlt::DoDataExchange(CDataExchange* pDX)
{
CBCGPDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CONTAINER_CHARTDEM, m_wndChart);
}
BEGIN_MESSAGE_MAP(CDlgDemAlt, CBCGPDialog)
ON_WM_SIZE()
ON_WM_CLOSE()
END_MESSAGE_MAP()
// CDlgDemAlt <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CDlgDemAlt::OnInitDialog()
{
CBCGPDialog::OnInitDialog();
CenterWindow();
pChart = m_wndChart.GetChart();
ASSERT_VALID(pChart);
//Releaseģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD><EFBFBD>߱<EFBFBD><DFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><D7A3>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
#ifdef DEBUG
//pChart->SetColors(CBCGPChartTheme::CT_DEFAULT);
#else
pChart->SetColors(CBCGPChartTheme::CT_DEFAULT, TRUE);
#endif
//<2F><><EFBFBD>÷Ŵ<C3B7><C5B4><EFBFBD>С<EFBFBD><D0A1>ʽ
pChart->SetZoomScrollConfig(BCGPChartMouseConfig::ZSO_WHEEL_PAN, BCGPChartFormatSelection::ST_VERT_AXIS_ONLY);
pChart->SetSelectionType(BCGPChartFormatSelection::ST_VERT_AXIS_ONLY);
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pChart->EnableMouseTrackingMode(
BCGPChartHitInfo::HIT_DATA_POINT |
BCGPChartHitInfo::HIT_DATA_LABEL |
BCGPChartHitInfo::HIT_AXIS |
BCGPChartHitInfo::HIT_AXIS_NAME |
BCGPChartHitInfo::HIT_CHART_AREA |
BCGPChartHitInfo::HIT_LEGEND |
BCGPChartHitInfo::HIT_TITLE |
BCGPChartHitInfo::HIT_DIAGRAM |
BCGPChartHitInfo::HIT_DATA_TABLE |
BCGPChartHitInfo::HIT_ALL_ELEMENTS);
//<2F><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CBCGPInfoTipOptions infoTipOptions;
infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_BottomCenter;
m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);
pChart->SetLegendPosition(BCGPChartLayout::LP_NONE);
pXAxis = pChart->GetChartAxis(BCGP_CHART_X_PRIMARY_AXIS);
pYAxis = pChart->GetChartAxis(BCGP_CHART_Y_PRIMARY_AXIS);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>Ƹ߳<C6B8><DFB3><EFBFBD>Ϣ
pSeries1 = pChart->CreateSeries(_T(""), CBCGPColor(), BCGP_CT_DEFAULT, BCGPChartArea);
pSeries2 = pChart->CreateSeries(_T(""), CBCGPColor(/*CBCGPColor::LimeGreen*/), BCGP_CT_DEFAULT, BCGPChartLine);
BCGPChartFormatSeries style = pSeries2->GetSeriesFormat();
style.m_curveType = BCGPChartFormatSeries::CCT_NO_LINE;
pSeries2->SetSeriesFormat(style);
pSeries2->ShowDataLabel(TRUE);
pSeries2->ShowMarker(TRUE);
pChart->SetDirty(TRUE, TRUE);
m_wndChart.RedrawWindow();
return TRUE;
}
void CDlgDemAlt::DrawDemAltBetweenPts(double* ptLon, double* ptLat, int ptNumber)
{
pSeries1->RemoveAllDataPoints();
pSeries2->RemoveAllDataPoints();
pChart->RemoveAllChartObjects();
double _dHaveGotDis = -30;
for (int i=0;i<(ptNumber-1);i++)
{
double _dSecDis, _dSecDir; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
//<2F><><EFBFBD><EFBFBD><E3BABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>λ<EFBFBD><CEBB>
CalculateTwoPtsDistanceAzimuth(_dSecDis, _dSecDir, ptLon[i], ptLat[i], ptLon[i+1], ptLat[i+1], 3);
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
int _iInterDis = 30;
//<2F><>100<30><30>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
int _iInterNum = (int)(floor(_dSecDis/_iInterDis));
//<2F><>ֵ<EFBFBD><D6B5>λ<EFBFBD><CEBB>
double interPolLon = 0.0, interPolLat = 0.0;
float interPolHight = 0.0;
for (int j=0;j<=_iInterNum;j++)
{
CalculatePtCoordinate(interPolLon, interPolLat, ptLon[i], ptLat[i], _dSecDir, j*_iInterDis, 3);
//<2F><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD>ĸ߳<C4B8>
if(!m_mapElevationDem.getElevation(interPolHight, interPolLon, interPolLat))
{
//<2F>߳<EFBFBD><DFB3><EFBFBD>Ϣ<EFBFBD><CFA2>ȫ
BCGPMessageBox(_T("ȱ<EFBFBD>ٸ߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>"));
return ;
}
_dHaveGotDis += _iInterDis;
pSeries1->AddDataPoint(interPolHight, _dHaveGotDis);
//<2F><><EFBFBD>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>̷߳<DFB3><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ((i == 0) && (j == 0))
{
pSeries2->AddDataPoint(interPolHight, 0.0);
CString str;
str.Format(_T("%d"),i+1);
pSeries2->SetDataLabelDataFormat(str,i);
}
}
//<2F><><EFBFBD>Ǹ̷߳<DFB3><CCB7><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
{
pSeries2->AddDataPoint(interPolHight, _dHaveGotDis);
CString str;
str.Format(_T("%d"),i+2);
pSeries2->SetDataLabelDataFormat(str,i+1);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
if (ptNumber > 1)
{
CBCGPStrokeStyle m_strokeStyle;
m_strokeStyle.SetDashStyle(CBCGPStrokeStyle::BCGP_DASH_STYLE_DOT);
CBCGPChartLineObject* m_pLineSep;
m_pLineSep = pChart->AddChartLineObject(_dHaveGotDis, 0, _dHaveGotDis, interPolHight, CBCGPBrush(CBCGPColor::Tomato), 1.5, &m_strokeStyle);
}
}
pChart->SetAutoDisplayRange(TRUE, TRUE);
pChart->SetDirty(TRUE, TRUE);
m_wndChart.RedrawWindow();
}
void CDlgDemAlt::OnSize(UINT nType, int cx, int cy)
{
CBCGPDialog::OnSize(nType, cx, cy);
//ͼ<><CDBC><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><E4BBAF><EFBFBD>
if (m_wndChart.GetSafeHwnd())
{
CRect rect;
GetClientRect(&rect);
/*CRect rectChart;
m_wndChart.GetWindowRect(rectChart);
ScreenToClient(rectChart);
rectChart.right = rect.right - 5;
rectChart.bottom = rect.bottom - 5;*/
m_wndChart.MoveWindow(&rect,TRUE);
}
}
void CDlgDemAlt::OnClose()
{
::PostMessage(g_mapHwnd,WM_SEND_CLOSEDEMALT,0,0);
CBCGPDialog::OnClose();
}