From fb91015025b055945101ad58684ca96e7281700e Mon Sep 17 00:00:00 2001 From: cbwu <504-wuchengbo@htsdfp.com> Date: Fri, 9 Aug 2024 08:32:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=B9=E9=87=8F=E8=88=AA=E7=BA=BF?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=95=E7=82=B9=E5=81=8F=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GISControlDlg.rc | 27 +++++++++----- GISDlg.cpp | 84 ++++++++++++++++++++++++++++++++------------ GISDlg.h | 2 +- resource.h | 3 +- setmultiroutedlg.cpp | 29 +++++++++++++++ setmultiroutedlg.h | 9 +++++ 6 files changed, 121 insertions(+), 33 deletions(-) diff --git a/GISControlDlg.rc b/GISControlDlg.rc index a6b5c7c..7c810e9 100644 --- a/GISControlDlg.rc +++ b/GISControlDlg.rc @@ -422,21 +422,23 @@ BEGIN EDITTEXT IDC_EDIT_EXTERNALLENGTH,70,46,41,15,ES_AUTOHSCROLL,WS_EX_RIGHT END -IDD_DLG_SETMULTIROUTE DIALOGEX 0, 0, 210, 159 +IDD_DLG_SETMULTIROUTE DIALOGEX 0, 0, 210, 171 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "����������������" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "ȷ��",IDOK,39,125,61,20 - PUSHBUTTON "ȡ��",IDCANCEL,118,125,61,20 + DEFPUSHBUTTON "ȷ��",IDOK,39,142,61,20 + PUSHBUTTON "ȡ��",IDCANCEL,118,142,61,20 LTEXT "�����(m):",IDC_STATIC,25,41,65,14 EDITTEXT IDC_EDIT_LINEINTERVAL,112,37,77,21,ES_CENTER | ES_AUTOHSCROLL LTEXT "ƫ�ƽǶ�(��):",IDC_STATIC,25,14,65,14 EDITTEXT IDC_EDIT_AZIMUTH,112,10,77,21,ES_CENTER | ES_AUTOHSCROLL - LTEXT "�߶ȼ��(m):",IDC_STATIC,25,69,65,14 - EDITTEXT IDC_EDIT_HEIGHTINTERVAL,112,65,77,21,ES_CENTER | ES_AUTOHSCROLL - LTEXT "��������:",IDC_STATIC,26,96,65,14 - EDITTEXT IDC_EDIT_LINENUMBER,112,92,77,21,ES_CENTER | ES_AUTOHSCROLL + LTEXT "�߶ȼ��(m):",IDC_STATIC,25,68,65,14 + EDITTEXT IDC_EDIT_HEIGHTINTERVAL,112,64,77,21,ES_CENTER | ES_AUTOHSCROLL + LTEXT "��������:",IDC_STATIC,26,95,65,14 + EDITTEXT IDC_EDIT_LINENUMBER,112,91,77,21,ES_CENTER | ES_AUTOHSCROLL + LTEXT "������ƫ��(ˮƽ):",IDC_STATIC,25,120,65,14 + COMBOBOX IDC_COMBO_HPT,113,118,76,63,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -463,6 +465,13 @@ BEGIN 0 END +IDD_DLG_SETMULTIROUTE DLGINIT +BEGIN + IDC_COMBO_HPT, 0x403, 2, 0 +0x0030, + 0 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -582,9 +591,9 @@ BEGIN IDD_DLG_SETMULTIROUTE, DIALOG BEGIN LEFTMARGIN, 3 - RIGHTMARGIN, 204 + RIGHTMARGIN, 207 TOPMARGIN, 3 - BOTTOMMARGIN, 152 + BOTTOMMARGIN, 167 END END #endif // APSTUDIO_INVOKED diff --git a/GISDlg.cpp b/GISDlg.cpp index bd4ab35..9ecea44 100644 --- a/GISDlg.cpp +++ b/GISDlg.cpp @@ -5768,15 +5768,18 @@ void CGISDlg::OnEnddesign() // double azmuth,heightInterval,lineInterval,numLine; bool bSaveMultiLine = false; CString pathName; + int singlePointNumber; if (g_b981AMulti && dlg.m_bCheckMultiLine) { SetMultiRouteDlg multiRouteDlg; + multiRouteDlg.SetPointNumber(m_designLinePointNum); if (multiRouteDlg.DoModal() == IDOK ) { azmuth = multiRouteDlg.azmuth; heightInterval = multiRouteDlg.heightInterval; lineInterval = multiRouteDlg.lineInterval; numLine = multiRouteDlg.numLine; + singlePointNumber = multiRouteDlg.GetHPointNumber(); bSaveMultiLine = true; } else @@ -5850,7 +5853,7 @@ void CGISDlg::OnEnddesign() // if (g_b981AMulti && bSaveMultiLine) { vector<vector<PtStruct>> resultLines; - GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines); + GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines,singlePointNumber); vector<CString>savePathNameArr; SaveMultiRouteLine(pathName,heightInterval,savePathNameArr,resultLines); } @@ -8570,13 +8573,14 @@ void CGISDlg::OnShowDesignSurveyLineDlg() /****************************�������һ������************************************/ -void CGISDlg::GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines) +void CGISDlg::GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines,int hPtOffset) { GeoCompute geoComputer; double tmpLon,tmpLat; vector<PtStruct> line; double dist = 0; double lineAzimuth = 0; + //bool bOneOffset = false; for (int j=0;j< lineNumber;++j) { line.clear(); @@ -8586,27 +8590,60 @@ void CGISDlg::GetMultiRouteLine(double azimuth,double lineInterval,int lineNumbe lineAzimuth = azimuth; for (int i=0;i< nLinePts;++i) { - PtStruct line0 = lineStruct[i]; - PtStruct line1 = lineStruct[i+1]; - geoComputer.computeOffsetGeoPosition(tmpLon,tmpLat,lineAzimuth,dist/1000,tmpLon,tmpLat); - PtStruct pt; - pt.dX = tmpLon; - pt.dY = tmpLat; - pt.nH = lineStruct[i].nH; - pt.nL = lineStruct[i].nL; - pt.nPt = lineStruct[i].nPt; - pt.nV = lineStruct[i].nV; - pt.ch1 = lineStruct[i].ch1; - pt.ch2 = lineStruct[i].ch2; - line.push_back(pt); - - //CalculateTwoPtsAzimuth(azimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3); - if (i+1<nLinePts) + //PtStruct line0 = lineStruct[i]; + //PtStruct line1 = lineStruct[i+1]; +/* + if (hPtOffset>0 && i!=(hPtOffset-1)) //��ijһ��ˮƽ����ƫ�� + { + tmpLon = lineStruct[i].dX; + tmpLat = lineStruct[i].dY; + bOneOffset = true; + } + else + {*/ + if (hPtOffset == 0) { - CalculateTwoPtsDistanceAzimuth(dist,lineAzimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3); + geoComputer.computeOffsetGeoPosition(tmpLon,tmpLat,lineAzimuth,dist/1000,tmpLon,tmpLat); + PtStruct pt; + pt.dX = tmpLon; + pt.dY = tmpLat; + pt.nH = lineStruct[i].nH; + pt.nL = lineStruct[i].nL; + pt.nPt = lineStruct[i].nPt; + pt.nV = lineStruct[i].nV; + pt.ch1 = lineStruct[i].ch1; + pt.ch2 = lineStruct[i].ch2; + line.push_back(pt); + + if (i+1<nLinePts) + { + CalculateTwoPtsDistanceAzimuth(dist,lineAzimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3); + } + } + else//��ijһ��ˮƽ����ƫ�� + { + PtStruct pt; + pt.nH = lineStruct[i].nH; + pt.nL = lineStruct[i].nL; + pt.nPt = lineStruct[i].nPt; + pt.nV = lineStruct[i].nV; + pt.ch1 = lineStruct[i].ch1; + pt.ch2 = lineStruct[i].ch2; + if (i!=(hPtOffset-1)) + { + pt.dX = lineStruct[i].dX; + pt.dY = lineStruct[i].dY; + } + else + { + geoComputer.computeOffsetGeoPosition(lineStruct[i].dX,lineStruct[i].dY,lineAzimuth,dist/1000,tmpLon,tmpLat); + pt.dX = tmpLon; + pt.dY = tmpLat; + //int i = 0; + } + line.push_back(pt); } - //dist = geoComputer.VincentyDistance(lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY); } resultLines.push_back(line); } @@ -8652,6 +8689,8 @@ void CGISDlg::ShowMultiRouteSetting() if (g_b981AMulti) { SetMultiRouteDlg multiRouteDlg; + DrawLineDataStruct selectLineData = m_ShowedLineDataList[m_lineSelectedID]; + multiRouteDlg.SetPointNumber(selectLineData.pointNum); if (multiRouteDlg.DoModal() == IDOK ) { azmuth = multiRouteDlg.azmuth; @@ -8659,16 +8698,17 @@ void CGISDlg::ShowMultiRouteSetting() lineInterval = multiRouteDlg.lineInterval; numLine = multiRouteDlg.numLine; bSaveMultiLine = true; + int hPtNumber = multiRouteDlg.GetHPointNumber(); CString selectLinePath = m_lineFullPathName[m_lineSelectedID]; if (ExtractFileType(selectLinePath) == ".route") return; // ��װ���ĺ��߲������������� - DrawLineDataStruct selectLineData = m_ShowedLineDataList[m_lineSelectedID]; + CString dirPath = ExtractDirPath(selectLinePath); CString fileName = ExtractFileName(selectLinePath,false); pathName = dirPath + "\\" + fileName; //�������߱��� vector<vector<PtStruct>> resultLines; - GetMultiRouteLine(azmuth,lineInterval,numLine,selectLineData.pts,selectLineData.pointNum,resultLines); + GetMultiRouteLine(azmuth,lineInterval,numLine,selectLineData.pts,selectLineData.pointNum,resultLines,hPtNumber); SaveMultiRouteLine(pathName,heightInterval,pathNameArr,resultLines); } else diff --git a/GISDlg.h b/GISDlg.h index 0142b63..f69b554 100644 --- a/GISDlg.h +++ b/GISDlg.h @@ -997,7 +997,7 @@ public: //���ܣ���ʾ��溽����ƶԻ��� void OnShowDesignSurveyLineDlg(); /****************************�������һ������************************************/ - void GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines); + void GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines,int hPtOffset=0); void SaveMultiRouteLine(CString pathDirName,double heightInterval,vector<CString>& savePathNameArr,const vector<vector<PtStruct>>& resultLines); void ShowMultiRouteSetting(); diff --git a/resource.h b/resource.h index 2f68f82..9bfd65c 100644 --- a/resource.h +++ b/resource.h @@ -164,6 +164,7 @@ #define IDR_TOOLBAR3 1056 #define IDC_EDIT_MARKER_LAT 1056 #define IDC_EDIT_FLYSPEED 1056 +#define IDC_COMBO_HPT 1056 #define IDB_BITMAP2 1057 #define IDC_EDIT_MARKER_NAME 1057 #define IDC_TXT_FLYTIME 1057 @@ -435,7 +436,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 1174 #define _APS_NEXT_COMMAND_VALUE 32945 -#define _APS_NEXT_CONTROL_VALUE 1056 +#define _APS_NEXT_CONTROL_VALUE 1057 #define _APS_NEXT_SYMED_VALUE 1000 #endif #endif diff --git a/setmultiroutedlg.cpp b/setmultiroutedlg.cpp index 7400f58..3d4f327 100644 --- a/setmultiroutedlg.cpp +++ b/setmultiroutedlg.cpp @@ -14,6 +14,9 @@ SetMultiRouteDlg::SetMultiRouteDlg(CWnd* pParent /*=NULL*/) : CBCGPDialog(SetMultiRouteDlg::IDD, pParent) { EnableVisualManagerStyle(TRUE, TRUE); + + numPoints = 0; + selectHPtNumber = 0; } SetMultiRouteDlg::~SetMultiRouteDlg() @@ -23,11 +26,13 @@ SetMultiRouteDlg::~SetMultiRouteDlg() void SetMultiRouteDlg::DoDataExchange(CDataExchange* pDX) { CBCGPDialog::DoDataExchange(pDX); + DDX_Control(pDX, IDC_COMBO_HPT, m_HPtCombobox); } BEGIN_MESSAGE_MAP(SetMultiRouteDlg, CBCGPDialog) ON_BN_CLICKED(IDOK, &SetMultiRouteDlg::OnBnClickedOk) + ON_CBN_SELCHANGE(IDC_COMBO_HPT, &SetMultiRouteDlg::OnCbnSelchangeComboHpt) END_MESSAGE_MAP() BOOL SetMultiRouteDlg::OnInitDialog() @@ -39,6 +44,14 @@ BOOL SetMultiRouteDlg::OnInitDialog() GetDlgItem( IDC_EDIT_HEIGHTINTERVAL )->SetWindowTextA("10"); GetDlgItem( IDC_EDIT_LINENUMBER )->SetWindowTextA("3"); + CString str; + for (int i=1;i<=numPoints;++i) + { + str.Format("%d",i); + m_HPtCombobox.InsertString(i,str); + } + m_HPtCombobox.SetCurSel(0); + return TRUE; } @@ -75,3 +88,19 @@ void SetMultiRouteDlg::OnBnClickedOk() this->OnOK(); } + +void SetMultiRouteDlg::SetPointNumber(int num) +{ + numPoints = num; +} + +int SetMultiRouteDlg::GetHPointNumber() +{ + return selectHPtNumber; +} + + +void SetMultiRouteDlg::OnCbnSelchangeComboHpt() +{ + selectHPtNumber = m_HPtCombobox.GetCurSel(); +} diff --git a/setmultiroutedlg.h b/setmultiroutedlg.h index eef9e4b..dd51328 100644 --- a/setmultiroutedlg.h +++ b/setmultiroutedlg.h @@ -1,5 +1,6 @@ #pragma once #include "Resource.h" +#include "afxwin.h" // SetMultiRouteDlg �Ի��� @@ -24,4 +25,12 @@ protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedOk(); + void SetPointNumber(int num); + int GetHPointNumber(); +private: + CBCGPComboBox m_HPtCombobox; + int numPoints; + int selectHPtNumber; +public: + afx_msg void OnCbnSelchangeComboHpt(); };