增加三维航线交互式编辑功能;修改了二维航线编辑逻辑。

master
cbwu 2 years ago
parent ef1e733d75
commit 2503393f0d

@ -37,6 +37,7 @@ SOURCES += \
routeglobalvariant.cpp \ routeglobalvariant.cpp \
saveroutedialog.cpp \ saveroutedialog.cpp \
scenecontrol.cpp \ scenecontrol.cpp \
sceneeditorwnd.cpp \
scenelayersview.cpp \ scenelayersview.cpp \
sceneview.cpp \ sceneview.cpp \
settingflightpoint3ddialog.cpp \ settingflightpoint3ddialog.cpp \
@ -74,6 +75,7 @@ HEADERS += \
routeglobalvariant.h \ routeglobalvariant.h \
saveroutedialog.h \ saveroutedialog.h \
scenecontrol.h \ scenecontrol.h \
sceneeditorwnd.h \
scenelayersview.h \ scenelayersview.h \
sceneview.h \ sceneview.h \
settingflightpoint3ddialog.h \ settingflightpoint3ddialog.h \

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 10.0.2, 2023-06-27T09:49:04. --> <!-- Written by QtCreator 10.0.2, 2023-06-30T15:09:24. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

@ -2,6 +2,10 @@
#include "Geometry/UGGeoLine.h" #include "Geometry/UGGeoLine.h"
#include "mapdatamaneger.h" #include "mapdatamaneger.h"
#include "qdebug.h" #include "qdebug.h"
//#include <QMap>
//#include <QString>
#include <map>
#include <string>
#include "ui_displayroutedialog.h" #include "ui_displayroutedialog.h"
#include "geofeatureoperator.h" #include "geofeatureoperator.h"
#include "translator.h" #include "translator.h"
@ -214,7 +218,7 @@ void DisplayRouteDialog::showRoute3D()
QStringList routeNumberList = ui->RouteNumberCbbox->currentText().replaceInStrings(";",","); QStringList routeNumberList = ui->RouteNumberCbbox->currentText().replaceInStrings(";",",");
QString numFilter = "RouteNumber in (" + routeNumberList.join("\\,") + ")"; QString numFilter = "RouteNumber in (" + routeNumberList.join("\\,") + ")";
qDebug()<<"******************************:"<<numFilter; // qDebug()<<"******************************:"<<numFilter;
//图层几何对象过滤语句 //图层几何对象过滤语句
UGString layerFilter = Translator::QStr2UGStr(numFilter + " and " + typeFilter); UGString layerFilter = Translator::QStr2UGStr(numFilter + " and " + typeFilter);
@ -224,7 +228,8 @@ void DisplayRouteDialog::showRoute3D()
UGQueryDef queryDef; UGQueryDef queryDef;
res->GetQueryDef(queryDef); res->GetQueryDef(queryDef);
qDebug()<<"******************************RecordCount0:"<<res->GetRecordCount(); // qDebug()<<"******************************RecordCount0:"<<res->GetRecordCount();
pSceneControl->m_mapDisplayGeometryID[routeType.toInt()] = res;
const UGString strDataName = routeGVar.workspaceDataName.Line3DDatasetName + _U("@") + routeGVar.workspaceDataName.DatasourceName; const UGString strDataName = routeGVar.workspaceDataName.Line3DDatasetName + _U("@") + routeGVar.workspaceDataName.DatasourceName;
const UGString layer3DName = _U("RouteLayer3D") + Translator::QStr2UGStr(routeType); const UGString layer3DName = _U("RouteLayer3D") + Translator::QStr2UGStr(routeType);
@ -277,22 +282,6 @@ void DisplayRouteDialog::showRoute3D()
trackingLayer3D = NULL; trackingLayer3D = NULL;
*/ */
/* TrackingLayer3D显示方式
UGTrackingLayer3D* pTrackingLayer3D = pSceneControl->GetTrackingLayer3D();
if(res!=NULL)
{
if(routeTags.contains(routeType.toInt()))
{//如果已存在该类型航线,先移除已有航线后添加
removeGeometry(routeType.toInt(),pTrackingLayer3D);
}
addGeometryToTrackingLayer3D(res,pTrackingLayer3D);
}
else
{
removeGeometry(routeType.toInt(),pTrackingLayer3D);
}
pTrackingLayer3D->SetRefresh(false);
*/
} }
//获取二维动态图层 //获取二维动态图层

