From ef1e733d7503b1d67205b5a21e86e5bab9a1276f Mon Sep 17 00:00:00 2001 From: cbwu Date: Fri, 30 Jun 2023 08:42:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=89=E7=BB=B4=E8=88=AA?= =?UTF-8?q?=E7=BA=BF=E6=98=BE=E7=A4=BA=E5=AE=9E=E7=8E=B0=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E4=B8=8E=E4=BA=8C=E7=BB=B4=E8=88=AA=E7=BA=BF=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=80=BB=E8=BE=91=E4=B8=80=E8=87=B4=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E8=AE=BE=E7=BD=AE=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84?= =?UTF-8?q?Filter=E6=9D=A5=E5=AE=9E=E7=8E=B0=E4=B8=8D=E5=90=8C=E8=88=AA?= =?UTF-8?q?=E7=BA=BF=E7=B1=BB=E5=9E=8B=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- displayroutedialog.cpp | 39 +++++++++++++++++++++++++++++++++++++-- displayroutedialog.h | 1 + geofeatureoperator.cpp | 20 ++++++++++++++++++++ geofeatureoperator.h | 3 +++ mainwindow.cpp | 18 +++++++++++++++++- scenecontrol.cpp | 18 ++++++++++++++++++ scenecontrol.h | 8 ++++++-- 7 files changed, 102 insertions(+), 5 deletions(-) diff --git a/displayroutedialog.cpp b/displayroutedialog.cpp index 25834a12..1659eb24 100644 --- a/displayroutedialog.cpp +++ b/displayroutedialog.cpp @@ -13,7 +13,7 @@ #include "layeroperator.h" #include "Scene/UGLayer3D.h" #include "Scene/UGTrackingLayer3D.h" - +#include "Layer3DDataset/UGLayer3DDatasetVector.h" DisplayRouteDialog::DisplayRouteDialog(QWidget *parent) : QDialog(parent), @@ -214,7 +214,7 @@ void DisplayRouteDialog::showRoute3D() QStringList routeNumberList = ui->RouteNumberCbbox->currentText().replaceInStrings(";",","); QString numFilter = "RouteNumber in (" + routeNumberList.join("\\,") + ")"; -// qDebug()<<"******************************:"<MoveFirst(); + UGQueryDef queryDef; + res->GetQueryDef(queryDef); + qDebug()<<"******************************RecordCount0:"<GetRecordCount(); + + const UGString strDataName = routeGVar.workspaceDataName.Line3DDatasetName + _U("@") + routeGVar.workspaceDataName.DatasourceName; + const UGString layer3DName = _U("RouteLayer3D") + Translator::QStr2UGStr(routeType); + UGLayer3Ds* layer3Ds = pSceneControl->GetUGLayer3Ds(); + UGLayer3DDatasetVector* layer3DDv = NULL; + if(layer3Ds->FindNameInner(layer3DName)>=0) + {//图层已存在,则重新设置Filter + layer3DDv = (UGLayer3DDatasetVector*)layer3Ds->GetLayerInner(layer3DName); + layer3DDv->SetDisplayFilter(queryDef); + } + else + { + layer3DDv = (UGLayer3DDatasetVector*)layer3Ds->AddLayer(strDataName,layer3DName,_U("")); + layer3DDv->SetDisplayFilter(queryDef); + }; + UGStyle3D style3D = routeGVar.getRouteStyle3D(routeType.toInt()); + layer3DDv->SetStyle3D(style3D); + + UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D(); + + UGRecordsetPtr tempRes = gftOpt.queryFeature(dtv,Translator::QStr2UGStr(typeFilter)); + gftOpt.removeNodeLabel3D(tempRes,trackingLayer3D); //移除该类型航线注记 + + gftOpt.addNodeLabel3D(res,trackingLayer3D);//添加航点注记 + + pSceneControl->Refresh(layer3DDv); + /* UGLayer3Ds* layers = pSceneControl->GetUGLayer3Ds(); UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D(); //添加到显示数据集 @@ -240,10 +270,12 @@ void DisplayRouteDialog::showRoute3D() UGStyle3D style3D = routeGVar.getRouteStyle3D(routeType.toInt()); displayLayer->SetStyle3D(style3D); + pSceneControl->Refresh(displayLayer); displayLayer = NULL; layers = NULL; trackingLayer3D = NULL; + */ /* TrackingLayer3D显示方式 UGTrackingLayer3D* pTrackingLayer3D = pSceneControl->GetTrackingLayer3D(); @@ -399,6 +431,9 @@ void DisplayRouteDialog::on_displayBtn_clicked() mMessageTips->show(); // mMessageTips = NULL; // this->reject(); +// int type = RouteType.key(ui->RouteTypeCbbox->currentText()); +// pSceneControl->removeLayer3D(Translator::QStr2UGStr("RouteLayer3D"+QString::number(type))); + return; } if(is3DMap) diff --git a/displayroutedialog.h b/displayroutedialog.h index af5d6360..2eeb6db0 100644 --- a/displayroutedialog.h +++ b/displayroutedialog.h @@ -74,6 +74,7 @@ private: QMap> routeTags; bool is3DMap; //二三维标识 + }; #endif // DISPLAYROUTEDIALOG_H diff --git a/geofeatureoperator.cpp b/geofeatureoperator.cpp index 0d30fbce..8e53e269 100644 --- a/geofeatureoperator.cpp +++ b/geofeatureoperator.cpp @@ -500,6 +500,7 @@ void GeoFeatureOperator::addNodeLabel3D(UGRecordsetPtr res, UGTrackingLayer3D *p } UGString geoTextTag = Translator::QStr2UGStr(QString::number(type)) + _U("_") + number; + if(pTrackingLayer3D->Find(geoTextTag)>=0) pTrackingLayer3D->Remove(geoTextTag); pTrackingLayer3D->Add(geoText3D,geoTextTag); res->MoveNext(); @@ -509,6 +510,25 @@ void GeoFeatureOperator::addNodeLabel3D(UGRecordsetPtr res, UGTrackingLayer3D *p line3D = NULL; } +//移除三维航线注记 +void GeoFeatureOperator::removeNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D) +{ + res->MoveFirst(); + UGVariant type; + UGVariant number; + UGString geoTextTag; + while(!res->IsEOF()) + { + res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteType),type); + res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteNumber),number); + geoTextTag = type.ToString() + _U("_") + number.ToString(); + if(pTrackingLayer3D->Find(geoTextTag)>=0) + pTrackingLayer3D->Remove(geoTextTag); + + res->MoveNext(); + } +} + //添加三维几何对象到记录集 void GeoFeatureOperator::addGeometry3DToDataset(UGDatasetVector *dv, UGGeometry *pGeometry) { diff --git a/geofeatureoperator.h b/geofeatureoperator.h index 6c5b6e89..b95feb6a 100644 --- a/geofeatureoperator.h +++ b/geofeatureoperator.h @@ -46,6 +46,9 @@ public: //添加三维航点注记 void addNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D); + //移除三维航线注记 + void removeNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D); + //添加三维几何对象到记录集 void addGeometry3DToDataset(UGDatasetVector* dv,UGGeometry* pGeometry); diff --git a/mainwindow.cpp b/mainwindow.cpp index c1e53d2a..ed95f129 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -61,6 +61,7 @@ #include "Layer3DFile/UGLayer3DDynamic.h" #include "Layer3DFile/UGLayer3DModel.h" +#include "Layer3DFile/UGLayer3DVector.h" //#include "Layer3DTree/UGLayer3DTree.h" #include "Base3D/UGMathEngine.h" #include "Scene/UGFlyRoute.h" @@ -678,7 +679,7 @@ void MainWindow::addMapMenuAction() actionExportFile = attributeRBtnMenu->addAction("导出"); } -//声明编辑条的行为行数 +//声明编辑条的行为函数 void MainWindow::addEditToolAction() { //为"编辑"按钮添加按钮图标并将其置于工具条上 @@ -2378,6 +2379,21 @@ void MainWindow::Edit() editLayer = NULL; } } + else + {//三维 + UGLayer3DDatasetVector* pLayer3D = (UGLayer3DDatasetVector*)pSceneControl->GetUGLayer3Ds()->AddLayer(_U("FlightLines3D@Route")); // + UGQueryDef queryDef; + queryDef.m_nOptions = UGQueryDef::Both; //查询选项:几何对象(Geometry)和属性(Attribute)都查询 + queryDef.m_nType = UGQueryDef::General; //查询类型:一般的数下条件查询 + queryDef.m_nMode = UGQueryDef::GeneralQuery; //查询模式:一般查询(非模糊查询) + queryDef.m_nCursorType = UGQueryDef::OpenStatic; //OpenStatic,用于读取数据;OpenDynamic,用于数据增删改 + queryDef.m_strFilter = _U("RouteNumber =2 and RouteType=1"); //查询条件 + pLayer3D->SetDisplayFilter(queryDef); + + + + qDebug()<<"*********************1:"<GetUGLayer3Ds()->GetInnerCount(); + } } #pragma endregion } diff --git a/scenecontrol.cpp b/scenecontrol.cpp index b257e9d5..66aaee46 100644 --- a/scenecontrol.cpp +++ b/scenecontrol.cpp @@ -595,6 +595,24 @@ UGTerrainAccessor* SceneControl::AddTerrainLayerFromFile(string filePath) return pTerrain; } +//获取第一个高亮对象所在图层 +UGLayer3D *SceneControl::GetSelectionLayer() +{ + UGLayer3Ds* pLayers = GetUGLayer3Ds(); + int count = pLayers->GetInnerCount(); + UGLayer3D* pLayer = NULL; + for (int i = 0; i < count; i++) + { + pLayer = pLayers->GetLayerInnerAt(i); + UGSelection3D* pSelection = pLayer->GetSelection3D(); + if (NULL != pSelection && pSelection->GetSize() > 0) + { + return pLayer; + } + } + return pLayer; +} + UGArray* SceneControl::GetGeoSelections() { UGLayer3Ds* pLayers = GetUGLayer3Ds(); diff --git a/scenecontrol.h b/scenecontrol.h index 8e16f593..3ee1d7be 100644 --- a/scenecontrol.h +++ b/scenecontrol.h @@ -193,7 +193,6 @@ using namespace UGC; */ UGCameraWorld* GetCameraWorld(); - private: // TODO: /* * @en * @brief Set a layer editable or not in current scense. @@ -253,6 +252,12 @@ using namespace UGC; //UGLayer3D* AddLayerFromWeb(); + /* + *@cbwu + *@brief 获取第一个高亮对象所在图层 + */ + UGLayer3D* GetSelectionLayer(); + // 获取所有选中对象的选择集。通常情况下,使用点击选择对象,只有个图层有选中对象,因此只有一个选择集 // 若没有选中对象,返回NULL; 不需要使用时,请先RemoveAll(), 再delete UGArray* GetGeoSelections(); @@ -328,7 +333,6 @@ using namespace UGC; // signals: // void sendTrackedGeometry(UGGeometry* pGeometry,UGint nUserAction); - }; //} //}