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> resultLines; - GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines); + GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines,singlePointNumber); vectorsavePathNameArr; 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>& resultLines) +void CGISDlg::GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector>& resultLines,int hPtOffset) { GeoCompute geoComputer; double tmpLon,tmpLat; vector 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+10 && i!=(hPtOffset-1)) //仅某一点水平方向偏移 + { + 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> 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>& resultLines); + void GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector>& resultLines,int hPtOffset=0); void SaveMultiRouteLine(CString pathDirName,double heightInterval,vector& savePathNameArr,const vector>& 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(); }; -- 2.37.1.windows.1