@ -9,6 +9,7 @@
#include "Render/UGRenderObject.h" #include "Render/UGRenderObject.h"
#include "QDynamicLayer.h" #include "QDynamicLayer.h"
#include "QDynamicLayers.h" #include "QDynamicLayers.h"
#include "geofeatureoperator.h"
LayerOperator::LayerOperator() LayerOperator::LayerOperator()
{ {
@ -272,6 +273,22 @@ void LayerOperator::showKMLTemporary(QMapControl *qMapControl, UGRecordsetPtr km
pMap = NULL; pMap = NULL;
} }
//显示三维航线注记
void LayerOperator::showNodeLabel3D(SceneControl* pSceneControl)
{
map<int,UGRecordsetPtr>mapDisplayGeometryIDs = pSceneControl->m_mapDisplayGeometryID;
UGRecordsetPtr res = NULL;
map<int, UGRecordsetPtr>::iterator iter;
UGTrackingLayer3D* pTrackingLayer = pSceneControl->GetTrackingLayer3D();
GeoFeatureOperator geoFOpt;
for(iter =mapDisplayGeometryIDs.begin(); iter != mapDisplayGeometryIDs.end(); iter++)
{
res = iter->second;
geoFOpt.addNodeLabel3D(res,pTrackingLayer);
};
}
//添加几何对象到三维追踪层 //添加几何对象到三维追踪层
void LayerOperator::addGeometryToTrackingLayer3D(SceneControl *pSceneControl, UGRecordsetPtr kml3DRes) void LayerOperator::addGeometryToTrackingLayer3D(SceneControl *pSceneControl, UGRecordsetPtr kml3DRes)
{ {

@ -39,6 +39,9 @@ public:
//导入kml文件时临时显示航线 //导入kml文件时临时显示航线
void showKMLTemporary(QMapControl* qMapControl,UGRecordsetPtr kmlRes); void showKMLTemporary(QMapControl* qMapControl,UGRecordsetPtr kmlRes);
//显示三维航线注记
void showNodeLabel3D(SceneControl* pSceneControl);
public: //用于三维场景的函数 public: //用于三维场景的函数
//导入kml3D文件时临时显示航线 //导入kml3D文件时临时显示航线
void showKML3DTemporary(SceneControl* pSceneControl,UGRecordsetPtr kml3DRes); void showKML3DTemporary(SceneControl* pSceneControl,UGRecordsetPtr kml3DRes);

@ -315,13 +315,26 @@ void UGSTDCALL AfterPointInputCallback(UGlong pWnd, UGdouble &dx, UGdouble &dy,
void UGSTDCALL GeometrySelectedCallback(UGlong pWnd, UGint nSelectedGeometryCount) void UGSTDCALL GeometrySelectedCallback(UGlong pWnd, UGint nSelectedGeometryCount)
{//左键点击选中触发 {//左键点击选中触发
qDebug()<<"**************************GeometrySelectedCallback"; qDebug()<<"**************************GeometrySelectedCallback";
qDebug()<<"**************************nSelectedGeometryCount:"<<nSelectedGeometryCount; // qDebug()<<"**************************nSelectedGeometryCount:"<<nSelectedGeometryCount;
QMapControl* pControl = (QMapControl*)pWnd; QMapControl* pMapControl = (QMapControl*)pWnd;
if(pMapControl->getEditStatus())
{//编辑模式下设置当前选中图层可编辑
UGLayer* selectedLayer = pMapControl->getSelectionLayer();
if(!selectedLayer->IsEditable())
{
pMapControl->setEditable(pMapControl->getSelectionLayer(),true);
}
selectedLayer = NULL;
}
pMapControl = NULL;
/*
LayerOperator LO; LayerOperator LO;
QMap<int,QStringList> featureInfo; QMap<int,QStringList> featureInfo;
featureInfo = LO.getSelectedFeature(pControl->GetMap()); featureInfo = LO.getSelectedFeature(pControl->GetMap());
QStringList filterlist; QStringList filterlist;
QList<int> types = featureInfo.keys(); QList<int> types = featureInfo.keys();
for(int i = 0; i < types.size(); i++) for(int i = 0; i < types.size(); i++)
@ -330,6 +343,7 @@ void UGSTDCALL GeometrySelectedCallback(UGlong pWnd, UGint nSelectedGeometryCoun
} }
QString filter = filterlist.join(" or "); QString filter = filterlist.join(" or ");
qDebug()<<"**************************GeometryID:"<< filter; qDebug()<<"**************************GeometryID:"<< filter;
*/
} }
@ -2349,6 +2363,35 @@ void MainWindow::Edit()
if(mapType==MapType::Map2D) if(mapType==MapType::Map2D)
{ {
if(!qMapControl->getEditStatus())
{
qMapControl->setEditStatus(true);
qMapControl->GetMap()->m_Layers.ClearLayersSelection();
qMapControl->GetMap()->m_DynamicLayers.RemoveAll();
actionStartEdit->setIcon(QIcon(":/Resources/Edit.png"));
actionEditNode->setEnabled(true);
qMapControl->Refresh();
}
else
{
qMapControl->setEditStatus(false);
UGLayers* layers = &qMapControl->GetMap()->m_Layers;
UGLayer* editLayer = layers->GetEditableLayer().GetHead();
// layers->SetEditableLayer(editLayer,false);
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();
if(editLayer!=NULL)
qDebug()<<"****************editLayer:"<<Translator::UGStr2QStr(editLayer->GetName());
}
/*
UGLayer* editLayer = qMapControl->getSelectionLayer(); UGLayer* editLayer = qMapControl->getSelectionLayer();
if(editLayer!=NULL) if(editLayer!=NULL)
{ {
@ -2356,11 +2399,11 @@ void MainWindow::Edit()
{//开启编辑 {//开启编辑
qDebug()<<"***********************OpenEdit:"; qDebug()<<"***********************OpenEdit:";
qMapControl->setEditable(editLayer,true); qMapControl->setEditable(editLayer,true);
actionStartEdit->setIcon(QIcon(":/Resources/Edit.png"));
// actionEditNode->setIcon(QIcon(":/Resources/EditNode.png"));
qMapControl->GetMap()->m_DynamicLayers.RemoveAll(); qMapControl->GetMap()->m_DynamicLayers.RemoveAll();
qMapControl->Refresh(); qMapControl->Refresh();
actionStartEdit->setIcon(QIcon(":/Resources/Edit.png"));
//actionEditNode->setIcon(QIcon(":/Resources/EditNode.png"));
actionEditNode->setEnabled(true); actionEditNode->setEnabled(true);
} }
else else
@ -2378,21 +2421,52 @@ void MainWindow::Edit()
} }
editLayer = NULL; editLayer = NULL;
} }
*/
} }
else else
{//三维 {//三维
UGLayer3DDatasetVector* pLayer3D = (UGLayer3DDatasetVector*)pSceneControl->GetUGLayer3Ds()->AddLayer(_U("FlightLines3D@Route")); // LayerOperator layerOpt;
UGQueryDef queryDef; if(!pSceneControl->GetEditStatus())
queryDef.m_nOptions = UGQueryDef::Both; //查询选项:几何对象(Geometry)和属性(Attribute)都查询 {//开启编辑
queryDef.m_nType = UGQueryDef::General; //查询类型:一般的数下条件查询 pSceneControl->SetEditStatus(true);
queryDef.m_nMode = UGQueryDef::GeneralQuery; //查询模式:一般查询(非模糊查询) pSceneControl->GetUGLayer3Ds()->ReleaseAllSelection();
queryDef.m_nCursorType = UGQueryDef::OpenStatic; //OpenStatic,用于读取数据OpenDynamic,用于数据增删改 pSceneControl->GetTrackingLayer3D()->RemoveAll();
queryDef.m_strFilter = _U("RouteNumber =2 and RouteType=1"); //查询条件
pLayer3D->SetDisplayFilter(queryDef);
actionStartEdit->setIcon(QIcon(":/Resources/Edit.png"));
// actionEditNode->setEnabled(true);
}
else
{//关闭编辑
pSceneControl->SetEditStatus(false);
pSceneControl->SetEditableLayer(pSceneControl->GetUGLayer3Ds()->GetCurrrentLayer(),false);
actionStartEdit->setIcon(QIcon(":/Resources/Edit1.png"));
actionEditNode->setIcon(QIcon(":/Resources/EditNode1.png"));
layerOpt.showNodeLabel3D(pSceneControl);
}
/*
UGLayer3D* editLayer3D = pSceneControl->GetSelectionLayer();
if(editLayer3D!=NULL)
{
if(!editLayer3D->GetEditable())
{
pSceneControl->SetEditableLayer(editLayer3D,true);
pSceneControl->GetTrackingLayer3D()->RemoveAll();
actionStartEdit->setIcon(QIcon(":/Resources/Edit.png"));
actionEditNode->setEnabled(true);
qDebug()<<"*********************EditLayerName1:"<<Translator::UGStr2QStr(pSceneControl->GetUGLayer3Ds()->GetCurrrentLayer()->GetName());
}
else
{
pSceneControl->SetEditableLayer(editLayer3D,false);
actionStartEdit->setIcon(QIcon(":/Resources/Edit1.png"));
actionEditNode->setIcon(QIcon(":/Resources/EditNode1.png"));
actionEditNode->setEnabled(false);
}
}
*/
qDebug()<<"*********************1:"<<pSceneControl->GetUGLayer3Ds()->GetInnerCount(); // qDebug()<<"*********************1:"<<pSceneControl->GetUGLayer3Ds()->GetInnerCount();
} }
} }

