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 00000000..843c6933 Binary files /dev/null and b/Resources/AddNode.png differ diff --git a/Resources/DeleteNode.png b/Resources/DeleteNode.png new file mode 100644 index 00000000..27e4f06b Binary files /dev/null and b/Resources/DeleteNode.png differ diff --git a/Resources/Edit.png b/Resources/Edit.png new file mode 100644 index 00000000..4062fe43 Binary files /dev/null and b/Resources/Edit.png differ diff --git a/Resources/Edit1.png b/Resources/Edit1.png new file mode 100644 index 00000000..48a3b1b2 Binary files /dev/null and b/Resources/Edit1.png differ diff --git a/Resources/EditNode.png b/Resources/EditNode.png new file mode 100644 index 00000000..1f8c58c9 Binary files /dev/null and b/Resources/EditNode.png differ diff --git a/Resources/EditNode1.png b/Resources/EditNode1.png new file mode 100644 index 00000000..4e2de0c7 Binary files /dev/null and b/Resources/EditNode1.png differ diff --git a/displayroutedialog.cpp b/displayroutedialog.cpp index bd828c5d..25834a12 100644 --- a/displayroutedialog.cpp +++ b/displayroutedialog.cpp @@ -120,10 +120,7 @@ void DisplayRouteDialog::showRoute() res->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