From 307c030a7d4c539e06149e6d85d1ba0db2271a19 Mon Sep 17 00:00:00 2001 From: cbwu Date: Mon, 19 Jun 2023 14:07:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=89=E7=BB=B4=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E6=93=8D=E4=BD=9C=E5=85=89=E6=A0=87=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- geofeatureoperator.cpp | 51 ++++++++++---------- mainwindow.cpp | 55 +++++++++++++-------- scenecontrol.cpp | 105 ----------------------------------------- sceneview.cpp | 99 +++++++++++++++++++++++++++++++++++++- sceneview.h | 4 +- 5 files changed, 162 insertions(+), 152 deletions(-) diff --git a/geofeatureoperator.cpp b/geofeatureoperator.cpp index a67f92ab..ac69ab66 100644 --- a/geofeatureoperator.cpp +++ b/geofeatureoperator.cpp @@ -310,17 +310,18 @@ void GeoFeatureOperator::drawLine3D(SceneView* pSceneView, UGString datasourceNa if(lineLayer3D!=NULL) { //显示对话框 - emit pSceneView->showSettingFlightPointDialg(); +// emit pSceneView->showSettingFlightPointDialg(); lineLayer3D->SetSelectable(true); -// pLayer3Ds->SetEditableLayer(lineLayer3D,true); //设置图层可编辑 - lineLayer3D->SetEditable(true); + pLayer3Ds->SetEditableLayer(lineLayer3D,true); //设置图层可编辑 +// lineLayer3D->SetEditable(true); // pSceneControl->GetSceneEditWnd()->SetUserAction(UGSceneUserAction::suaEdit,UGEditType3D::ET3D_PolyLine); // pSceneControl->GetSceneEditWnd()->SetUserAction(UGSceneUserAction::suaCreatePolyline); pSceneView->isEditStateFlag = true; qDebug()<<"*************************EditCursorShape:"<GetSceneEditWnd()->Get3DCursorShape(); // qDebug()<<"*************************:"<GetSceneEditWnd()->m_SceneWindow.Get3DCursorShape(); // qDebug()<<"*************************Edit:"<GetSceneEditWnd()->GetSubAction(); +// qDebug()<<"*************************CursorShape:"<GetSceneEditWnd()->Get3DCursorShape(); } @@ -334,23 +335,25 @@ void GeoFeatureOperator::drawLine3D(SceneView *pSceneView, UGString dataName) { SceneControl* pSceneControl = pSceneView->GetSceneControl(); UGLayer3Ds* pLayer3Ds = pSceneControl->GetUGLayer3Ds(); -// //创建临时数据集 -// UGString datasetName = _U("Line3DTmp"); -// UGString layer3DName = datasetName + _U("@") + ds->GetAlias(); //图层名命名为:数据集名@数据源名 -// MapDataManeger mapDataMag; -// UGDatasetVector* dv = NULL; -// if(ds->GetDataset(datasetName)==NULL) -// dv = mapDataMag.createVectorSet(ds,UGDataset::LineZ,datasetName).get(); -// else -// {//清空临时数据集里的全部记录 -// dv = (UGDatasetVector*)(ds->GetDataset(datasetName).get()); -// if(!dv->IsOpen()) dv->Open(); -// UGQueryDef query; -// UGRecordsetPtr res = dv->Query(query); -// qDebug()<<"***************RecordCount:"<GetRecordCount(); -// res->DeleteAll(); -// res->Update(); -// } + /* + //创建临时数据集 + UGString datasetName = _U("Line3DTmp"); + UGString layer3DName = datasetName + _U("@") + ds->GetAlias(); //图层名命名为:数据集名@数据源名 + MapDataManeger mapDataMag; + UGDatasetVector* dv = NULL; + if(ds->GetDataset(datasetName)==NULL) + dv = mapDataMag.createVectorSet(ds,UGDataset::LineZ,datasetName).get(); + else + {//清空临时数据集里的全部记录 + dv = (UGDatasetVector*)(ds->GetDataset(datasetName).get()); + if(!dv->IsOpen()) dv->Open(); + UGQueryDef query; + UGRecordsetPtr res = dv->Query(query); + qDebug()<<"***************RecordCount:"<GetRecordCount(); + res->DeleteAll(); + res->Update(); + } + */ UGLayer3D* lineLayer3D = NULL; int layerIndex = pLayer3Ds->FindNameInner(dataName); @@ -359,13 +362,10 @@ void GeoFeatureOperator::drawLine3D(SceneView *pSceneView, UGString dataName) pLayer3Ds->TreeRemoveAt(layerIndex); } //添加图层 -// qDebug()<<"*******************LayerCount0:"<GetInnerCount(); lineLayer3D = pLayer3Ds->AddLayer(dataName); // lineLayer3D = pSceneControl->AddLayerFromDataset(ds->GetAlias(),datasetName); -// qDebug()<<"*******************LayerCount1:"<GetInnerCount(); lineLayer3D->SetSelectable(true); pLayer3Ds->SetEditableLayer(lineLayer3D,true); //设置图层可编辑 -// lineLayer3D->SetEditable(true); // qDebug()<<"*******************LayerEditable:"<GetEditable(); // pSceneControl->GetSceneEditWnd()->SetUserAction(UGSceneUserAction::suaEdit,UGEditType3D::ET3D_PolyLine); // @@ -373,7 +373,10 @@ void GeoFeatureOperator::drawLine3D(SceneView *pSceneView, UGString dataName) pSceneView->isEditStateFlag = true; //显示对话框 - emit pSceneView->showSettingFlightPointDialg(); +// emit pSceneView->showSettingFlightPointDialg(); + + qDebug()<<"*******************Cursor:"<GetSceneEditWnd()->Get3DCursorShape(); + qDebug()<<"*******************Cursor:"<GetSceneEditWnd()->m_SceneWindow.m_n3DCursorShape; // dv = NULL; lineLayer3D = NULL; diff --git a/mainwindow.cpp b/mainwindow.cpp index 771021ae..92a73350 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1277,18 +1277,18 @@ void MainWindow::loadModelData() // pDataSource = NULL; //模型移动测试 -// UGDatasetVector* dv = (UGDatasetVector*)pDataSource->GetDataset(_U("FlightLines3D")).get(); //FlightLines3D + UGDatasetVector* dv = (UGDatasetVector*)pDataSource->GetDataset(_U("Plane")).get(); //Plane // ShowPlane3D* plane3D = new ShowPlane3D(pSceneControl,dv); // plane3D->setPlanesCount(1); // plane3D->startFly(); -// if(!dv->IsOpen()) dv->Open(); -// UGQueryDef query; -// UGRecordsetPtr res = dv->Query(query); -// res->MoveFirst(); -// qDebug()<<"*****************RecordCount:"<GetRecordCount(); -// UGGeometry* geometry = NULL; -// res->GetGeometry(geometry); //geometryType: GeoModelPro + if(!dv->IsOpen()) dv->Open(); + UGQueryDef query; + UGRecordsetPtr res = dv->Query(query); + res->MoveFirst(); + qDebug()<<"*****************RecordCount:"<GetRecordCount(); + UGGeometry* geometry = NULL; + res->GetGeometry(geometry); //geometryType: GeoModelPro // qDebug()<<"*************geometryType:"<GetType(); // UGRect2D rec = geometry->GetBounds(); // qDebug()<<"*************leftX:"<GetType(); // res->Edit(); -// UGGeoModelPro* model = (UGGeoModelPro*)geometry; -// model->SetPosition(UGPoint3D(119.73,32.234539,25)); + UGGeoModelPro* model = (UGGeoModelPro*)geometry; + model->SetPosition(UGPoint3D(119.73,32.234539,25)); // res->SetGeometry(*model); // res->Update(); // model->SetStyle3D(&tmpSty); @@ -1361,10 +1361,10 @@ void MainWindow::loadModelData() // style3D.SetMarker3D(true); // style3D.SetScaleBySymbol(true); // style3D.SetFixedPixelSize(false); -// style3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE); + style3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE); style3D.SetAltitudeMode(AltitudeMode::Absolute); - style3D.SetLineWidth(1); - style3D.SetLineColor(UGRGB(255,0,0)); +// style3D.SetLineWidth(1); +// style3D.SetLineColor(UGRGB(255,0,0)); // style3D.SetFillBackColor(UGRGB(255,0,0)); // style3D.SetFillForeColor(UGRGB(255,0,0)); // style3D.SetFillColor(UGRGB(255,0,0)); @@ -1409,9 +1409,21 @@ void MainWindow::loadModelData() // kmlLayer->SetEditable(true); // UGLayer3DModel* modelLayer3D = (UGLayer3DModel*)kmlLayer; -// UGGeoPlacemark* GP = new UGGeoPlacemark(); -// GP->SetGeometry(model); -// GP->SetPosition(UGPoint3D(119.718567,32.234317,20)); + UGGeoPlacemark* GP = new UGGeoPlacemark(); +// UGGeoPoint3D* p = new UGGeoPoint3D(); +// p->SetX(119.718567); +// p->SetY(32.234317); +// p->SetZ(20); +// GP->MakeWithGeometry(p); + GP->SetGeometry(model); + GP->SetPosition(UGPoint3D(119.718567,32.234317,20)); + GP->SetName(_U("Test")); +// UGStyle3D s; +// s.SetAltitudeMode(AltitudeMode::Absolute); + UGTextStyle t; + t.SetSize(64); + GP->SetNameTextStyle(&t); + pSceneControl->GetTrackingLayer3D()->Add(GP,_U("a")); // modelLayer3D->AddModel(model); @@ -1504,12 +1516,15 @@ void MainWindow::loadModelData() // p->Make(UGPoint3D(119.718567,32.234317,20)); // UGGeoPlacemark* pl = new UGGeoPlacemark(); // pl->SetName(_U("Test")); -// pl->SetGeometry(model); +// pl->SetPosition(UGPoint3D(119.718567,32.234317,20)); +// pl->Set3DPoint(UGPoint3D(119.718567,32.234317,20)); +// pl->SetGeometry(p); // UGStyle3D sty3D; // sty3D.SetMarkerStyle(318); //253268 //// sty3D.SetMarker3D(true); -// sty3D.SetPointColor(UGRGB(255,0,0)); +// UGColorValue3D(1,0,0); +// sty3D.SetPointColor(UGColorValue3D(1,0,0)); // sty3D.SetMarkerSize(30); // sty3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE); // sty3D.SetAltitudeMode(AltitudeMode::Absolute); @@ -1550,12 +1565,12 @@ void MainWindow::loadModelData() // UGGeoPicture* pt = (UGGeoPicture*) geometry; // UGGeoLine3D* l = (UGGeoLine3D*) geometry; // l->SetStyle3D(&style3D); -// UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D(); + UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D(); // trackingLayer3D->SetAlwaysRender(true); // trackingLayer3D->SetWorkspace(m_pWorkspace); // trackingLayer3D->SetUseGeoStyle(true); // qDebug()<<"**************TrackingCount0:"<GetCount(); -// trackingLayer3D->Add(l,_U("picture")); +// trackingLayer3D->Add(pl,_U("picture")); // UGStyle3D* sty1 = trackingLayer3D->GetAt(0)->GetStyle3D(); // sty1->SetLineColor(UGRGB(0,0,255)); // trackingLayer3D->GetAt(0)->SetStyle3D(&sty3D); diff --git a/scenecontrol.cpp b/scenecontrol.cpp index 12af59e8..b257e9d5 100644 --- a/scenecontrol.cpp +++ b/scenecontrol.cpp @@ -739,111 +739,6 @@ void SceneControl::removeLayer3D(UGString layerName) pLayer3Ds = NULL; } -/* -void SceneControl::ReviseCursor() -{ - switch(m_pUGSceneWnd->m_SceneWindow.Get3DCursorShape()) - { - case UG3DCursorShape::ecBusy: - { - SetWaitCursor(); - break; - } - case UGMapWnd::ecArrow: - { - setCursor(QCursor(Qt::ArrowCursor)); - break; - } - case UGMapWnd::ecMarginPanLeft: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_left.png"), 0, 15)); - break; - } - case UGMapWnd::ecMarginPanRight: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_right.png"), 30, 10)); - break; - } - case UGMapWnd::ecMarginPanTop: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_top.png"),10, 0)); - break; - } - case UGMapWnd::ecMarginPanBottom: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_bottom.png"), 10, 30)); - break; - } - case UGMapWnd::ecMarginPanTopLeft: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_topleft.png"), 0, 0)); - break; - } - case UGMapWnd::ecMarginPanTopRight: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_topright.png"), 30, 0)); - break; - } - case UGMapWnd::ecMarginPanBottomRight: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_bottomright.png"), 30, 30)); - break; - } - case UGMapWnd::ecMarginPanBottomLeft: - { - setCursor(QCursor(QPixmap(":/Resources/Pan_bottomleft.png"), 0, 30)); - break; - } - case UGMapWnd::ecZoomFree: - case UGMapWnd::ecZoomFree2: - { - setCursor(QCursor(QPixmap(":/Resources/ZoomFree.png"))); - break; - } - case UGMapWnd::ecPan: - { - setCursor(QCursor(QPixmap(":/Resources/Pan.png"))); - break; - } - case UGMapWnd::ecPan2: - { - setCursor(QCursor(QPixmap(":/Resources/Pan2.png"))); - break; - } - case UGMapWnd::ecZoomIn: - { - setCursor(QCursor(QPixmap(":/Resources/ZoomIn.png"), 2, 2)); - break; - } - case UGMapWnd::ecZoomOut: - { - setCursor(QCursor(QPixmap(":/Resources/ZoomOut.png"), 2, 2)); - break; - } - case UGMapWnd::ecPointModeSelect: - case UGMapWnd::ecPointModeSelectTrue: - case UGMapWnd::ecRectModeSelect: - case UGMapWnd::ecLineModeSelect: - { - setCursor(QCursor(QPixmap(":/Resources/Select.png"), 4, 4)); - break; - } - case UGMapWnd::ecDrawPolyGon: - case UGMapWnd::ecDrawPolyLine: - { - setCursor(QCursor(QPixmap(":/Resources/cross.png"), 9, 9)); - break; - } - case UGMapWnd::ecDrawText: - { - setCursor(QCursor(Qt::IBeamCursor)); - break; - } - default: - break; - } -} -*/ void SceneControl::MeasureDistance() diff --git a/sceneview.cpp b/sceneview.cpp index b5c61f39..c4625bd6 100644 --- a/sceneview.cpp +++ b/sceneview.cpp @@ -2,11 +2,14 @@ void UGSTDCALL Action3DChangedCallBack(UGlong pWnd, UGSceneUserAction oldAction,UGSceneUserAction newAction) { -// qDebug()<<"****************oldAction:"<ReviseCursor(newAction); +// pSceneView = NULL; // if(newAction==UGSceneUserAction::suaCreatePolyline) // { //// pSceneView->showSettingFlightPoint = true; @@ -121,6 +124,97 @@ unsigned int SceneView::getMouseOrKeyFlag(QMouseEvent* event) return flag; } +//设置鼠标光标形状 +void SceneView::ReviseCursor(int SceneUserAction) +{ + switch (SceneUserAction) { + case UGSceneUserAction::suaPan: + setCursor(QCursor(QPixmap(":/Resources/Pan2.png"))); + case UGSceneUserAction::suaPanSelect: + setCursor(QCursor(QPixmap(":/Resources/Pan.png"))); + break; + case UGSceneUserAction::suaCreatePoint: + case UGSceneUserAction::suaCreatePolygon: + case UGSceneUserAction::suaCreateLine: + case UGSceneUserAction::suaCreatePolyline: + case UGSceneUserAction::suaCreateRectangle: + setCursor(QCursor(QPixmap(":/Resources/cross.png"), 9, 9)); + break; + case UGSceneUserAction::suaMeasureDistance: + case UGSceneUserAction::suaMeasureArea: + case UGSceneUserAction::suaMeasureHeight: + case UGSceneUserAction::suaMeasureTerrainDistance: + case UGSceneUserAction::suaMeasureTerrainArea: + case UGSceneUserAction::suaMeasureHorizontalDistance: + setCursor(QCursor(QPixmap(":/Resources/Length.png"), 9, 9)); + break; + default: + break; + } + + /* + switch(m_pSceneControl->GetSceneEditWnd()->m_SceneWindow.Get3DCursorShape()) + { + case UG3DCursorShape::ecBusy: + { + this->setCursor(QCursor(Qt::WaitCursor)); + break; + } + case UG3DCursorShape::ecArrow: + { + setCursor(QCursor(Qt::ArrowCursor)); + break; + } + case UG3DCursorShape::ecZoomFree: + { + setCursor(QCursor(QPixmap(":/Resources/ZoomFree.png"))); + break; + } + case UG3DCursorShape::ecPan: + { + setCursor(QCursor(QPixmap(":/Resources/Pan.png"))); + break; + } + case UG3DCursorShape::ecPanMove: + { + setCursor(QCursor(QPixmap(":/Resources/Pan2.png"))); + break; + } + case UG3DCursorShape::ecZoomIn: + { + setCursor(QCursor(QPixmap(":/Resources/ZoomIn.png"), 2, 2)); + break; + } + case UG3DCursorShape::ecZoomOut: + { + setCursor(QCursor(QPixmap(":/Resources/ZoomOut.png"), 2, 2)); + break; + } + case UG3DCursorShape::ecPointModeSelect: + case UG3DCursorShape::ecPointModeSelectTrue: + case UG3DCursorShape::ecRectModeSelect: + case UG3DCursorShape::ecLineModeSelect: + { + setCursor(QCursor(QPixmap(":/Resources/Select.png"), 4, 4)); + break; + } + case UG3DCursorShape::ecDrawPolyGon: + case UG3DCursorShape::ecDrawPolyLine: + { + setCursor(QCursor(QPixmap(":/Resources/cross.png"), 9, 9)); + break; + } + case UG3DCursorShape::ecDrawText: + { + setCursor(QCursor(Qt::IBeamCursor)); + break; + } + default: + break; + } + */ +} + void SceneView::paintEvent(QPaintEvent* event) { @@ -200,6 +294,7 @@ void SceneView::mouseMoveEvent(QMouseEvent* event) { m_pSceneControl->OnMouseMove(getMouseOrKeyFlag(event), event->x(), event->y()); } + ReviseCursor(m_pSceneControl->GetSceneEditWnd()->GetUserAction()); } void SceneView::resizeEvent(QResizeEvent* event) diff --git a/sceneview.h b/sceneview.h index 9de5610b..9bd10cdf 100644 --- a/sceneview.h +++ b/sceneview.h @@ -32,10 +32,13 @@ public: bool isEditStateFlag; //编辑状态 + //method private: unsigned int getMouseOrKeyFlag(QMouseEvent* event); + void ReviseCursor(int SceneUserAction); //设置鼠标光标形状 + // override parent protected: virtual void paintEvent(QPaintEvent* event); @@ -47,7 +50,6 @@ protected: virtual void keyPressEvent(QKeyEvent* event); virtual void mouseDoubleClickEvent(QMouseEvent *event); - private: SceneControl* m_pSceneControl; bool isRenderTimerStarted;