@ -104,7 +104,8 @@ void SceneControl::Initialize(void* pWndHandle, int dpiX, int dpiY)
UGuint SceneControl::getKeyUGFlags(unsigned int flag) UGuint SceneControl::getKeyUGFlags(unsigned int flag)
{ {
UGint flags = 0; UGint flags = 0;
if(flag & UG_VK_MENU || flag & UG_VK_SHIFT || flag & UG_VK_CONTROL){ if(flag & UG_VK_MENU || flag & UG_VK_SHIFT || flag & UG_VK_CONTROL)
{
flags = flag; // TODO: change flags = flag; // TODO: change
} }
@ -137,9 +138,13 @@ void SceneControl::OnSizeChanged(int x, int y, void* pHDC)
void SceneControl::OnLMouseDown(unsigned int nFlags, int x, int y, void* pHDC) void SceneControl::OnLMouseDown(unsigned int nFlags, int x, int y, void* pHDC)
{ {
// if(m_pUGSceneWnd->Get3DCursorShape()==38 || m_pUGSceneWnd->Get3DCursorShape()==39 || m_pUGSceneWnd->Get3DCursorShape()==40)
// {
// return;
// }
UGPoint pt(x, y); UGPoint pt(x, y);
UGC::UGuint flag = getKeyUGFlags(nFlags); UGC::UGuint flag = getKeyUGFlags(nFlags);
qDebug()<<"****************LMouseDownFlag:"<<m_pUGSceneWnd->Get3DCursorShape();
// startTracking = true; // startTracking = true;
// UGVector3d p; // UGVector3d p;
// m_pUGSceneWnd->m_SceneWindow.PixelToGlobal(p,pt,UGPixelToGlobalMode::Terrain); // m_pUGSceneWnd->m_SceneWindow.PixelToGlobal(p,pt,UGPixelToGlobalMode::Terrain);
@ -163,9 +168,15 @@ void SceneControl::OnLMouseUp(unsigned int nFlags, int x, int y, void* pHDC)
void SceneControl::OnLMouseDbClick(unsigned int nFlags, int x, int y, void* pHDC) void SceneControl::OnLMouseDbClick(unsigned int nFlags, int x, int y, void* pHDC)
{ {
UGPoint pt(x, y); if(m_pUGSceneWnd->Get3DCursorShape()==39 || m_pUGSceneWnd->Get3DCursorShape()==40)
UGC::UGuint flag = getKeyUGFlags(nFlags); {
m_pUGSceneWnd->OnLButtonDblClk(flag, pt); m_pUGSceneWnd->OnKeyDown(UG_VK_DELETE,0,UG_VK_SHIFT);//通过shift+delete组合键来实现节点删除
return;
};
// UGPoint pt(x, y);
// UGC::UGuint flag = getKeyUGFlags(nFlags);
// m_pUGSceneWnd->OnLButtonDblClk(flag, pt);
qDebug()<<"**********************OnLMouseDbClick1";
} }
void SceneControl::OnMouseMove(unsigned int nFlags, int x, int y, void* pHDC) void SceneControl::OnMouseMove(unsigned int nFlags, int x, int y, void* pHDC)
@ -173,10 +184,15 @@ void SceneControl::OnMouseMove(unsigned int nFlags, int x, int y, void* pHDC)
UGPoint pt(x, y); UGPoint pt(x, y);
UGC::UGuint flag = getKeyUGFlags(nFlags); UGC::UGuint flag = getKeyUGFlags(nFlags);
m_pUGSceneWnd->OnMouseMove(flag, pt); m_pUGSceneWnd->OnMouseMove(flag, pt);
if(this->m_EditStatus)
{
}
// qDebug()<<"*******x:"<<x; // qDebug()<<"*******x:"<<x;
// qDebug()<<"*******y:"<<y; // qDebug()<<"*******y:"<<y;
// qDebug()<<"************"; // qDebug()<<"************";
// m_pUGSceneWnd->m_SceneWindow.OnMouseMove(flag, pt); // m_pUGSceneWnd->m_SceneWindow.OnMouseMove(flag, pt);
// qDebug()<<"****************3DCursorShape:"<<m_pUGSceneWnd->GetUserAction();
// qDebug()<<"****************3DCursorShape:"<<m_pUGSceneWnd->Get3DCursorShape(); // qDebug()<<"****************3DCursorShape:"<<m_pUGSceneWnd->Get3DCursorShape();
// m_pUGSceneWnd->Refresh(); // m_pUGSceneWnd->Refresh();
} }
@ -326,6 +342,26 @@ void SceneControl::SetEditableLayer(UGLayer3D* pLayer, bool isEditable)
{ {
// TODO: // TODO:
GetUGLayer3Ds()->SetEditableLayer(pLayer,isEditable); GetUGLayer3Ds()->SetEditableLayer(pLayer,isEditable);
// this->m_EditStatus = isEditable;
}
void SceneControl::SetSelectionLayerEditable(bool isEditable)
{
UGLayer3D* editLayer3D = GetSelectionLayer();
if(!editLayer3D->GetEditable())
this->SetEditableLayer(editLayer3D,isEditable);
editLayer3D = NULL;
}
bool SceneControl::GetEditStatus()
{
return this->m_EditStatus;
}
void SceneControl::SetEditStatus(bool isEditable)
{
this->m_EditStatus = isEditable;
} }
void SceneControl::SetWorkspace(Workspace* workspace) void SceneControl::SetWorkspace(Workspace* workspace)

@ -8,6 +8,7 @@
//#include "exportsDefine.h" //#include "exportsDefine.h"
//#include <QObject> //#include <QObject>
#include "sceneeditorwnd.h"
#include "Engine/UGRecordset.h" #include "Engine/UGRecordset.h"
#include "MapEditor/UGMapEditorWnd.h" #include "MapEditor/UGMapEditorWnd.h"
#include "Graphics/UGGraphicsManager.h" #include "Graphics/UGGraphicsManager.h"
@ -25,6 +26,9 @@
#include "Layer3DDataset/UGLayer3DDatasetVectorPoint.h" #include "Layer3DDataset/UGLayer3DDatasetVectorPoint.h"
#include "Layer3DDataset/UGLayer3DDatasetVectorLR.h" #include "Layer3DDataset/UGLayer3DDatasetVectorLR.h"
#include <map>
#include <string>
namespace UGC namespace UGC
{ {
class UGWorkspace; class UGWorkspace;
@ -77,6 +81,7 @@ using namespace UGC;
bool mIsInWorkspace; bool mIsInWorkspace;
static bool mIsInitializeUGRoot3D; static bool mIsInitializeUGRoot3D;
// methods // methods
private: private:
void Initialize(void* pWndHandle, int dpiX, int dpiY); void Initialize(void* pWndHandle, int dpiX, int dpiY);
@ -201,6 +206,24 @@ using namespace UGC;
*/ */
void SetEditableLayer(UGLayer3D* pLayer, bool isEditable); void SetEditableLayer(UGLayer3D* pLayer, bool isEditable);
/*
* @cbwu
* @brief set selected layer editable
*/
void SetSelectionLayerEditable(bool isEditable=true);
/*
* @cbwu
* @brief
*/
bool GetEditStatus();
/*
* @cbwu
* @brief
*/
void SetEditStatus(bool isEditable);
public: public:
/* /*
* @en * @en
@ -258,6 +281,7 @@ using namespace UGC;
*/ */
UGLayer3D* GetSelectionLayer(); UGLayer3D* GetSelectionLayer();
// 获取所有选中对象的选择集。通常情况下,使用点击选择对象,只有个图层有选中对象,因此只有一个选择集 // 获取所有选中对象的选择集。通常情况下,使用点击选择对象,只有个图层有选中对象,因此只有一个选择集
// 若没有选中对象返回NULL; 不需要使用时请先RemoveAll(), 再delete // 若没有选中对象返回NULL; 不需要使用时请先RemoveAll(), 再delete
UGArray<UGSelection3D*>* GetGeoSelections(); UGArray<UGSelection3D*>* GetGeoSelections();
@ -290,6 +314,13 @@ using namespace UGC;
MessureAngle MessureAngle
}; };
// bool startTracking = false; // bool startTracking = false;
bool m_EditStatus = false;
/*
*@cbwu
*@brief
*/
std::map<int,UGRecordsetPtr>m_mapDisplayGeometryID;
public: public:
void removeLayer3D(UGString layerName); void removeLayer3D(UGString layerName);

@ -0,0 +1,14 @@
#include "sceneeditorwnd.h"
#include "Scene/UGScene3D.h"
SceneEditorWnd::SceneEditorWnd(UGScene3D *pScene3D):UGSceneEditorWnd(pScene3D) //调用父类的构造函数
{
}
UGEditToolPack3D *SceneEditorWnd::GetEditToolPack3D()
{
return &this->m_EditToolPack3D;
}

@ -0,0 +1,21 @@
/*
*@cbwu
*@brief UGSceneEditorWndUGEditToolPack3D
*/
#ifndef SCENEEDITORWND_H
#define SCENEEDITORWND_H
#include "SceneEditor/UGSceneEditorWnd.h"
#include "SceneEditor/UGEditToolPack3D.h"
using namespace UGC;
//暂时未使用
//继承UGSceneEditorWnd以获取其protected属性和方法
class SceneEditorWnd:public UGSceneEditorWnd
{
public:
SceneEditorWnd(UGScene3D *pScene3D);
UGEditToolPack3D* GetEditToolPack3D();
};
#endif // SCENEEDITORWND_H

@ -1,4 +1,5 @@
#include "SceneView.h" #include "SceneView.h"
#include "translator.h"
void UGSTDCALL Action3DChangedCallBack(UGlong pWnd, UGSceneUserAction oldAction,UGSceneUserAction newAction) void UGSTDCALL Action3DChangedCallBack(UGlong pWnd, UGSceneUserAction oldAction,UGSceneUserAction newAction)
{ {
@ -69,6 +70,45 @@ void UGSTDCALL Tracked3DCallBack(UGlong pWnd, UGGeometry *pGeometry, UGdouble dL
} }
void UGSTDCALL VertexModifiedCallBack(UGlong pWnd,UGPoint3D pntPosition,UGbool bMoveZ,
UGint nPointID,UGint nGeometryID,UGLayer3D *pLayer)
{
// qDebug()<<"*************************VertexModifiedCallBack";
// qDebug()<<"*************************nPointID:"<<nPointID;
}
void UGSTDCALL DynamicSelected3DCallBack(UGlong pWnd, UGString strLayerName, UGint nGeometryID)
{
qDebug()<<"*************************strLayerNameCallBack:"<<Translator::UGStr2QStr(strLayerName);
}
void UGSTDCALL GeometrySelected3DCallBack(UGlong pWnd,UGint nSelectedGeometryCount)
{
qDebug()<<"*************************GeometrySelected3DCallBack:"<<nSelectedGeometryCount;
SceneView* pSceneView = (SceneView*)pWnd;
SceneControl* pSceneControl = pSceneView->GetSceneControl();
if(pSceneControl->GetEditStatus())
{//编辑模式下,设置选中对象所在图层为可编辑。
pSceneControl->SetSelectionLayerEditable(true);
};
pSceneView = NULL;
pSceneControl = NULL;
};
void UGSTDCALL GeometrySelectChanged3DCallBack(UGlong pWnd,UGint nSelectedGeometryCount)
{
qDebug()<<"*************************GeometrySelectChanged3DCallBack:";
};
void UGSTDCALL AfterGeometry3DModifiedCallBack(
UGlong pWnd,
UGint nGeometryID,
UGLayer3D *pLayer)
{
qDebug()<<"*************************AfterGeometry3DModifiedCallBack-nGeometryID:"<<nGeometryID;
};
SceneView::SceneView(QWidget *parent) : QWidget(parent) SceneView::SceneView(QWidget *parent) : QWidget(parent)
{ {
m_pSceneControl = NULL; m_pSceneControl = NULL;
@ -89,7 +129,13 @@ SceneView::SceneView(QWidget *parent) : QWidget(parent)
m_pSceneControl->GetSceneEditWnd()->m_SceneWindow.SetTracking3DFunc(Tracking3DCallBack,(UGlong)this); m_pSceneControl->GetSceneEditWnd()->m_SceneWindow.SetTracking3DFunc(Tracking3DCallBack,(UGlong)this);
m_pSceneControl->GetSceneEditWnd()->m_SceneWindow.SetTracked3DFunc(Tracked3DCallBack,(UGlong)this); m_pSceneControl->GetSceneEditWnd()->m_SceneWindow.SetTracked3DFunc(Tracked3DCallBack,(UGlong)this);
m_pSceneControl->GetSceneEditWnd()->m_SceneWindow.SetAction3DChangedFunc(Action3DChangedCallBack,(UGlong)this); m_pSceneControl->GetSceneEditWnd()->m_SceneWindow.SetAction3DChangedFunc(Action3DChangedCallBack,(UGlong)this);
// pSceneLayersView = new SceneLayersView(); // m_pSceneControl->GetSceneEditWnd()->SetVertexModifiedFunc(VertexModifiedCallBack,(UGlong)this);
m_pSceneControl->GetSceneEditWnd()->SetVertexSelectedFunc(VertexModifiedCallBack,(UGlong)this);
m_pSceneControl->GetScene3D()->SetDynamicSelected3DFunc(DynamicSelected3DCallBack,(UGlong)this);
m_pSceneControl->GetScene3D()->SetGeometrySelected3DFunc(GeometrySelected3DCallBack,(UGlong)this);
// m_pSceneControl->GetScene3D()->SetGeometrySelectChanged3DFunc(GeometrySelectChanged3DCallBack,(UGlong)this);
m_pSceneControl->GetSceneEditWnd()->SetAfterGeometry3DModifiedFunc(AfterGeometry3DModifiedCallBack,(UGlong)this);
// pSceneLayersView = new SceneLayersView();
isEditStateFlag = false; isEditStateFlag = false;
} }
@ -130,6 +176,7 @@ void SceneView::ReviseCursor(int SceneUserAction)
switch (SceneUserAction) { switch (SceneUserAction) {
case UGSceneUserAction::suaPan: case UGSceneUserAction::suaPan:
setCursor(QCursor(QPixmap(":/Resources/Pan2.png"))); setCursor(QCursor(QPixmap(":/Resources/Pan2.png")));
// setCursor(QCursor(Qt::OpenHandCursor));
case UGSceneUserAction::suaPanSelect: case UGSceneUserAction::suaPanSelect:
setCursor(QCursor(QPixmap(":/Resources/Pan.png"))); setCursor(QCursor(QPixmap(":/Resources/Pan.png")));
break; break;
@ -172,12 +219,12 @@ void SceneView::ReviseCursor(int SceneUserAction)
} }
case UG3DCursorShape::ecPan: case UG3DCursorShape::ecPan:
{ {
setCursor(QCursor(QPixmap(":/Resources/Pan.png"))); setCursor(QCursor(Qt::OpenHandCursor));
break; break;
} }
case UG3DCursorShape::ecPanMove: case UG3DCursorShape::ecPanMove:
{ {
setCursor(QCursor(QPixmap(":/Resources/Pan2.png"))); setCursor(QCursor(Qt::ClosedHandCursor));
break; break;
} }
case UG3DCursorShape::ecZoomIn: case UG3DCursorShape::ecZoomIn:
@ -327,7 +374,16 @@ void SceneView::keyPressEvent(QKeyEvent* event)
void SceneView::mouseDoubleClickEvent(QMouseEvent *event) void SceneView::mouseDoubleClickEvent(QMouseEvent *event)
{ {
int flag = getMouseOrKeyFlag(event);
if(event->button() == Qt::LeftButton)
{
// qDebug()<<"**************************LDoubleClickEvent"<<flag;
m_pSceneControl->OnLMouseDbClick(flag,event->x(),event->y());
}
else if(event->button() == Qt::RightButton)
{
}
} }
SceneControl* SceneView::GetSceneControl() SceneControl* SceneView::GetSceneControl()

@ -31,6 +31,11 @@ public:
bool startTrackingFlag; //开始绘制追踪 bool startTrackingFlag; //开始绘制追踪
bool isEditStateFlag; //编辑状态 bool isEditStateFlag; //编辑状态
/*
*@cbwu
*@brief
*/
// QMap<int,QString>m_qmapDisplayGeometryID;
//method //method

Loading…
Cancel
Save