From f612c56f5adedafb3083c79fcfd9e9044c152b79 Mon Sep 17 00:00:00 2001 From: cbwu Date: Thu, 29 Jun 2023 13:18:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=96=E8=BE=91=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=EF=BC=9B=E5=A2=9E=E5=8A=A0=E7=BC=96=E8=BE=91=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=9D=A1=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E8=88=AA=E7=BA=BF=E4=BA=A4=E4=BA=92=E5=BC=8F=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MapDisplay.pro.user | 2 +- Resources/AddNode.png | Bin 0 -> 568 bytes Resources/DeleteNode.png | Bin 0 -> 288 bytes Resources/Edit.png | Bin 0 -> 598 bytes Resources/Edit1.png | Bin 0 -> 569 bytes Resources/EditNode.png | Bin 0 -> 722 bytes Resources/EditNode1.png | Bin 0 -> 677 bytes displayroutedialog.cpp | 15 ++-- layeroperator.cpp | 97 +++++++++++++++++---- layeroperator.h | 3 + mainwindow.cpp | 184 ++++++++++++++++++++++++++++++++++----- mainwindow.h | 24 ++++- res.qrc | 6 ++ 13 files changed, 280 insertions(+), 51 deletions(-) create mode 100644 Resources/AddNode.png create mode 100644 Resources/DeleteNode.png create mode 100644 Resources/Edit.png create mode 100644 Resources/Edit1.png create mode 100644 Resources/EditNode.png create mode 100644 Resources/EditNode1.png diff --git a/MapDisplay.pro.user b/MapDisplay.pro.user index ba98d42a..8d937b09 100644 --- a/MapDisplay.pro.user +++ b/MapDisplay.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/Resources/AddNode.png b/Resources/AddNode.png new file mode 100644 index 0000000000000000000000000000000000000000..843c69339bb3b7db0807c5805b4168179001d780 GIT binary patch literal 568 zcmV-80>}M{P)Px$@<~KNR9Hvtm9a}BK@`Tnw|iKKAa1mFQ!NvfGB6HcTw3NtRDkk*4Q0SD7NnGCEOuYF30KCJX0RRJFE&<3%yDt|7J`!ZJZ? zyUL^%l>i`n*3!|{@>8dOQ(`OLn7Rh zQzQ}&SRD9f++&qs!lJ>)*m!cgY=`Fw`Jzz%gkX13b^}A>H|kG1$|F}ryp<|F@PMB& zK5G2sWppFAw^(aj;DwG#XyG>3m(2@aN5Uy@^RKffyLsHyhpDZt`rmUVV)x8 kvFhJN0SVqlMt(+yTSbM6Y+5H|fxcw$boFyt=akR{0Qga9>i_@% literal 0 HcmV?d00001 diff --git a/Resources/Edit.png b/Resources/Edit.png new file mode 100644 index 0000000000000000000000000000000000000000..4062fe435e79b583b5bee41bcd8e7c2e95a9a2f7 GIT binary patch literal 598 zcmV-c0;&CpP)Px%5J^NqR9HvtS51r5KoEUz{SDqcC@7?7J?_nmd+{HLf}-FTxF{$n&Ln~^m`p@b zL03UpK~YfFU*N_41KxBxhXp-&(*H0|va=JjlVp;a1m@s0mh5VZK&m-^~z}_JM`uI}>AfX$D{9I&jwRK7hcsI1GkL6Jn@(5^W!Y;4a(Nm8Em!9RtPl6HkJG)7@AG06D=;Mir=yD` zUZ%j#+JJA15^0ox>F6?u=Sk+k`Ch=+<5X;nfaB>3g{Miw374WSUzL@x5dy~3H3*Lr zFk!`Z`JxPbaFR!saWzpBwmP~Y;z5!*aW(S!tO|H-0>;%X0AcE=UAI1;R0Xd^z_{`N z+)ElxxY_IS;UwTw6L4JJA&`Cp+BV?*B5X80 zVRQ?^uc|<~e#AZi2X|~gZNLL*zr1^3*A-g}Ji9q_X%&s-#{tCOU^uP6;=y)9eQcBt krS-8Ui!lE+o4Epi0g+M|Flt7?h5!Hn07*qoM6N<$f)UOLC;$Ke literal 0 HcmV?d00001 diff --git a/Resources/Edit1.png b/Resources/Edit1.png new file mode 100644 index 0000000000000000000000000000000000000000..48a3b1b2f306638099b5bc063e4bfb0ce56ff9a8 GIT binary patch literal 569 zcmV-90>=G`P)Px$^GQTOR9Hvtm(6MvK@^40eF%3h6m+FacW%taHwXq41^>XH)M-!@6f~fyDE6t* zC@2P$1eEv$Zp;g0r@MeIT$y*6l7=3s^mI>kx(8GxEZ&e#+{Md~7m0(Iqb;2nOLNYhH?t3; zKnP*Ud;dAv0+J&ETap&K2q1Y8!24+JIY}FJwI(^xNq}?iikZEQc7DNo|FN-+)j%Hy zNL~Z*I;wd|(%K{!r{+MGW!FOpFQc7b_1?crwQwo|ND@FE!ImYxNx_SFZviB40(drp znc0mz&tJ8H_ZHxsyKQDqB3LF#ZQ;EHkh}}vVFbG+>G^)(oduA*58&S!5JI@)y?@#S z&$8@v2;l{QFV(Z7(>p*i9@qCIJ({$0lHULnhg@+W?O}EmP!v1{U{%se%J!)XNC9hx z+jJe63;1swNM5(vIzjS#`PH=g41Y$K(H#K4+kzVM4gxq*#(qgU9Ou=|f$E6u$=|bl zY-rV9%R>l@X0{kzPWy`34Iylr*=F)m+LyH7_48k|nLF?o_7Dg#0ko|L00000NkvXX Hu0mjfl~nmT literal 0 HcmV?d00001 diff --git a/Resources/EditNode.png b/Resources/EditNode.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8c58c9a2987ae1054466daaa118ccea698dc3d GIT binary patch literal 722 zcmV;@0xkWCP)Px%j7da6R9Hvtl|e`pQ5eVn-nHG6Ny^2?chr)_q%-kh1rM%GSD$?z-V@2j?{K=6(O) z{J;PE9-+byRahVY7l7$W&N-qSD-gIPA{zkn_M5JpRtc*TGCKGwh`VzeS8hO(Va-_{ev&w;xn#52}x1H6Yp4~X@!2#MD-oz|N|nEc?*udVg; z_yJr5P@|k!PdF*tiE)%bae&(at_F!wXnv~_R_{V)JjprH{P$8_TLutzQ*l8w>h~wL zx2Mdi+3)Ra7;$AsudM_S9+3OKc3IC$f$$wRrk5IFqB~jJN){{P*8Y0Dp?PliR?$g-A3r@xT%Q@F0WQ z0JMQQ4WM5oV*QciR0H$ur`2XdQ3w3US8G9?n>t27H%KT$P`B2)Pm>;y9sLqGz~XUCohOKzj2%5&5dd5m zuddr#{nDUc$7h_Di9(2V%Rs(R#FOWk`KL<6u2uwK^9|W#gz!{3*7k}3EM&n=Jt8u^ zjMMZaA0m(zPx%Ur9tkR9Hvtl`&`(Q4ogz*$r1&1gpRy5iAshn1Hod2|`c=uTX0Rg=6O(0kIGc z1SN9rn|G2^uu#y5mA#-M5)gtKBM1gdErNnzXOMj(C%14Wd%4Sn?4`)I`)2-+nSW*o z1O8~h`q*9o%&cieL?jou|3r2Gn&oHaWf2+4%baWa%*>14`_uJ${YxGYSpd(7=sJLd zg+gI=dV2cTR)S;!JW$n_04@^IVE~U+b&iPMiOBoaFzv=|{@dvEtO1Ck=o%625)o6W zR3^OlB>>~9IzdDQB3kg?e{jxCwLGJ#XcK1B0L(lNU?D4!F=ls?Bokp6j$3PQbpl}K zqayOEm)2!28)lvda9>33bW4)e0%Oc4BDxXB@uP0>odC`Om>C`(9;sHVzq=*L@WsC> zs_G%<+{g9eJFeR(ie`vtR755>3ebFSj4|H(Dd$|VFMw8m=KzcnQEaWXX`)`8Z;W}X zs!l{6c7o`7aEvi0RrL~pV*nP3XkJy%w>w`|%K(tdlkT40AoZnrm8=JAaK@NXN)PT>bLbqvug#i$k%HDGoJwv0r=^? zkHRpFlO&m~*XvKRa`gq!iz%7;o~lj;K@hF1th{bC8q2u?G{vGQIzdD?hlYlZ)M~Zw zxdXH&=_-KcYQH=XfKsVcC>D!vRQ0TLZfP~dmU*CEh?%bd_#+~GetQueryDef(queryDef); layer->SetQueryDef(queryDef); //图层样式 - UGStyle lineStyle; - lineStyle.SetLineStyle(6); - lineStyle.SetLineColor(routeGVar.getRouteTypeColor(routeType.toInt())); - lineStyle.SetLineWidth(1); + UGStyle lineStyle = routeGVar.getRouteStyle(routeType.toInt()); layer->SetStyle(lineStyle); // 航点标记动态图层 @@ -135,12 +132,12 @@ void DisplayRouteDialog::showRoute() QStringList num = routeNumberList.join("\\,").split(","); int i = 0; LayerOperator layerOpt; + UGGeoLine* line = NULL; while(!res->IsEOF()) { - UGGeoLine* line = new UGGeoLine(); // line->SetStyle(&lineStyle); res->GetGeometry(pTempGeomtry); - pTempGeomtry->ConvertToLine(*line); + line = (UGGeoLine*)pTempGeomtry; QString lineAlias = routeType + "_" + num.at(i); pDyLayer->Add(Translator::QStr2UGStr(lineAlias),line); @@ -149,10 +146,14 @@ void DisplayRouteDialog::showRoute() i++; res->MoveNext(); + line = NULL; } pMapEditorWnd->Refresh(); - + pMap = NULL; + pTempGeomtry = NULL; + pDyLayer = NULL; + layer = NULL; /******************************************/ /**********************DyLayer********************/ diff --git a/layeroperator.cpp b/layeroperator.cpp index 149861cd..ccc86cbf 100644 --- a/layeroperator.cpp +++ b/layeroperator.cpp @@ -7,6 +7,8 @@ #include "Geometry/UGGeoPoint.h" #include "Scene/UGSelection3D.h" #include "Render/UGRenderObject.h" +#include "QDynamicLayer.h" +#include "QDynamicLayers.h" LayerOperator::LayerOperator() { @@ -126,6 +128,21 @@ void LayerOperator::getDynamicLayer(UGMap *pMap, UGDynamicLayer *&pDyLayer, UGSt } } +void LayerOperator::getQDynamicLayer(QMapControl *pMapControl, QDynamicLayer *&pDyLayer, QString dyLayerName) +{ + UGDynamicLayers* pDylayers = &(pMapControl->GetMap()->m_DynamicLayers); + if(pDylayers->GetDynamicLayer(Translator::QStr2UGStr(dyLayerName)==NULL)) + { + pDyLayer = new QDynamicLayer(dyLayerName); + } + else + { + int index = pDylayers->IndexOf(pDylayers->GetDynamicLayer(Translator::QStr2UGStr(dyLayerName))); + pDyLayer = pMapControl->getDynamicLayers().Get(index); + } + pDylayers = NULL; +} + UGLayer *LayerOperator::appendDatasetToMap(UGDatasetPtr pDataset, UGMap *m_pMap) { // 判断数据有效性 @@ -139,10 +156,13 @@ UGLayer *LayerOperator::appendDatasetToMap(UGDatasetPtr pDataset, UGMap *m_pMap) // 将Dataset添加到地图中 UGLayer* pLayer = pMap->m_Layers.AddDataset(pDataset, pDataset->GetType()); + pMap = NULL; + pLayer = NULL; + return pLayer; } -//添加航点标记 +//添加二维航点标记 void LayerOperator::addNodeLabel(UGGeoLine *pGeoline, UGDynamicLayer *pLabelDyLayer, QString routeType, QString routeNum) { int pointNum = pGeoline->GetPointCount(); @@ -151,35 +171,76 @@ void LayerOperator::addNodeLabel(UGGeoLine *pGeoline, UGDynamicLayer *pLabelDyLa UGPoint2D point; //labelStyle - UGTextStyle tSty; - tSty.SetBackColor(routeGVar.getRouteTypeColor(routeType.toInt())); - tSty.SetForeColor(routeGVar.getRouteTypeColor(routeType.toInt())); - tSty.SetSize(25); + UGTextStyle tSty = routeGVar.getLabelTextStyle(routeType.toInt()); tSty.SetFixedSize(true); UGStyle sty; - sty.SetMarkerSize(8); - sty.SetFillForeColor(routeGVar.getRouteTypeColor(routeType.toInt())); +// sty.SetMarkerStyle(0); + sty.SetMarkerSize(6); + sty.SetFillForeColor(UGRGB(255,0,0)); +// sty.SetFillForeColor(routeGVar.getRouteTypeColor(routeType.toInt())); +// sty.SetPointColor(routeGVar.getRouteTypeColor(routeType.toInt())); + auto pGeoText(new UGGeoText); + pGeoText->SetTextStyle(tSty); + QString geoTextName; for(int i=1;i<=pointNum;i++) { point.x = nodePoints->x; point.y = nodePoints->y; - - auto pGeoText(new UGGeoText); - QString geoTextName = routeNum + "-" + QString::number(i); + //添加注记 + geoTextName = routeNum + "-" + QString::number(i); auto text = UGSubText(Translator::QStr2UGStr(geoTextName)); - pGeoText->Make(point, text); - pGeoText->SetTextStyle(tSty); - - auto pGeoNode(new UGGeoPoint); - pGeoNode->Make(point); - pGeoNode->SetStyle(&sty); - + pGeoText->AddSub(point, text); pLabelDyLayer->Add(Translator::QStr2UGStr("LB"+geoTextName),pGeoText); - pLabelDyLayer->Add(Translator::QStr2UGStr("PT"+geoTextName),pGeoNode); + //添加节点 +// auto pGeoNode(new UGGeoPoint); +// pGeoNode->Make(point); +// pGeoNode->SetStyle(&sty); +// pLabelDyLayer->Add(Translator::QStr2UGStr("PT"+geoTextName),pGeoNode); nodePoints++; //Node指针移动 +// delete pGeoNode; + } +// delete pGeoText; + nodePoints = NULL; +} + +void LayerOperator::addNodeLabel(QMapControl *qMapControl, UGRecordsetPtr selectionRes) +{ + selectionRes->MoveFirst(); +// UGDynamicLayers* pDyLayers = &qMapControl->GetMap()->m_DynamicLayers; + UGGeometry* geometry = NULL; + UGGeoLine* line = NULL; + UGVariant v; + QString routeType; + QString routeNum; + UGString labelText; + UGDynamicLayer* pDyLayer = NULL; + qDebug()<<"********************RecordCount:"<GetRecordCount(); + while(!selectionRes->IsEOF()) + { + selectionRes->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteType),v); + routeType = Translator::UGStr2QStr(v.ToString()); + selectionRes->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteNumber),v); + routeNum = Translator::UGStr2QStr(v.ToString()); + +// pDyLayer = pDyLayers->GetDynamicLayer(Translator::QStr2UGStr(("LabelDyLayer" + routeType))); + getDynamicLayer(qMapControl->GetMap(),pDyLayer,Translator::QStr2UGStr(("LabelDyLayer" + routeType))); + selectionRes->GetGeometry(geometry); + line = (UGGeoLine*)geometry; + addNodeLabel(line,pDyLayer,routeType,routeNum); + + selectionRes->MoveNext(); +// for(int i = 1;i<=geometry->GetSubPntCount(0);i++) +// { +// labelText = v.ToString() + _U("-") + Translator::QStr2UGStr(QString::number(i)); +// pDyLayer->Add(); +// } } + qMapControl->GetMap()->m_DynamicLayers.Add(pDyLayer); + pDyLayer = NULL; + geometry = NULL; + line = NULL; } //导入kml文件时临时显示航线,仅用于二维地图 diff --git a/layeroperator.h b/layeroperator.h index 9193d4bb..01bae88a 100644 --- a/layeroperator.h +++ b/layeroperator.h @@ -26,12 +26,15 @@ public: void addGeometryInDynamicLayer(UGDynamicLayer* pDyLayer,UGRecordsetPtr res,UGStyle &sty); + //获取动态图层 void getDynamicLayer(UGMap* pMap,UGDynamicLayer* &pDyLayer,UGString dyLayerName); + void getQDynamicLayer(QMapControl* pMapControl,QDynamicLayer* &pDyLayer,QString dyLayerName); UGLayer* appendDatasetToMap(UGDatasetPtr pDataset,UGMap* m_pMap); //将dataset展示到地图中 //添加航点标记 void addNodeLabel(UGGeoLine* pGeoline,UGDynamicLayer* pLabelDyLayer,QString routeType,QString routeNum); + void addNodeLabel(QMapControl* qMapControl,UGRecordsetPtr selectionRes); //导入kml文件时临时显示航线 void showKMLTemporary(QMapControl* qMapControl,UGRecordsetPtr kmlRes); diff --git a/mainwindow.cpp b/mainwindow.cpp index e74060f3..c1e53d2a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -22,6 +22,7 @@ #include "showplane3d.h" #include +#include #include #include #include @@ -249,11 +250,12 @@ void UGSTDCALL AfterGeometryAddedCallback(UGlong pWnd, UGbool &bCancel, UGint nG -//void UGSTDCALL BeginEditHandleProcCallback(UGlong pWnd, UGbool &bCancel, UGint nEditSelType, UGint *pHandle, UGint nCount, UGdouble dx, UGdouble dy) -//{ -// qDebug()<<"**************************BeginEditHandleProcCallback"; -// qDebug()<<"**************************BeginEditHandleProcCallback"; -//} +void UGSTDCALL BeginEditHandleProcCallback(UGlong pWnd, UGbool &bCancel, UGint nEditSelType, UGint *pHandle, UGint nCount, UGdouble dx, UGdouble dy) +{ + qDebug()<<"**************************BeginEditHandleProcCallback"; + qDebug()<<"**************************nEditSelType"<LoadFromFile(symbolPath); // bool fs = ms->SaveToFile(_U("D:/test.sym")); - qDebug()<<"***********msCount:"<GetResources()->GetMarkerSymbolLib()->GetSymbolCount(); - bool s = m_pWorkspace->GetResources()->GetMarkerSymbolLib()->IsIDExisted(318); - qDebug()<<"***********s2:"<GetResources()->GetMarkerSymbolLib()->GetSymbolCount(); + bool s = m_pWorkspace->GetResources()->GetMarkerSymbolLib()->IsIDExisted(318); + qDebug()<<"***********s2:"<GetSymbolAt(0)->GetID(); // QString name = Translator::UGStr2QStr(ms->GetSymbolAt(0)->GetName()); // qDebug()<<"****************:"; - /* qDebug()<<"****************:" <GetDataSource(0)->GetDataset(line3DSetAlias).get(); @@ -422,12 +424,8 @@ void MainWindow::setupUI(QMainWindow *mainWindow) //初始化菜单 initMenu(mainWindow); - //向应用程序窗体中添加工具条对象 - mainToolBar = new QToolBar(mainWindow); - mainWindow->addToolBar(Qt::TopToolBarArea,mainToolBar); - - //调用addMapAction函数向界面中添加功能按钮 - addMapAction(mainWindow); + //初始化工具条 + initMainToolBar(mainWindow); } //工作空间初始化 @@ -543,9 +541,9 @@ void MainWindow::initMapControl() // qMapControl->GetUGMapWnd()->SetBeforeGeometryDeletedFunc(BeforeGeometryDeletedProcCallback,(UGlong)qMapControl); // qMapControl->GetUGMapWnd()->SetAfterGeometryDeletedFunc(AfterGeometryDeletedProcCallback,(UGlong)qMapControl); // qMapControl->GetUGMapWnd()->SetEditHandleCanceledFunc(EditHandleCanceledProcCallback,(UGlong)qMapControl); -// qMapControl->GetUGMapWnd()->SetBeginEditHandleFunc(BeginEditHandleProcCallback,(UGlong)qMapControl); + qMapControl->GetUGMapWnd()->SetBeginEditHandleFunc(BeginEditHandleProcCallback,(UGlong)qMapControl); // qMapControl->GetUGMapWnd()->SetAfterGeometryModifiedFunc(AfterGeometryModifiedProcCallback,(UGlong)qMapControl); -// qMapControl->GetUGMapWnd()->SetBeforeGeometryModifiedFunc(BeforeGeometryModifiedProcCallback,(UGlong)qMapControl); + qMapControl->GetUGMapWnd()->SetBeforeGeometryModifiedFunc(BeforeGeometryModifiedProcCallback,(UGlong)qMapControl); qMapControl->setFocus(); } @@ -567,6 +565,29 @@ void MainWindow::initMenu(QMainWindow* mainWindow) inputPosDlg = new ComputeOffsetPositionDialog; } +//工具条初始化 +void MainWindow::initMainToolBar(QMainWindow *mainWindow) +{ + //向应用程序窗体中添加工具条对象 + mainToolBar = new QToolBar(mainWindow); + mainWindow->addToolBar(Qt::TopToolBarArea,mainToolBar); + //调用addMapAction函数向界面中添加功能按钮 + addMapAction(mainWindow); + + QToolButton *tb = qobject_cast(mainToolBar->widgetForAction(actionEdit)); + tb->setStyleSheet("QToolButton::menu-indicator{image:none}");//去掉下拉黑色小箭头 + //编辑工具条 + editToolMenu = new QMenu(mainWindow); + editToolBar = new QToolBar(mainWindow); + addEditToolAction(); + + wactionEdit = new QWidgetAction(editToolBar); + wactionEdit->setDefaultWidget(editToolBar); + editToolMenu->addAction(wactionEdit); + tb->setMenu(editToolMenu); + tb->setPopupMode (QToolButton::InstantPopup); +} + //添加QAction void MainWindow::addMapAction(QMainWindow *mainWindow) { @@ -606,6 +627,10 @@ void MainWindow::addMapAction(QMainWindow *mainWindow) actionSelect = new QAction(QIcon(":/Resources/Select.png"),"Select",this); mainToolBar->addAction(actionSelect); + //为"编辑"按钮添加按钮图标并将其置于工具条上 + actionEdit = new QAction(QIcon(":/Resources/Edit.png"),"Edit",this); + mainToolBar->addAction(actionEdit); + //为"绘制点"按钮添加按钮图标并将其置于工具条上 actionDrawPoint = new QAction(QIcon(":/Resources/Image_Point.png"),"DrawPoint",this); mainToolBar->addAction(actionDrawPoint); @@ -653,6 +678,27 @@ void MainWindow::addMapMenuAction() actionExportFile = attributeRBtnMenu->addAction("导出"); } +//声明编辑条的行为行数 +void MainWindow::addEditToolAction() +{ + //为"编辑"按钮添加按钮图标并将其置于工具条上 + actionStartEdit = new QAction(QIcon(":/Resources/Edit1.png"),"Edit",this); + editToolBar->addAction(actionStartEdit); + + //为"编辑节点"按钮添加按钮图标并将其置于工具条上 + actionEditNode = new QAction(QIcon(":/Resources/EditNode1.png"),"编辑节点",this); + editToolBar->addAction(actionEditNode); + actionEditNode->setEnabled(false); + + //为"添加节点"按钮添加按钮图标并将其置于工具条上 +// actionAddNode = new QAction(QIcon(":/Resources/AddNode.png"),"添加节点",this); +// editToolBar->addAction(actionAddNode); + + //为"删除节点"按钮添加按钮图标并将其置于工具条上 +// actionDeleteNode = new QAction(QIcon(":/Resources/DeleteNode.png"),"删除节点",this); +// editToolBar->addAction(actionDeleteNode); +} + //Map连接信号和槽的函数 void MainWindow::addMapConnect() { @@ -749,6 +795,39 @@ void MainWindow::addMapConnect() connect(qMapControl,&QMapControl::showAttributeMenu,this,&MainWindow::showAttributeMenu); } +//声明edit连接信号和槽的函数 +void MainWindow::addEditConnect() +{ + //连接信号actionEdit和槽Edit + connect(actionStartEdit,&QAction::triggered,this,&MainWindow::Edit); + + connect(actionEditNode,&QAction::triggered,this,[=](){ + if(!qMapControl->getEditNodeState()) + {//开启节点编辑 + actionEditNode->setIcon(QIcon(":/Resources/EditNode.png")); + qMapControl->EditNode(true); + qMapControl->Refresh(); + } + else + {//关闭节点编辑 + actionEditNode->setIcon(QIcon(":/Resources/EditNode1.png")); + qMapControl->EditNode(false); + qMapControl->Refresh(); + } + }); + + connect(qMapControl,&QMapControl::closeEditNode,this,[=](){ + actionEditNode->setIcon(QIcon(":/Resources/EditNode1.png")); + qMapControl->EditNode(false); + qMapControl->Refresh(); + }); + +// connect(actionStartEdit,&QAction::triggered,this,[=](){ +// qMapControl->AddNode(); +// qMapControl->Refresh(); +// }); +} + //三维场景容器初始化 void MainWindow::initSceneControl(QWidget* parent) { @@ -1732,7 +1811,6 @@ void MainWindow::transformMap() default: break; } - } //导入场景数据 @@ -2184,6 +2262,8 @@ void MainWindow::openRasterMap() //刷新地图窗口 qMapControl->Refresh(); +// pMap = NULL; + dataSource = NULL; /************************************test*******************************/ //二维飞机实时位置显示测试 @@ -2197,14 +2277,24 @@ void MainWindow::openRasterMap() // p->SetX(119.718414); // p->SetY(32.234539); // UGStyle sty; +// sty.SetMarkerStyle(-1); // sty.SetMarkerSize(16); +// sty.SetFillForeColor(UGRGB(0,255,0)); // sty.SetMarkerStyle(907711); //907711 // sty.SetMarkerWidth(20); // sty.SetMarkerHeight(50); // sty.SetFixedPixelSize(true); // p->SetStyle(&sty); // pMap->m_TrackingLayer.Add(p,_U("a")); +// UGGeometry* geo = pMap->m_TrackingLayer.GetAt(0)->GetGeometry(); +// delete geo; +// delete p; +// pMap->m_TrackingLayer.RemoveAll(); +// pMap->m_TrackingLayer.Remove(_U("a")); // qMapControl->Refresh(); +// qDebug()<<"****************:"<<(p==NULL); +// delete p; +// qDebug()<<"****************:"<<(p==NULL); } /****************地图基础操作**********************/ @@ -2244,6 +2334,52 @@ void MainWindow::Select() else if(mapType==MapType::Map3D) pSceneControl->Select(); } + +//开启编辑 +void MainWindow::Edit() +{ +// UGMapEditorWnd* editorWnd = qMapControl->GetUGMapWnd(); +// editorWnd->SetSnapedPointColor(UGRGB(255,0,0)); //有效 +// editorWnd->SetSnapedLineColor(UGRGB(255,0,0)); //有效 +// editorWnd->SetGridSnape(true); +// UGStyle sty; +// sty.SetLineColor(UGRGB(255,0,0)); +// editorWnd->SetSnapedStyle(1,&sty); + + if(mapType==MapType::Map2D) + { + UGLayer* editLayer = qMapControl->getSelectionLayer(); + if(editLayer!=NULL) + { + if(!editLayer->IsEditable()) + {//开启编辑 + qDebug()<<"***********************OpenEdit:"; + qMapControl->setEditable(editLayer,true); + actionStartEdit->setIcon(QIcon(":/Resources/Edit.png")); +// actionEditNode->setIcon(QIcon(":/Resources/EditNode.png")); + qMapControl->GetMap()->m_DynamicLayers.RemoveAll(); + qMapControl->Refresh(); + + actionEditNode->setEnabled(true); + } + else + {//关闭编辑 + qDebug()<<"***********************CloseEdit:"; + qMapControl->setEditable(editLayer,false); + actionStartEdit->setIcon(QIcon(":/Resources/Edit1.png")); + actionEditNode->setIcon(QIcon(":/Resources/EditNode1.png")); + actionEditNode->setEnabled(false); + + LayerOperator layerOpt; + layerOpt.addNodeLabel(qMapControl,editLayer->GetSelection()->ToRecordset(false)); + editLayer->ClearSelection(); + qMapControl->Refresh(); + } + editLayer = NULL; + } + } + +} #pragma endregion } /****************地图量算操作**********************/ diff --git a/mainwindow.h b/mainwindow.h index 5351ad8f..e9140028 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -11,7 +11,7 @@ #include #include #include - +#include //子窗口头文件 #include "saveroutedialog.h" @@ -77,12 +77,18 @@ private: void initMenu(QMainWindow* mainWindow); //Map菜单初始化 + void initMainToolBar(QMainWindow* mainWindow); //工具条初始化 + void addMapAction(QMainWindow *mainWindow);//声明界面上各元素的行为函数 void addMapMenuAction();//声明Map右键菜单的行为函数 + void addEditToolAction();//声明编辑条的行为行数 + void addMapConnect();//声明Map连接信号和槽的函数 + void addEditConnect();//声明edit连接信号和槽的函数 + void initSceneControl(QWidget* parent); //三维场景容器初始化 void initSceneMene(); //场景菜单初始化 @@ -187,6 +193,20 @@ private: QAction *actionImportData; + QAction *actionEdit; + + QWidgetAction* wactionEdit; + + //声明编辑工具条对象 + QMenu *editToolMenu; + QToolBar *editToolBar; + + //工具条上各对象 + QAction *actionStartEdit; + QAction *actionEditNode; +// QAction *actionAddNode; +// QAction *actionDeleteNode; + //绘制模式 qint16 drawMode; @@ -226,6 +246,8 @@ public slots: void Select(); //声明槽函数Select + void Edit(); //声明槽函数Edit + void drawPoint();//声明槽函数drawPoint(绘制点) void drawLine();//声明槽函数drawLine(绘制线) diff --git a/res.qrc b/res.qrc index 398fa61f..f0900d3b 100644 --- a/res.qrc +++ b/res.qrc @@ -78,5 +78,11 @@ Resources/Plane/FH-981A.svg Resources/Plane/FH-981C.png Resources/Plane/FH-981C.svg + Resources/Edit.png + Resources/EditNode.png + Resources/AddNode.png + Resources/DeleteNode.png + Resources/Edit1.png + Resources/EditNode1.png