|
|
// DlgDemAlt.cpp : 实现文件
|
|
|
//
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
#include "DlgDemAlt.h"
|
|
|
#include "afxdialogex.h"
|
|
|
|
|
|
#include "MapElevation.h"
|
|
|
|
|
|
MapElevation m_mapElevationDem;
|
|
|
|
|
|
// CDlgDemAlt 对话框
|
|
|
|
|
|
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 消息处理程序
|
|
|
|
|
|
|
|
|
BOOL CDlgDemAlt::OnInitDialog()
|
|
|
{
|
|
|
CBCGPDialog::OnInitDialog();
|
|
|
|
|
|
CenterWindow();
|
|
|
|
|
|
pChart = m_wndChart.GetChart();
|
|
|
ASSERT_VALID(pChart);
|
|
|
|
|
|
//Release模式下,曲线背景会变白,在此设置颜色
|
|
|
#ifdef DEBUG
|
|
|
//pChart->SetColors(CBCGPChartTheme::CT_DEFAULT);
|
|
|
#else
|
|
|
pChart->SetColors(CBCGPChartTheme::CT_DEFAULT, TRUE);
|
|
|
#endif
|
|
|
|
|
|
//设置放大缩小方式
|
|
|
pChart->SetZoomScrollConfig(BCGPChartMouseConfig::ZSO_WHEEL_PAN, BCGPChartFormatSelection::ST_VERT_AXIS_ONLY);
|
|
|
pChart->SetSelectionType(BCGPChartFormatSelection::ST_VERT_AXIS_ONLY);
|
|
|
|
|
|
//曲线使能鼠标跟踪
|
|
|
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);
|
|
|
|
|
|
//设置:当鼠标移动到曲线上,会显示当前点的信息
|
|
|
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);
|
|
|
|
|
|
//创建曲线1,绘制高程信息
|
|
|
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; //航段两点的距离和方向
|
|
|
|
|
|
//计算航段起点和终点的水平距离和方位角
|
|
|
CalculateTwoPtsDistanceAzimuth(_dSecDis, _dSecDir, ptLon[i], ptLat[i], ptLon[i+1], ptLat[i+1], 3);
|
|
|
|
|
|
//插值距离
|
|
|
int _iInterDis = 30;
|
|
|
|
|
|
//以100米为间距,计算插值个数
|
|
|
int _iInterNum = (int)(floor(_dSecDis/_iInterDis));
|
|
|
|
|
|
//插值点位置
|
|
|
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);
|
|
|
|
|
|
//获取插值点的高程
|
|
|
if(!m_mapElevationDem.getElevation(interPolHight, interPolLon, interPolLat))
|
|
|
{
|
|
|
//高程信息不全
|
|
|
BCGPMessageBox(_T("缺少高程数据!"));
|
|
|
return ;
|
|
|
}
|
|
|
|
|
|
_dHaveGotDis += _iInterDis;
|
|
|
|
|
|
pSeries1->AddDataPoint(interPolHight, _dHaveGotDis);
|
|
|
|
|
|
//标记第一个高程分析点序号
|
|
|
if ((i == 0) && (j == 0))
|
|
|
{
|
|
|
pSeries2->AddDataPoint(interPolHight, 0.0);
|
|
|
|
|
|
CString str;
|
|
|
str.Format(_T("%d"),i+1);
|
|
|
pSeries2->SetDataLabelDataFormat(str,i);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//标记高程分析的点序号
|
|
|
{
|
|
|
pSeries2->AddDataPoint(interPolHight, _dHaveGotDis);
|
|
|
|
|
|
CString str;
|
|
|
str.Format(_T("%d"),i+2);
|
|
|
pSeries2->SetDataLabelDataFormat(str,i+1);
|
|
|
}
|
|
|
|
|
|
//绘制纵向分隔线
|
|
|
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);
|
|
|
|
|
|
//图表控件随对话框大小变化而变化
|
|
|
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();
|
|
|
}
|