|
|
|
|
|
#include "mainwindow.h"
|
|
|
#include "FileParser/UGModelConfigParams.h"
|
|
|
#include "computeoffsetpositiondialog.h"
|
|
|
#include "displayroutedialog.h"
|
|
|
#include "importscenedatadialog.h"
|
|
|
#include "maplocationdialog.h"
|
|
|
#include "qregularexpression.h"
|
|
|
#include "routeglobalvariant.h"
|
|
|
#include "ui_mainwindow.h"
|
|
|
|
|
|
#include "saveroutedialog.h"
|
|
|
#include "bindroutedialog.h"
|
|
|
#include "loadonlinemapdialog.h"
|
|
|
#include "geofileparser.h"
|
|
|
#include "layeroperator.h"
|
|
|
#include "geofeatureoperator.h"
|
|
|
#include "mapthread.h"
|
|
|
#include "settingflightpoint3ddialog.h"
|
|
|
#include "plane.h"
|
|
|
#include "showplane.h"
|
|
|
#include "showplane3d.h"
|
|
|
|
|
|
#include <QToolBar>
|
|
|
#include <QToolButton>
|
|
|
#include <QMessageBox>
|
|
|
#include <QFileDialog>
|
|
|
#include <QDebug>
|
|
|
#include <QLabel>
|
|
|
#include <QDialog>
|
|
|
#include <QProgressBar>
|
|
|
#include <QProgressDialog>
|
|
|
#include <QRegularExpressionValidator>
|
|
|
#include <QThreadPool>
|
|
|
#include "math.h"
|
|
|
#include "cmath"
|
|
|
#include "mapdatamaneger.h"
|
|
|
#include "loadscenedatathread.h"
|
|
|
#include "symbolresources.h"
|
|
|
//三维
|
|
|
#include "sceneview.h"
|
|
|
#include "workspace.h"
|
|
|
#include "Scene/UGTrackingLayer3D.h"
|
|
|
#include "Scene/UGPlottingLayer3D.h"
|
|
|
#include "Scene/UGScreenLayer3D.h"
|
|
|
#include "Geometry3D/UGGeoPoint3D.h"
|
|
|
#include "Geometry3D/UGGeoModelPro.h"
|
|
|
#include "Render/UGCameraGlobal.h"
|
|
|
#include "Render/UGCameraLocal.h"
|
|
|
#include "Scene/UGLayer3DFactory.h"
|
|
|
#include "Scene/UGLayer3DManager.h"
|
|
|
#include "Render/UGRenderManager.h"
|
|
|
#include "Render/UGRenderModelPro.h"
|
|
|
#include "Render/UGRenderLine3D.h"
|
|
|
#include "Base3D/UGBoundingBox.h"
|
|
|
#include "Geometry/UGGeoPicture.h"
|
|
|
#include "Geometry3D/UGGeoPlacemark.h"
|
|
|
#include "Geometry3D/UGGeoBillboard.h"
|
|
|
#include "Geometry3D/UGGeoLine3D.h"
|
|
|
#include "GeometryPlot/UGGOLibraryManager.h"
|
|
|
|
|
|
#include "Layer3DFile/UGLayer3DDynamic.h"
|
|
|
#include "Layer3DFile/UGLayer3DModel.h"
|
|
|
#include "Layer3DFile/UGLayer3DVector.h"
|
|
|
//#include "Layer3DTree/UGLayer3DTree.h"
|
|
|
#include "Base3D/UGMathEngine.h"
|
|
|
#include "Scene/UGFlyRoute.h"
|
|
|
#include "Scene/UGFlyManager.h"
|
|
|
#include "Scene/UGFlyRoutes.h"
|
|
|
#include "Scene/UGFlyRouteStops.h"
|
|
|
#include "Scene/UGFlyRouteStop.h"
|
|
|
#include "Scene/UGFlyInterpolatedTool.h"
|
|
|
//SuperMap库
|
|
|
#include "qmapcontrol.h"//引用QMapControl头文件
|
|
|
#include "QDynamicLayers.h"
|
|
|
#include "QDynamicLayer.h"
|
|
|
#include "QDynamicObject.h"
|
|
|
#include "translator.h"//引用QMapControl工程中的头文件
|
|
|
#include "Workspace/UGWorkspace.h"//引用iObjects C++组件中的工作空间UGWorkspace头文件
|
|
|
#include "Workspace/UGResources.h"
|
|
|
#include "Map/UGMap.h"//引用iObjects C++组件中的UGMap.h头文件
|
|
|
#include "MapEditor/UGMapEditorWnd.h"
|
|
|
#include "Geometry/UGGeometry.h"
|
|
|
#include "Geometry/UGGeoLine.h"
|
|
|
//#include "Geometry/UGGeoRegion.h"
|
|
|
#include "Projection/UGPrjCoordSys.h"
|
|
|
#include "Engine/UGTable.h"
|
|
|
#include "Engine/UGDatasetVector.h"
|
|
|
#include "Engine/UGRecordset.h"
|
|
|
//#include "Toolkit/UGProgress.h"
|
|
|
//#include "Toolkit/UGRegistry.h"
|
|
|
#include "DataExchange/UGDataExchange.h"
|
|
|
#include "FileParser/UGKMLConfigParams.h"
|
|
|
#include "FileParser/UGKMZConfigParams.h"
|
|
|
#include "FileParser/UGGTiffConfigParams.h"
|
|
|
#include "FileParser/UGExchangeParamsManager.h"
|
|
|
//#include "FileParser/UGFileParseModel.h"
|
|
|
//#include "FileParser/UGFileParseFactory.h"
|
|
|
//#include "FileParser/UGFileParseManager.h"
|
|
|
//#include "FileParser/UG3dsConfigParams.h"
|
|
|
//#include "FileParser/UGFileParserTile.h"
|
|
|
//#include "FileParser/UGSimpleConfigParams.h"
|
|
|
//#include "FileParser/UGFileParseVector.h"
|
|
|
|
|
|
#include "Symbol/UGMarkerSymbolLib.h"
|
|
|
|
|
|
//工作空间及数据源默认存储路径及别名
|
|
|
const QString wsName = "MapWorkspace"; //工作空间别名
|
|
|
QString wsFullName; //工作空间存储路径
|
|
|
QString routeFullName; //航线数据存储路径
|
|
|
/*2D*/
|
|
|
const QString routeName = "Route"; //航线矢量数据源别名
|
|
|
UGString pointSetAlias = _U("Marks"); //点数据集别名
|
|
|
UGString lineSetAlias = _U("FlightLines"); //线数据集别名
|
|
|
UGString polygonSetAlias = _U("Geofencing"); //面数据集别名
|
|
|
UGString NodeLabelSetAlias = _U("NodeLabel"); //节点标签数据集别名
|
|
|
/*3D*/
|
|
|
//const QString route3DName = "Scene"; //三维场景数据源别名
|
|
|
UGString line3DSetAlias = _U("FlightLines3D"); //3D线数据集别名
|
|
|
|
|
|
//设置线段自动闭合
|
|
|
void UGSTDCALL AfterGeometryAddedCallback(UGlong pWnd, UGbool &bCancel, UGint nGeometryID, UGLayer *pLayer)
|
|
|
{//此回调函数已经往数据集添加了对象,bCancel字段为是否添加(本质是将已添加的记录删除)
|
|
|
//nGeometryID 对应属性表的"SmID"字段,该字段默认是被隐藏
|
|
|
qDebug()<<"******************nGeometryID:"<<nGeometryID;
|
|
|
|
|
|
QMapControl* pControl = (QMapControl*)pWnd;
|
|
|
pControl->resetWayPointLabel();
|
|
|
UGRecordsetPtr editRes = pLayer->GetEditRecordset(); //只包含当前编辑线段的一条记录
|
|
|
// editRes->Edit();
|
|
|
|
|
|
UGDatasetVector* dv = (UGDatasetVector*)(pLayer->GetDataset().get());
|
|
|
|
|
|
//对地图操作一下,防止弹出Dialog后地图消失
|
|
|
QPoint p = pControl->getLMousePressPoint();
|
|
|
pControl->GetUGMapWnd()->OnMouseMove(pControl->getGraphics(),0,Translator::QPoint2UGPoint(p));
|
|
|
//调出航线设置对话框
|
|
|
saveRouteDialog dlg;
|
|
|
dlg.setMaxValue(1);
|
|
|
dlg.setDrawMode(1);
|
|
|
int ret = dlg.exec();
|
|
|
|
|
|
UGGeometry* pGeometry = NULL;
|
|
|
UGGeoLine l;
|
|
|
editRes->GetGeometry(pGeometry);
|
|
|
|
|
|
QMap<QString,QString> fieldsValue;
|
|
|
GeoFeatureOperator geoFtOperator;
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
if(ret==QDialog::Accepted)
|
|
|
{
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteID,QString::number(dv->GetObjectCount()));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteHeight,QString::number(dlg.getRouteHeight()[1]));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteNumber,QString::number(dlg.getRouteNumber()[1]));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteType,QString::number(dlg.getRouteType()[1]));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.IsClosedRoute,QString::number(dlg.getRouteClosedState()[1]));
|
|
|
int s = geoFtOperator.importFeatureAttribute(dv,pGeometry,fieldsValue,false);
|
|
|
if(s==1)
|
|
|
{
|
|
|
bCancel = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(dlg.isClickedCloseBtn)
|
|
|
{
|
|
|
bCancel = true;
|
|
|
}
|
|
|
/*
|
|
|
if(ret==QDialog::Accepted)
|
|
|
{
|
|
|
qint16 routeID_dlg = dv->GetObjectCount(); //数量为属性集已有记录数+1
|
|
|
double routeHeight_dlg = dlg.getRouteHeight()[1];
|
|
|
int routeType_dlg = dlg.getRouteType()[1];
|
|
|
int routeNumber_dlg = dlg.getRouteNumber()[1];
|
|
|
UGString routeName_dlg = Translator::QStr2UGStr(dlg.getRouteText()+QString::number(routeNumber_dlg));
|
|
|
|
|
|
|
|
|
QString queryFilter = "RouteType=" + QString::number(routeType_dlg) + " and " +
|
|
|
("RouteNumber=") + QString::number(routeNumber_dlg);
|
|
|
|
|
|
UGRecordsetPtr saveRes = pControl->queryFeature(dv,Translator::QStr2UGStr(queryFilter));
|
|
|
|
|
|
UGGeometry* pTem = NULL;
|
|
|
UGGeoLine l;
|
|
|
|
|
|
if(dlg.isCloseRoute())
|
|
|
{//自动闭合线段
|
|
|
editRes->GetGeometry(pTem,0);
|
|
|
pTem->ConvertToLine(l,0);
|
|
|
UGPoint2D addPoint = l.GetStartNode();
|
|
|
l.InsertPoint(0,l.GetPointCount(),addPoint); //添加首节点
|
|
|
editRes->SetGeometry(l); //替换原线段
|
|
|
editRes->ModifyFieldValue(_U("IsClosedRoute"),1);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
editRes->ModifyFieldValue(_U("IsClosedRoute"),0);
|
|
|
}
|
|
|
|
|
|
if(!saveRes->IsEmpty())
|
|
|
{//记录已存在,覆盖
|
|
|
QMessageBox::StandardButton saveBtn;
|
|
|
saveBtn = QMessageBox::question(pControl, u8"提示", u8"航线已存在,是否覆盖?", QMessageBox::Yes|QMessageBox::No);
|
|
|
if (saveBtn == QMessageBox::Yes)
|
|
|
{
|
|
|
saveRes->Edit();
|
|
|
saveRes->SetGeometry(l);
|
|
|
saveRes->ModifyFieldValue(_U("RouteHeight"),UGVariant(routeHeight_dlg));
|
|
|
saveRes->Update();
|
|
|
bCancel = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{//航线不存在,新增航线
|
|
|
editRes->ModifyFieldValue(_U("RouteID"),UGVariant(routeID_dlg));
|
|
|
editRes->ModifyFieldValue(_U("RouteNumber"),UGVariant(routeNumber_dlg));
|
|
|
editRes->ModifyFieldValue(_U("RouteType"),UGVariant(routeType_dlg));
|
|
|
editRes->ModifyFieldValue(_U("RouteHeight"),UGVariant(routeHeight_dlg));
|
|
|
editRes->ModifyFieldValue(_U("RouteName"),UGVariant(routeName_dlg));
|
|
|
//提交记录修改
|
|
|
editRes->Update();
|
|
|
}
|
|
|
}
|
|
|
*/
|
|
|
if(ret==QDialog::Rejected)
|
|
|
{
|
|
|
bCancel = true;
|
|
|
}
|
|
|
|
|
|
// pControl->GetMap()->m_Layers.ClearLayersSelection();
|
|
|
// pControl->GetMap()->m_Layers.Remove(pLayer);
|
|
|
dv = NULL;
|
|
|
}
|
|
|
|
|
|
#pragma region{
|
|
|
//void UGSTDCALL AfterGeometryDeletedProcCallback(UGlong pWnd, UGbool &bCancel, UGint nGeometryID, UGLayer *pLayer)
|
|
|
//{
|
|
|
// qDebug()<<"**************************AfterGeometryDeletedProcCallback";
|
|
|
// qDebug()<<"**************************AfterGeometryDeletedProcCallback";
|
|
|
//}
|
|
|
|
|
|
//void UGSTDCALL BeforeGeometryDeletedProcCallback(UGlong pWnd, UGbool &bCancel, UGint nGeometryID, UGLayer *pLayer)
|
|
|
//{
|
|
|
// qDebug()<<"**************************BeforeGeometryDeletedProcCallback";
|
|
|
// qDebug()<<"**************************BeforeGeometryDeletedProcCallback";
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
void UGSTDCALL BeginEditHandleProcCallback(UGlong pWnd, UGbool &bCancel, UGint nEditSelType, UGint *pHandle, UGint nCount, UGdouble dx, UGdouble dy)
|
|
|
{
|
|
|
qDebug()<<"**************************BeginEditHandleProcCallback";
|
|
|
qDebug()<<"**************************nEditSelType"<<nEditSelType;
|
|
|
qDebug()<<"**************************nCount"<<nCount;
|
|
|
}
|
|
|
|
|
|
//void UGSTDCALL EditHandleCanceledProcCallback(UGlong pWnd, UGint nEditSelType, UGint *pHandle, UGint nCount)
|
|
|
//{
|
|
|
// qDebug()<<"**************************EditHandleCanceledProcCallback";
|
|
|
// qDebug()<<"**************************EditHandleCanceledProcCallback";
|
|
|
//}
|
|
|
|
|
|
//void UGSTDCALL AfterGeometryModifiedProcCallback(UGlong pWnd, UGint nGeometryID, UGLayer *pLayer)
|
|
|
//{
|
|
|
// qDebug()<<"**************************AfterGeometryModifiedProcCallback";
|
|
|
// qDebug()<<"**************************AfterGeometryModifiedProcCallback";
|
|
|
//}
|
|
|
|
|
|
void UGSTDCALL BeforeGeometryModifiedProcCallback(UGlong pWnd, UGbool &bCancel, UGint nGeometryID, UGLayer *pLayer)
|
|
|
{
|
|
|
qDebug()<<"**************************BeforeGeometryModifiedProcCallback";
|
|
|
qDebug()<<"**************************BeforeGeometryModifiedProcCallback";
|
|
|
}
|
|
|
|
|
|
|
|
|
//void UGSTDCALL AffterDatasetModifiedProcCallback(void* pLayerDataset,UGint nID,UGRect2D rect2D,UGModifyDatasetFlag flg)
|
|
|
//{
|
|
|
// qDebug()<<"**************************BeforeDatasetModifiedProcCallback";
|
|
|
// qDebug()<<"**************************BeforeDatasetModifiedProcCallback";
|
|
|
//}
|
|
|
|
|
|
//void UGSTDCALL TrackedProcCallback(UGlong pWnd)
|
|
|
//{
|
|
|
// qDebug()<<"**************************TrackedProcCallback";
|
|
|
// qDebug()<<"**************************TrackedProcCallback";
|
|
|
//}
|
|
|
#pragma endregion}
|
|
|
|
|
|
|
|
|
void UGSTDCALL AfterPointInputCallback(UGlong pWnd, UGdouble &dx, UGdouble &dy, UGdouble &dz)
|
|
|
{//dx:lon dy:lat
|
|
|
qDebug()<<"**************************AfterPointInputCallback";
|
|
|
qDebug()<<"**************************AfterPointInputCallback";
|
|
|
|
|
|
qDebug()<<"**************************x:"<<dx;
|
|
|
|
|
|
QMapControl* pControl = (QMapControl*)pWnd;
|
|
|
// emit pControl->beginTracking(true); //
|
|
|
qDebug()<<"******************drawMode:"<<pControl->drawMode;
|
|
|
|
|
|
if(pControl->drawMode>1) emit pControl->sendPreviousPoint(dx,dy);
|
|
|
|
|
|
// ComputeOffsetPositionDialog inputPosDlg;
|
|
|
// inputPosDlg.exec();
|
|
|
|
|
|
// double bearing = inputPosDlg.getBearing().toDouble();
|
|
|
// double dist = inputPosDlg.getDistance().toDouble();
|
|
|
}
|
|
|
|
|
|
|
|
|
void UGSTDCALL GeometrySelectedCallback(UGlong pWnd, UGint nSelectedGeometryCount)
|
|
|
{//左键点击选中触发
|
|
|
qDebug()<<"**************************GeometrySelectedCallback";
|
|
|
// qDebug()<<"**************************nSelectedGeometryCount:"<<nSelectedGeometryCount;
|
|
|
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;
|
|
|
QMap<int,QStringList> featureInfo;
|
|
|
featureInfo = LO.getSelectedFeature(pControl->GetMap());
|
|
|
|
|
|
QStringList filterlist;
|
|
|
QList<int> types = featureInfo.keys();
|
|
|
for(int i = 0; i < types.size(); i++)
|
|
|
{
|
|
|
filterlist<< "(RouteNumber in (" + featureInfo[types[i]].join(",") + ") and " + "RouteType = " + QString::number(types[i]) + ")";
|
|
|
}
|
|
|
QString filter = filterlist.join(" or ");
|
|
|
qDebug()<<"**************************GeometryID:"<< filter;
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
|
: QMainWindow(parent)
|
|
|
, ui(new Ui::MainWindow)
|
|
|
{
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
drawMode = 0;
|
|
|
|
|
|
setupUI(this);//调用界面构建函数
|
|
|
|
|
|
addMapConnect();//调用连接信号和槽的函数
|
|
|
|
|
|
addEditConnect();
|
|
|
|
|
|
// 给窗口设置策略: Qt::DefaultContextMenu
|
|
|
// 在窗口中按下鼠标右键, 这个事件处理器函数被qt框架调用 QWidget::contextMenuEvent()
|
|
|
setContextMenuPolicy(Qt::DefaultContextMenu);
|
|
|
|
|
|
SymbolResources symbolRs;
|
|
|
symbolRs.setResources(m_pWorkspace->GetResources());
|
|
|
symbolRs.reLoading();
|
|
|
symbolRs.addSymbol();
|
|
|
|
|
|
// UGString symbolPath = _U("D:/Symbol/Plane.sym");
|
|
|
// UGMarkerSymbolLib* ms = m_pWorkspace->GetResources()->GetMarkerSymbolLib();
|
|
|
// bool ss = ms->LoadFromFile(symbolPath);
|
|
|
// bool fs = ms->SaveToFile(_U("D:/test.sym"));
|
|
|
|
|
|
qDebug()<<"***********msCount:"<<m_pWorkspace->GetResources()->GetMarkerSymbolLib()->GetSymbolCount();
|
|
|
bool s = m_pWorkspace->GetResources()->GetMarkerSymbolLib()->IsIDExisted(318);
|
|
|
qDebug()<<"***********s2:"<<s;
|
|
|
|
|
|
|
|
|
// int id = ms->GetSymbolAt(0)->GetID();
|
|
|
// QString name = Translator::UGStr2QStr(ms->GetSymbolAt(0)->GetName());
|
|
|
// qDebug()<<"****************:";
|
|
|
|
|
|
/*
|
|
|
qDebug()<<"****************:" <<QDir("./").absolutePath();
|
|
|
UGDatasetVector* dv = (UGDatasetVector*) m_pWorkspace->GetDataSource(0)->GetDataset(line3DSetAlias).get();
|
|
|
dv->Open();
|
|
|
GeoFeatureOperator geoFtOpt;
|
|
|
UGRecordsetPtr res = geoFtOpt.queryFeature(dv);
|
|
|
res->MoveLast();
|
|
|
UGGeometry* pGeometry = NULL;
|
|
|
res->GetGeometry(pGeometry);
|
|
|
UGGeoLine3D* l = (UGGeoLine3D*)pGeometry;
|
|
|
const UGPoint3D* p = NULL;
|
|
|
p = l->GetPoints();
|
|
|
for(int i =0;i<pGeometry->GetSubPntCount(0);i++)
|
|
|
{
|
|
|
qDebug()<<"****************x:"<<p->x;
|
|
|
qDebug()<<"****************y:"<<p->y;
|
|
|
qDebug()<<"****************z:"<<p->z;
|
|
|
qDebug()<<"*********************";
|
|
|
p++;
|
|
|
}
|
|
|
*/
|
|
|
|
|
|
}
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
|
{
|
|
|
delete ui;
|
|
|
}
|
|
|
|
|
|
|
|
|
//界面构建函数
|
|
|
void MainWindow::setupUI(QMainWindow *mainWindow)
|
|
|
{
|
|
|
//设置应用程序界面窗体的显示标题和窗体大小
|
|
|
mainWindow->setWindowTitle(tr("MapDisplay"));
|
|
|
mainWindow->resize(1600,1200);
|
|
|
stackedWidget = new QStackedWidget;
|
|
|
//将地图窗口置于应用程序窗体的中央
|
|
|
mainWindow->setCentralWidget(stackedWidget);
|
|
|
|
|
|
//工作空间初始化
|
|
|
initWorkSpace();
|
|
|
|
|
|
//二维地图容器初始化
|
|
|
initMapControl();
|
|
|
//添加到切换容器中
|
|
|
stackedWidget->addWidget(qMapControl);
|
|
|
stackedWidget->setCurrentIndex(0);
|
|
|
|
|
|
pSceneView = NULL;
|
|
|
mapType = MapType::Map2D;
|
|
|
//初始化菜单
|
|
|
initMenu(mainWindow);
|
|
|
|
|
|
//初始化工具条
|
|
|
initMainToolBar(mainWindow);
|
|
|
}
|
|
|
|
|
|
//工作空间初始化
|
|
|
void MainWindow::initWorkSpace()
|
|
|
{
|
|
|
//存储在程序所在路径下的MapData文件夹下
|
|
|
QString workspacePath = (QDir::currentPath() + "/MapData/");
|
|
|
DirExist(workspacePath);//判断文件夹是否存在,不存在则创建
|
|
|
//初始化工作空间
|
|
|
m_pWorkspace = new UGWorkspace();
|
|
|
wsFullName = workspacePath + wsName + ".smwu"; //工作空间存储路径
|
|
|
routeFullName = workspacePath + routeName + ".udbx"; //航线数据存储路径
|
|
|
//工作空间连接信息,用于工作空间的保存
|
|
|
UGWorkspaceConnection wkCon;
|
|
|
wkCon.m_strServer = Translator::QStr2UGStr(wsFullName);
|
|
|
wkCon.m_nWorkspaceType = UGWorkspace::UGWorkspaceType::WS_Version_SMWU;
|
|
|
wkCon.m_nVersion = m_pWorkspace->GetVersion();
|
|
|
|
|
|
MapDataManeger mapDataManeger;
|
|
|
|
|
|
if(!QFile::exists(wsFullName))
|
|
|
{//不存在工作空间,则新建一个工作空间
|
|
|
//初始化工作空间,并保存
|
|
|
m_pWorkspace->SetName(Translator::QStr2UGStr(wsName));
|
|
|
UGbool bSuc = m_pWorkspace->SaveAs(wkCon); //工作空间另存为
|
|
|
// mapDataManeger.saveWorkSpace(m_pWorkspace,Translator::QStr2UGStr(wsFullName)); //保存工作空间
|
|
|
}
|
|
|
//打开工作空间
|
|
|
m_pWorkspace->Open(Translator::QStr2UGStr(wsFullName));
|
|
|
m_pWorkspace->m_WorkspaceConnection = wkCon;
|
|
|
|
|
|
/**************************Map2D**************************/
|
|
|
if(!m_pWorkspace->m_DataSources.IsAliasExisted(Translator::QStr2UGStr(routeName)))
|
|
|
{//工作空间中无Route数据源则新建数据源
|
|
|
//创建存储航线等矢量数据的数据源
|
|
|
UGDataSource* pDataSource = mapDataManeger.createDataSource(routeName,UGEngineType::Spatialite,workspacePath);
|
|
|
/*************************Map2D*************************/
|
|
|
#pragma region{
|
|
|
//创建点数据集
|
|
|
UGDatasetVectorPtr pointDsv = mapDataManeger.createVectorSet(pDataSource,UGDataset::Point,pointSetAlias);
|
|
|
//添加字段
|
|
|
pointDsv->CreateField(_U("MarkID"),UGFieldInfo::INT32,4,0);
|
|
|
pointDsv->CreateField(_U("MarkName"),UGFieldInfo::Text,255,0);
|
|
|
|
|
|
//创建线数据集
|
|
|
UGDatasetVectorPtr lineDsv = mapDataManeger.createVectorSet(pDataSource,UGDataset::Line,lineSetAlias); //创建线数据集
|
|
|
//添加字段
|
|
|
lineDsv->CreateField(_U("RouteID"),UGFieldInfo::INT32,4,0);
|
|
|
lineDsv->CreateField(_U("RouteNumber"),UGFieldInfo::INT32,4,0); //航线编号
|
|
|
lineDsv->CreateField(_U("RouteType"),UGFieldInfo::INT32,4,0); //航线类型
|
|
|
lineDsv->CreateField(_U("RouteHeight"),UGFieldInfo::Float,4,0); //航线高度
|
|
|
lineDsv->CreateField(_U("RouteName"),UGFieldInfo::Text,255,0); //航线名字
|
|
|
lineDsv->CreateField(_U("IsClosedRoute"),UGFieldInfo::INT32,4,0); //是否自闭合
|
|
|
|
|
|
//创建面数据集
|
|
|
UGDatasetVectorPtr polygonDsv = mapDataManeger.createVectorSet(pDataSource,UGDataset::Region,polygonSetAlias); //创建面数据集
|
|
|
//添加字段
|
|
|
polygonDsv->CreateField(_U("GeofencingID"),UGFieldInfo::INT32,4,0);
|
|
|
polygonDsv->CreateField(_U("GeofencingName"),UGFieldInfo::Text,255,0);
|
|
|
|
|
|
// //创建节点标签数据集
|
|
|
// UGDatasetVectorPtr NodeDsv = mapDataManeger.createVectorSet(pDataSource,UGDataset::Text,NodeLabelSetAlias); //创建节点标签数据集
|
|
|
// //添加字段
|
|
|
// NodeDsv->CreateField(_U("NodeID"),UGFieldInfo::INT32,4);
|
|
|
// NodeDsv->CreateField(_U("RouteID"),UGFieldInfo::INT32,4);
|
|
|
// NodeDsv->CreateField(_U("GeofencingID"),UGFieldInfo::INT32,4);
|
|
|
// NodeDsv->CreateField(_U("NodeLabel"),UGFieldInfo::Text,255);
|
|
|
#pragma endregion}
|
|
|
|
|
|
/*************************Map3D*************************/
|
|
|
#pragma region{
|
|
|
//创建3D线数据集
|
|
|
UGDatasetVectorPtr line3DDsv = mapDataManeger.createVectorSet(pDataSource,UGDataset::LineZ,line3DSetAlias); //创建线数据集
|
|
|
//添加字段
|
|
|
line3DDsv->CreateField(_U("RouteID"),UGFieldInfo::INT32,4,0);
|
|
|
line3DDsv->CreateField(_U("RouteNumber"),UGFieldInfo::INT32,4,0); //航线编号
|
|
|
line3DDsv->CreateField(_U("RouteType"),UGFieldInfo::INT32,4,0); //航线类型
|
|
|
// line3DDsv->CreateField(_U("RouteHeight"),UGFieldInfo::Float,4,0); //航线高度
|
|
|
line3DDsv->CreateField(_U("RouteName"),UGFieldInfo::Text,255,0); //航线名字
|
|
|
line3DDsv->CreateField(_U("IsClosedRoute"),UGFieldInfo::INT32,4,0); //是否自闭合
|
|
|
|
|
|
#pragma endregion}
|
|
|
|
|
|
|
|
|
//往工作空间中添加数据源
|
|
|
m_pWorkspace->m_DataSources.Insert(Translator::QStr2UGStr(routeName),pDataSource);
|
|
|
|
|
|
//保存工作空间
|
|
|
m_pWorkspace->m_WorkspaceConnection.m_bFailIfExists = false;//调用save前要设置
|
|
|
UGbool ss = m_pWorkspace->Save();
|
|
|
pDataSource = NULL;
|
|
|
}
|
|
|
|
|
|
|
|
|
// for (int i=0;i<m_pWorkspace->m_DataSources.GetCount();i++)
|
|
|
// {
|
|
|
// qDebug()<<"DataSourceName:"<<Translator::UGStr2QStr(m_pWorkspace->m_DataSources.m_strArrNames[i]);
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
//二维地图容器初始化
|
|
|
void MainWindow::initMapControl()
|
|
|
{
|
|
|
//实例化一个地图窗口对象,即QMapControl对象
|
|
|
qMapControl = new QMapControl;
|
|
|
qMapControl->GetUGMapWnd()->SetAfterGeometryAddedFunc(AfterGeometryAddedCallback,(UGlong)qMapControl);
|
|
|
|
|
|
qMapControl->GetUGMapWnd()->SetAfterPointInputFunc(AfterPointInputCallback,(UGlong)qMapControl);
|
|
|
qMapControl->GetUGMapWnd()->SetGeometrySelectedFunc(GeometrySelectedCallback,(UGlong)qMapControl);
|
|
|
// qMapControl->GetUGMapWnd()->SetSingleGeometrySelectedFunc(SingleGeometrySelectedCallback,(UGlong)qMapControl);
|
|
|
// qMapControl->GetUGMapWnd()->SetTrackedFunc(TrackedProcCallback,(UGlong)qMapControl);
|
|
|
// 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()->SetAfterGeometryModifiedFunc(AfterGeometryModifiedProcCallback,(UGlong)qMapControl);
|
|
|
qMapControl->GetUGMapWnd()->SetBeforeGeometryModifiedFunc(BeforeGeometryModifiedProcCallback,(UGlong)qMapControl);
|
|
|
qMapControl->setFocus();
|
|
|
}
|
|
|
|
|
|
//菜单初始化
|
|
|
void MainWindow::initMenu(QMainWindow* mainWindow)
|
|
|
{
|
|
|
//保存航线ui
|
|
|
saveRouteDlg = new saveRouteDialog;
|
|
|
/****************************Map右键菜单**************************************/
|
|
|
//添加地图右键菜单对象
|
|
|
mapRBtnMenu = new QMenu(mainWindow);
|
|
|
// 属性右键菜单
|
|
|
attributeRBtnMenu = new QMenu(mainWindow);
|
|
|
// 添加菜单QAction
|
|
|
addMapMenuAction();
|
|
|
|
|
|
rMenuType = RBtnMenuType::DefaultMenu;
|
|
|
|
|
|
inputPosDlg = new ComputeOffsetPositionDialog;
|
|
|
}
|
|
|
|
|
|
//工具条初始化
|
|
|
void MainWindow::initMainToolBar(QMainWindow *mainWindow)
|
|
|
{
|
|
|
//向应用程序窗体中添加工具条对象
|
|
|
mainToolBar = new QToolBar(mainWindow);
|
|
|
mainWindow->addToolBar(Qt::TopToolBarArea,mainToolBar);
|
|
|
//调用addMapAction函数向界面中添加功能按钮
|
|
|
addMapAction(mainWindow);
|
|
|
|
|
|
QToolButton *tb = qobject_cast<QToolButton *>(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)
|
|
|
{
|
|
|
//为"打开工作空间中地图"按钮添加按钮图标并将其置于工具条上
|
|
|
actionOpen = new QAction(QIcon(":/Resources/Image_Open.png"),"Open", this);
|
|
|
mainToolBar->addAction(actionOpen);
|
|
|
|
|
|
//为"全幅显示地图"按钮添加按钮图标并将其置于工具条上
|
|
|
actionViewEntire = new QAction(QIcon(":/Resources/Entire.png"),"View Entire",this);
|
|
|
mainToolBar->addAction(actionViewEntire);
|
|
|
|
|
|
//为"放大地图"按钮添加按钮图标并将其置于工具条上
|
|
|
actionZoomin = new QAction(QIcon(":/Resources/Zoomin.png"),"Zoom In",this);
|
|
|
mainToolBar->addAction(actionZoomin);
|
|
|
|
|
|
//为"缩小地图"按钮添加按钮图标并将其置于工具条上
|
|
|
actionZoomout = new QAction(QIcon(":/Resources/Zoomout.png"),"Zoom Out",this);
|
|
|
mainToolBar->addAction(actionZoomout);
|
|
|
|
|
|
//为"平移浏览地图"按钮添加按钮图标并将其置于工具条上
|
|
|
actionPan = new QAction(QIcon(":/Resources/Pan.png"),"Pan",this);
|
|
|
mainToolBar->addAction(actionPan);
|
|
|
|
|
|
//为"距离量算"按钮添加按钮图标并将其置于工具条上
|
|
|
actionCalcLength = new QAction(QIcon(":/Resources/Length.png"),"length",this);
|
|
|
mainToolBar->addAction(actionCalcLength);
|
|
|
|
|
|
//为"面积量算"按钮添加按钮图标并将其置于工具条上
|
|
|
actionCalcArea = new QAction(QIcon(":/Resources/Area.png"),"Area",this);
|
|
|
mainToolBar->addAction(actionCalcArea);
|
|
|
|
|
|
//为"角度量算"按钮添加按钮图标并将其置于工具条上
|
|
|
actionCalcAngle = new QAction(QIcon(":/Resources/Angle.png"),"angle",this);
|
|
|
mainToolBar->addAction(actionCalcAngle);
|
|
|
|
|
|
//为"选择"按钮添加按钮图标并将其置于工具条上
|
|
|
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);
|
|
|
|
|
|
//为"绘制线"按钮添加按钮图标并将其置于工具条上
|
|
|
actionDrawLine = new QAction(QIcon(":/Resources/Image_Line.png"),"DrawLine",this);
|
|
|
mainToolBar->addAction(actionDrawLine);
|
|
|
|
|
|
//为"绘制多边形"按钮添加按钮图标并将其置于工具条上
|
|
|
actionDrawPolygon = new QAction(QIcon(":/Resources/Image_Polygon.png"),"DrawPolygon",this);
|
|
|
mainToolBar->addAction(actionDrawPolygon);
|
|
|
|
|
|
//绘制要素时手动输入点触发按钮
|
|
|
actionInputPoint = new QAction(QIcon(":/Resources/InputPoint.png"),"InputPoint",this);
|
|
|
mainToolBar->addAction(actionInputPoint);
|
|
|
|
|
|
//绘制在线地图按钮
|
|
|
actionOnlineMap = new QAction(QIcon(":/Resources/OnlineMap.png"),"OnlineMap",this);
|
|
|
mainToolBar->addAction(actionOnlineMap);
|
|
|
|
|
|
//绘制地图定位按钮
|
|
|
actionMapLocation = new QAction(QIcon(":/Resources/MapLocation.png"),"地图定位",this);
|
|
|
mainToolBar->addAction(actionMapLocation);
|
|
|
|
|
|
//绘制二三维地图切换按钮
|
|
|
actionTransformMap = new QAction(QIcon(":/Resources/view_3d.png"),"3D地图",this);
|
|
|
mainToolBar->addAction(actionTransformMap);
|
|
|
|
|
|
//绘制导入数据按钮
|
|
|
actionImportData = new QAction(QIcon(":/Resources/import_data.png"),"导入数据",this);
|
|
|
mainToolBar->addAction(actionImportData);
|
|
|
|
|
|
}
|
|
|
|
|
|
//添加地图右键菜单QAction
|
|
|
void MainWindow::addMapMenuAction()
|
|
|
{
|
|
|
// 地图右键菜单QAction
|
|
|
actionImportRoute = mapRBtnMenu->addAction(u8"导入航线");
|
|
|
actionShowRoute = mapRBtnMenu->addAction(u8"显示航线");
|
|
|
actionBindRoute = mapRBtnMenu->addAction(u8"装订航线");
|
|
|
|
|
|
//属性右键菜单QAction
|
|
|
actionAttribute = attributeRBtnMenu->addAction("属性");
|
|
|
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()
|
|
|
{
|
|
|
connect(qMapControl,&QMapControl::sendPreviousPoint,inputPosDlg,&ComputeOffsetPositionDialog::acceptPresiousPoint);
|
|
|
connect(inputPosDlg,&ComputeOffsetPositionDialog::sendComputedPoint,qMapControl,&QMapControl::clickedComputedPoint);
|
|
|
|
|
|
//连接信号actionOpen和槽openMap
|
|
|
connect(actionOpen,&QAction::triggered,this,&MainWindow::openRasterMap);
|
|
|
|
|
|
//连接信号actionViewEntire和槽viewEntire
|
|
|
connect(actionViewEntire,&QAction::triggered,this,&MainWindow::viewEntire);
|
|
|
|
|
|
//连接信号actionZoomin和槽zoomIn
|
|
|
connect(actionZoomin,&QAction::triggered,this,&MainWindow::zoomIn);
|
|
|
|
|
|
//连接信号actionZoomout和槽zoomOut
|
|
|
connect(actionZoomout,&QAction::triggered,this,&MainWindow::zoomOut);
|
|
|
|
|
|
//连接信号actionPan和槽pan
|
|
|
connect(actionPan,&QAction::triggered,this,&MainWindow::pan);
|
|
|
|
|
|
//连接信号actionCalcLength和槽calcLength
|
|
|
connect(actionCalcLength,&QAction::triggered,this,&MainWindow::calcLength);
|
|
|
|
|
|
//连接信号actionCalcArea和槽calcArea
|
|
|
connect(actionCalcArea,&QAction::triggered,this,&MainWindow::calcArea);
|
|
|
|
|
|
//连接信号actionCalcAngle和槽calcAngle
|
|
|
connect(actionCalcAngle,&QAction::triggered,this,&MainWindow::calcAngle);
|
|
|
|
|
|
//连接信号actionSelect和槽Select
|
|
|
connect(actionSelect,&QAction::triggered,this,&MainWindow::Select);
|
|
|
|
|
|
//连接信号actionDrawPoint和槽drawPoint
|
|
|
connect(actionDrawPoint,&QAction::triggered,this,&MainWindow::drawPoint);
|
|
|
|
|
|
//连接信号actionDrawLine和槽drawLine
|
|
|
connect(actionDrawLine,&QAction::triggered,this,&MainWindow::drawLine);
|
|
|
|
|
|
//连接信号actionDrawPolygon和槽drawPolygon
|
|
|
connect(actionDrawPolygon,&QAction::triggered,this,&MainWindow::drawPolygon);
|
|
|
|
|
|
//连接信号actionInputPoint和槽showComputeOffsetPosition
|
|
|
connect(actionInputPoint,&QAction::triggered,this,&MainWindow::showComputeOffsetPosition);
|
|
|
|
|
|
//连接信号actionOnlineMap和槽showOnlineMapDialog
|
|
|
connect(actionOnlineMap,&QAction::triggered,this,&MainWindow::showOnlineMapDialog);
|
|
|
|
|
|
//连接信号actionOnlineMap与地图定位弹窗
|
|
|
connect(actionMapLocation,&QAction::triggered,this,[=](){
|
|
|
MapLocationDialog mapLocationDlg;
|
|
|
if(mapType==MapType::Map2D)
|
|
|
mapLocationDlg.setMap(qMapControl->GetUGMapWnd());
|
|
|
else
|
|
|
mapLocationDlg.setScene(pSceneControl);
|
|
|
mapLocationDlg.exec();
|
|
|
});
|
|
|
|
|
|
//连接信号actionTransformMap与槽transformMap
|
|
|
connect(actionTransformMap,&QAction::triggered,this,&MainWindow::transformMap);
|
|
|
|
|
|
//连接信号actionTransformMap与ImportSceneDataDialog对话框
|
|
|
connect(actionImportData,&QAction::triggered,this,[&](){
|
|
|
ImportSceneDataDialog importSceneDataDlg;
|
|
|
connect(&importSceneDataDlg,&ImportSceneDataDialog::sendSceneDataPath,this,&MainWindow::importSceneData);
|
|
|
importSceneDataDlg.exec();
|
|
|
});
|
|
|
|
|
|
/********************右键菜单信号槽连接********************/
|
|
|
//连接信号actionBindRoute和槽showBindRouteDialog
|
|
|
connect(actionBindRoute,&QAction::triggered,this,&MainWindow::showBindRouteDialog);
|
|
|
|
|
|
// 连接信号actionShowRoute和槽DisplayRouteDialog
|
|
|
connect(actionShowRoute,&QAction::triggered,this,[=](){
|
|
|
//获取线数据集
|
|
|
UGDatasetPtr Route_ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName))->GetDataset(lineSetAlias);
|
|
|
Route_ds->Open();
|
|
|
|
|
|
DisplayRouteDialog displayRouteDlg;
|
|
|
displayRouteDlg.setDataset(Route_ds);
|
|
|
displayRouteDlg.setMapEditorWnd(qMapControl->GetUGMapWnd());
|
|
|
displayRouteDlg.addRouteTypeItem();
|
|
|
|
|
|
displayRouteDlg.exec();
|
|
|
Route_ds = NULL;
|
|
|
});
|
|
|
|
|
|
// 连接信号actionImportRoute和槽导入
|
|
|
connect(actionImportRoute,&QAction::triggered,this,[=](){
|
|
|
importKMLData();
|
|
|
});
|
|
|
|
|
|
/********************属性右键菜单信号槽连接********************/
|
|
|
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)
|
|
|
{
|
|
|
pSceneView = new SceneView();
|
|
|
pSceneView->setAttribute(Qt::WA_DeleteOnClose); // 关闭后就释放
|
|
|
pSceneView->resize(parent->width(),parent->height());
|
|
|
// pSceneView->setFocus();
|
|
|
|
|
|
pSceneControl = pSceneView->GetSceneControl();
|
|
|
pSceneControl->SetWorkspace(new Workspace(m_pWorkspace));
|
|
|
|
|
|
//添加场景右键菜单对象
|
|
|
initSceneMene();
|
|
|
|
|
|
//添加信号连接
|
|
|
addSceneConnect();
|
|
|
|
|
|
addSceneActionConnect();
|
|
|
}
|
|
|
|
|
|
//三维场景菜单初始化
|
|
|
void MainWindow::initSceneMene()
|
|
|
{
|
|
|
//添加场景右键菜单对象
|
|
|
sceneRBtnMenu = new QMenu(this);
|
|
|
addSceneMenuAction();
|
|
|
|
|
|
rMenuType = RBtnMenuType::DefaultMenu;
|
|
|
}
|
|
|
|
|
|
//添加场景右键菜单QAction
|
|
|
void MainWindow::addSceneMenuAction()
|
|
|
{
|
|
|
// 场景右键菜单QAction
|
|
|
actionSceneImportRoute = sceneRBtnMenu->addAction(u8"导入航线");
|
|
|
actionSceneShowRoute = sceneRBtnMenu->addAction(u8"显示航线");
|
|
|
actionSceneBindRoute = sceneRBtnMenu->addAction(u8"装订航线");
|
|
|
}
|
|
|
|
|
|
//Scene QAction连接信号和槽的函数
|
|
|
void MainWindow::addSceneActionConnect()
|
|
|
{
|
|
|
/********************场景右键菜单信号槽连接********************/
|
|
|
//连接信号actionBindRoute和槽showBindRouteDialog
|
|
|
connect(actionSceneBindRoute,&QAction::triggered,this,&MainWindow::showBindRouteDialog);
|
|
|
|
|
|
// 连接信号actionShowRoute和槽DisplayRouteDialog
|
|
|
connect(actionSceneShowRoute,&QAction::triggered,this,[=](){
|
|
|
//获取线数据集
|
|
|
UGDatasetPtr Route3D_ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName))->GetDataset(line3DSetAlias);
|
|
|
Route3D_ds->Open();
|
|
|
DisplayRouteDialog displayRouteDlg;
|
|
|
displayRouteDlg.setDataset(Route3D_ds);
|
|
|
displayRouteDlg.setSceneControl(pSceneControl);
|
|
|
displayRouteDlg.addRouteTypeItem();
|
|
|
|
|
|
displayRouteDlg.exec();
|
|
|
Route3D_ds = NULL;
|
|
|
});
|
|
|
|
|
|
// 连接信号actionImportRoute和槽导入
|
|
|
connect(actionSceneImportRoute,&QAction::triggered,this,[=](){
|
|
|
importKML3DData();
|
|
|
});
|
|
|
|
|
|
/********************场景右键属性菜单信号槽连接********************/
|
|
|
//连接actionExportFile与KML导出函数
|
|
|
connect(actionExportFile,&QAction::triggered,this,&MainWindow::exportKMLFile);
|
|
|
}
|
|
|
|
|
|
//Scene连接信号和槽的函数
|
|
|
void MainWindow::addSceneConnect()
|
|
|
{
|
|
|
// connect(pSceneView,&SceneView::sendTrackedGeometry,this,&MainWindow::showSaveRoute3DDialog);
|
|
|
|
|
|
connect(pSceneView,&SceneView::showSettingFlightPointDialg,this,&MainWindow::showSettingFlightPoint3DDialog);
|
|
|
|
|
|
//连接右键属性菜单信号
|
|
|
connect(pSceneView,&SceneView::showAttributeMenu,this,&MainWindow::showAttributeMenu);
|
|
|
}
|
|
|
|
|
|
|
|
|
//判断文件夹是否存在
|
|
|
UGbool MainWindow::DirExist(QString fullPath)
|
|
|
{
|
|
|
QDir dir(fullPath);
|
|
|
if(dir.exists())
|
|
|
{
|
|
|
//存在文件夹
|
|
|
return true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//不存在则创建
|
|
|
bool ok = dir.mkdir(fullPath); //只创建一级子目录,即必须保证上级目录存在
|
|
|
//bool ok = dir.mkpath(fullPath);//不存在当前目录,创建,可创建多级目录
|
|
|
return ok;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 导入KML/KMZ文件
|
|
|
void MainWindow::importKMLData()
|
|
|
{
|
|
|
//获取文件路径
|
|
|
QString qStrPath = QFileDialog::getOpenFileName(this,"导入KML/KMZ文件",
|
|
|
":/supermap-iobjectscpp/MyProject/MapDisplay/SampleData/",
|
|
|
"Google KML(*.kml *.kmz)");
|
|
|
if(qStrPath.isEmpty())
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//获取数据源
|
|
|
UGDataSource* pDataSource = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
if(pDataSource==NULL) return;
|
|
|
|
|
|
//打开KML文件
|
|
|
UGString dtName = pDataSource->GetUnoccupiedDatasetName(_U("KML"));//导入数据集名称
|
|
|
GeoFileParser GeoFP;
|
|
|
bool issucceed = GeoFP.importKMLData(pDataSource,dtName,qStrPath);
|
|
|
|
|
|
if(issucceed)
|
|
|
{
|
|
|
UGDatasetPtr kmlDt = pDataSource->GetDataset(dtName);
|
|
|
UGDatasetVector* kmlDv = (UGDatasetVector*) kmlDt.get();
|
|
|
if(!kmlDv->IsOpen()) kmlDv->Open();
|
|
|
|
|
|
GeoFeatureOperator geoFtOperator;
|
|
|
UGRecordsetPtr kmlRes = geoFtOperator.queryFeature(kmlDv);
|
|
|
LayerOperator layerOperator;
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
UGStyle sty;
|
|
|
routeGVar.getTemporaryStyle(sty);
|
|
|
// if(mapType==MapType::Map2D)
|
|
|
// layerOperator.showKMLTemporary(qMapControl,kmlRes);
|
|
|
|
|
|
//将kml航线临时展示在动态图层
|
|
|
UGMap* pMap = qMapControl->GetMap();
|
|
|
UGDynamicLayer* pDyLayer = NULL;
|
|
|
UGString kmlLayerName = _U("KMLDyLayer");
|
|
|
layerOperator.getDynamicLayer(pMap,pDyLayer,kmlLayerName);
|
|
|
layerOperator.addGeometryInDynamicLayer(pDyLayer,kmlRes,sty);
|
|
|
//设置第一条航线高亮
|
|
|
routeGVar.getHighLightStyle(sty);
|
|
|
pDyLayer->GetAt(0)->SetStyle(&sty);
|
|
|
pMap->m_DynamicLayers.Add(pDyLayer);
|
|
|
qMapControl->Refresh();
|
|
|
|
|
|
//航线属性信息导入
|
|
|
kmlRes->MoveFirst();
|
|
|
UGDatasetVector* dstDV = (UGDatasetVector*)pDataSource->GetDataset(lineSetAlias).get();
|
|
|
if(!dstDV->IsOpen()) dstDV->Open();
|
|
|
UGGeometry* pGeometry = NULL;
|
|
|
QMap<QString,QString> fieldsValue;
|
|
|
//连接航线导入状态信号
|
|
|
connect(this,&MainWindow::sendAddRouteState,saveRouteDlg,&saveRouteDialog::getAddRouteState);
|
|
|
//连接航线导入信号
|
|
|
connect(saveRouteDlg,&saveRouteDialog::importRoute,this,[&](int routeID,int routeType,int routeNumber,double routeHeight,int routeClosedState){
|
|
|
//移动指针到当前航线
|
|
|
kmlRes->MoveTo(routeID-1);
|
|
|
//提取航线属性信息
|
|
|
GeoFeatureOperator geoFtOperator;
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteID,QString::number(dstDV->GetObjectCount()+1));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteHeight,QString::number(routeHeight));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteNumber,QString::number(routeNumber));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteType,QString::number(routeType));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.IsClosedRoute,QString::number(routeClosedState));
|
|
|
//导入数据集
|
|
|
kmlRes->GetGeometry(pGeometry);
|
|
|
int ss = geoFtOperator.importFeatureAttribute(dstDV,pGeometry,fieldsValue);
|
|
|
emit sendAddRouteState(ss);
|
|
|
//qDebug()<<"*******************RecordCount:"<<dstDV->GetObjectCount();
|
|
|
// kmlRes->MoveNext();
|
|
|
pGeometry = NULL;
|
|
|
kmlDv = NULL;
|
|
|
});
|
|
|
|
|
|
//高亮当前要导入的航线
|
|
|
connect(saveRouteDlg,&saveRouteDialog::highLightGeometry,this,[&](int currentGeometryID,int lastGeometryID){
|
|
|
// UGDynamicLayer* pDyLayer = qMapControl->GetMap()->m_DynamicLayers.GetDynamicLayer(kmlLayerName);
|
|
|
//取消原高亮几何对象
|
|
|
routeGVar.getTemporaryStyle(sty);
|
|
|
pDyLayer->GetAt(lastGeometryID-1)->SetStyle(&sty);
|
|
|
// 高亮新几何对象
|
|
|
routeGVar.getHighLightStyle(sty);
|
|
|
pDyLayer->GetAt(currentGeometryID-1)->SetStyle(&sty);
|
|
|
qMapControl->Refresh();
|
|
|
});
|
|
|
//显示弹窗
|
|
|
saveRouteDlg->setMaxValue(kmlRes->GetRecordCount());
|
|
|
int ret = saveRouteDlg->exec();
|
|
|
|
|
|
//清除数据集和临时航线图层
|
|
|
pDataSource->DeleteDataset(dtName);
|
|
|
pDyLayer->RemoveAll();
|
|
|
qMapControl->Refresh();
|
|
|
|
|
|
pDyLayer = NULL;
|
|
|
pDataSource = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//导入三维KML数据
|
|
|
void MainWindow::importKML3DData()
|
|
|
{
|
|
|
//获取文件路径
|
|
|
QString qStrPath = QFileDialog::getOpenFileName(this,"导入KML/KMZ文件",
|
|
|
":/supermap-iobjectscpp/MyProject/MapDisplay/SampleData/",
|
|
|
"Google KML(*.kml *.kmz)");
|
|
|
if(qStrPath.isEmpty())
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//获取数据源
|
|
|
UGDataSource* pDataSource = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
if(pDataSource==NULL) return;
|
|
|
|
|
|
//打开KML文件
|
|
|
UGString dtName = pDataSource->GetUnoccupiedDatasetName(_U("KML3D"));//导入数据集名称
|
|
|
GeoFileParser GeoFP;
|
|
|
bool issucceed = GeoFP.importKMLData(pDataSource,dtName,qStrPath);
|
|
|
|
|
|
if(issucceed)
|
|
|
{
|
|
|
UGDatasetPtr kmlDt = pDataSource->GetDataset(dtName);
|
|
|
UGDatasetVector* kmlDv = (UGDatasetVector*) kmlDt.get();
|
|
|
if(!kmlDv->IsOpen()) kmlDv->Open();
|
|
|
|
|
|
GeoFeatureOperator geoFtOperator;
|
|
|
UGRecordsetPtr kml3DRes = geoFtOperator.queryFeature(kmlDv);
|
|
|
LayerOperator layerOperator;
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
UGStyle3D defaultStyle;
|
|
|
UGStyle3D highLightStyle;
|
|
|
routeGVar.getTemporaryStyle3D(defaultStyle);
|
|
|
routeGVar.getHighLightStyle3D(highLightStyle);
|
|
|
// sty.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
|
|
|
//添加到追踪层
|
|
|
// layerOperator.addGeometryToTrackingLayer3D(pSceneControl,kml3DRes);
|
|
|
//设置第一条航线高亮
|
|
|
UGGeoLine3D* line3D = NULL;
|
|
|
UGGeometry* pGeometry = NULL;
|
|
|
UGVariant v;
|
|
|
UGVariant v1;
|
|
|
UGString tag;
|
|
|
kml3DRes->MoveFirst();
|
|
|
kml3DRes->GetGeometry(pGeometry);
|
|
|
kml3DRes->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteType),v);
|
|
|
kml3DRes->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteNumber),v1);
|
|
|
tag = v.ToString() + _U("_") + v1.ToString();
|
|
|
line3D = (UGGeoLine3D*)pGeometry;
|
|
|
line3D->SetStyle3D(&highLightStyle);
|
|
|
trackingLayer3D->Add(line3D,tag);
|
|
|
//设置第一条航线高亮
|
|
|
// routeGVar.getHighLightStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(0)->SetStyle3D(&highLightStyle);
|
|
|
// UGStyle3D* sty = trackingLayer3D->GetAt(1)->GetStyle3D();
|
|
|
// trackingLayer3D->GetAt(0)->GetStyle3D()->SetLineColor3D(highLightStyle.GetLineColor3D());
|
|
|
// routeGVar.getTemporaryStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(0)->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D());
|
|
|
// routeGVar.getHighLightStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(1)->SetStyle3D(&sty);
|
|
|
// trackingLayer3D->GetAt(1)->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D());
|
|
|
// routeGVar.getTemporaryStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(1)->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D());
|
|
|
// routeGVar.getHighLightStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(1)->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D());
|
|
|
// trackingLayer3D->SetRefresh(false);
|
|
|
|
|
|
//航线属性信息导入
|
|
|
kml3DRes->MoveFirst();
|
|
|
UGDatasetVector* dstDV = (UGDatasetVector*)pDataSource->GetDataset(line3DSetAlias).get();
|
|
|
if(!dstDV->IsOpen()) dstDV->Open();
|
|
|
// UGGeometry* pGeometry = NULL;
|
|
|
QMap<QString,QString> fieldsValue;
|
|
|
saveRouteDialog* saveKMLDlg = new saveRouteDialog();
|
|
|
saveKMLDlg->setHeightVisible(false);
|
|
|
//连接航线导入状态信号
|
|
|
connect(this,&MainWindow::sendAddRouteState,saveKMLDlg,&saveRouteDialog::getAddRouteState,Qt::UniqueConnection);
|
|
|
//连接航线导入信号
|
|
|
connect(saveKMLDlg,&saveRouteDialog::importRoute,this,[&](int routeID,int routeType,int routeNumber,double routeHeight,int routeClosedState){
|
|
|
//移动指针到当前航线
|
|
|
kml3DRes->MoveTo(routeID-1);
|
|
|
//提取航线属性信息
|
|
|
GeoFeatureOperator geoFtOperator;
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteID,QString::number(dstDV->GetObjectCount()+1));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteHeight,QString::number(routeHeight));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteNumber,QString::number(routeNumber));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteType,QString::number(routeType));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.IsClosedRoute,QString::number(routeClosedState));
|
|
|
//导入数据集
|
|
|
kml3DRes->GetGeometry(pGeometry);
|
|
|
int ss = geoFtOperator.importFeatureAttribute(dstDV,pGeometry,fieldsValue);
|
|
|
emit sendAddRouteState(ss);
|
|
|
//qDebug()<<"*******************RecordCount:"<<dstDV->GetObjectCount();
|
|
|
// kmlRes->MoveNext();
|
|
|
pGeometry = NULL;
|
|
|
kmlDv = NULL;
|
|
|
});
|
|
|
|
|
|
//高亮当前要导入的航线
|
|
|
connect(saveKMLDlg,&saveRouteDialog::highLightGeometry,this,[&](int currentGeometryID,int lastGeometryID){
|
|
|
// qDebug()<<"********************currentGeometryID:"<<currentGeometryID;
|
|
|
// qDebug()<<"********************lastGeometryID:"<<lastGeometryID;
|
|
|
// qDebug()<<"***********************Count:"<<trackingLayer3D->GetCount();
|
|
|
trackingLayer3D->RemoveAll();
|
|
|
|
|
|
line3D = NULL;
|
|
|
pGeometry = NULL;
|
|
|
// trackingLayer3D->RemoveAt(currentGeometryID-1);
|
|
|
kml3DRes->MoveTo(currentGeometryID-1);
|
|
|
kml3DRes->GetGeometry(pGeometry);
|
|
|
line3D = (UGGeoLine3D*)pGeometry;
|
|
|
line3D->SetStyle3D(&highLightStyle);
|
|
|
kml3DRes->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteType),v);
|
|
|
kml3DRes->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteNumber),v1);
|
|
|
tag = v.ToString() + _U("_") + v1.ToString();
|
|
|
trackingLayer3D->Add(line3D,tag);
|
|
|
});
|
|
|
|
|
|
//connect(saveKMLDlg,&saveRouteDialog::highLightGeometry,this,&MainWindow::highLightKMLGeometry);
|
|
|
//显示弹窗
|
|
|
saveKMLDlg->setMaxValue(kml3DRes->GetRecordCount());
|
|
|
int ret = saveKMLDlg->exec();
|
|
|
// saveKMLDlg->show();
|
|
|
|
|
|
//清除数据集和临时航线图层
|
|
|
pDataSource->DeleteDataset(dtName);
|
|
|
trackingLayer3D->RemoveAll();
|
|
|
// trackingLayer3D->SetRefresh(false);
|
|
|
|
|
|
// routeGVar.getHighLightStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(0)->SetStyle3D(&sty);
|
|
|
// routeGVar.getTemporaryStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(0)->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D());
|
|
|
// trackingLayer3D->GetAt(0)->SetStyle3D(&sty);
|
|
|
// routeGVar.getHighLightStyle3D(sty);
|
|
|
// trackingLayer3D->GetAt(1)->SetStyle3D(&sty);
|
|
|
// trackingLayer3D->GetAt(1)->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D());
|
|
|
|
|
|
// pSceneControl->GetScene3D()->UpdateData();
|
|
|
// pSceneControl->GetScene3D()->Refresh();
|
|
|
// pSceneControl->Refresh();
|
|
|
|
|
|
// pDataSource->DeleteDataset(dtName);
|
|
|
|
|
|
delete saveKMLDlg;
|
|
|
pDataSource = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//导出KML文件
|
|
|
void MainWindow::exportKMLFile()
|
|
|
{
|
|
|
QString savePath = QFileDialog::getSaveFileName(this, tr("导出KML文件"),
|
|
|
"/航线1",
|
|
|
tr("Google KML(*.kml);;Google KML(*.kmz)"));
|
|
|
// qDebug()<<"*********************************导出被调用了!";
|
|
|
if(savePath.isEmpty()) return;
|
|
|
|
|
|
LayerOperator layerOpt;
|
|
|
QMap<int,QStringList> featureInfo;
|
|
|
if(mapType==MapType::Map2D)
|
|
|
featureInfo = layerOpt.getSelectedFeature(qMapControl->GetMap());
|
|
|
else if(mapType==MapType::Map3D)
|
|
|
featureInfo = layerOpt.getSelectedFeature3D(pSceneControl);
|
|
|
//构造SQL查询条件
|
|
|
QStringList filterlist;
|
|
|
QList<int> types = featureInfo.keys();
|
|
|
for(int i = 0; i < types.size(); i++)
|
|
|
{
|
|
|
filterlist<< "(RouteNumber in (" + featureInfo[types[i]].join(",") + ") and " + "RouteType = " + QString::number(types[i]) + ")";
|
|
|
}
|
|
|
QString filter = filterlist.join(" or ");
|
|
|
|
|
|
// 导出
|
|
|
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
if(!ds->IsOpen()) ds->Open();
|
|
|
GeoFileParser GeoFP;
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
if(mapType==MapType::Map2D)
|
|
|
GeoFP.exportKMLData(ds,Translator::UGStr2QStr(routeGVar.workspaceDataName.LineDatasetName),savePath,filter);
|
|
|
else if(mapType==MapType::Map3D)
|
|
|
GeoFP.exportKMLData(ds,Translator::UGStr2QStr(routeGVar.workspaceDataName.Line3DDatasetName),savePath,filter);
|
|
|
|
|
|
ds = NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
//加载三维模型数据
|
|
|
void MainWindow::loadModelData()
|
|
|
{
|
|
|
//获取数据源
|
|
|
UGDataSource* pDataSource = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
if(pDataSource==NULL) return;
|
|
|
if(!pDataSource->IsOpen()) pDataSource->Open();
|
|
|
QString path = "D:/supermap-iobjectscpp/MyProject/MapDisplay/ModelData/plane.3ds";
|
|
|
QString path1 = "D:/supermap-iobjectscpp/MyProject/MapDisplay/ModelData/xiaofangche.s3m";
|
|
|
QString kmlpath = "E:/a.kml";
|
|
|
// QString path = "D:/supermap-iobjectscpp/MyProject/MapDisplay/ModelData/xiaofangche.gltf";
|
|
|
// GeoFileParser geoFileParser;
|
|
|
// if(pDataSource->GetDataset(_U("Plane"))==NULL)
|
|
|
// {
|
|
|
// bool ss = geoFileParser.importModelData(pDataSource,_U("Plane"),path);
|
|
|
// if(!ss) return;
|
|
|
// }
|
|
|
/*
|
|
|
UGFlyRoute* flyRoute = new UGFlyRoute();
|
|
|
UGFlyRouteStop* stop1 = new UGFlyRouteStop();
|
|
|
UGPoint3D point3D(119.723971,32.220508,30);
|
|
|
stop1->FromPoint3D(point3D,0);
|
|
|
UGCameraState cs1;
|
|
|
cs1.dTilt = UGMathEngine::Degree2Radian(70);
|
|
|
// stop1->SetCamera(&cs1);
|
|
|
|
|
|
UGFlyRouteStop* stop2 = new UGFlyRouteStop();
|
|
|
UGPoint3D point3D2(119.725471,32.216129,30);
|
|
|
stop2->FromPoint3D(point3D2,1);
|
|
|
// stop2->SetCamera(&cs1);
|
|
|
|
|
|
UGFlyRouteStop* stop3 = new UGFlyRouteStop();
|
|
|
UGPoint3D point3D3(119.723971,32.210508,30);
|
|
|
stop3->FromPoint3D(point3D3,2);
|
|
|
// stop3->SetCamera(&cs1);
|
|
|
|
|
|
flyRoute->m_pRouteStops->Insert(0,stop1);
|
|
|
flyRoute->m_pRouteStops->Insert(1,stop2);
|
|
|
flyRoute->m_pRouteStops->Insert(2,stop3);
|
|
|
qDebug()<<"*****************StopCounts:"<<flyRoute->m_pRouteStops->GetCount();
|
|
|
|
|
|
UGFlyManager* flymag = new UGFlyManager();
|
|
|
UGFlyRoutes* flyRoutes = flymag->GetRoutes();
|
|
|
flyRoute->SetStopsVisible(true);
|
|
|
flyRoute->SetLinesVisible(true);
|
|
|
flyRoute->SetSpeed(30);
|
|
|
flyRoutes->Add(flyRoute);
|
|
|
|
|
|
// pSceneControl->GetScene3D()->SetFlyManager(flymag);
|
|
|
flymag->SetScene(pSceneControl->GetScene3D());
|
|
|
// flymag->SetPlayRate(60);
|
|
|
// flymag->Update();
|
|
|
flymag->Play();
|
|
|
|
|
|
UGFlyRouteStop* stop4 = new UGFlyRouteStop();
|
|
|
UGPoint3D point3D4(119.723771,32.210208,30);
|
|
|
stop4->FromPoint3D(point3D4,3);
|
|
|
flymag->GetRoutes()->GetCurrentRoute()->m_pRouteStops->Add(stop4);
|
|
|
flymag->Update();
|
|
|
*/
|
|
|
|
|
|
// pSceneControl->GetCameraWorld()->SetEyeTilt((60/180)*PI);
|
|
|
// pSceneControl->GetCameraWorld()->Pitch(60/180*PI);
|
|
|
// UGCameraState cs;
|
|
|
// pSceneControl->GetCameraWorld()->GetLookAt(cs);
|
|
|
// double lat = cs.dLat;
|
|
|
// double lon = cs.dLon;
|
|
|
// double altitude = cs.dAltitude;
|
|
|
// double heading = cs.dHeading;
|
|
|
// double roll = cs.dRoll;
|
|
|
// double tilt = cs.dTilt;
|
|
|
|
|
|
// pSceneControl->GetCameraWorld()->Pan(-0.0001,0);
|
|
|
// UGCameraGlobal* cameraGb = (UGCameraGlobal*)pSceneControl->GetCameraWorld();
|
|
|
// UGCameraWorld* cameraGb = pSceneControl->GetCameraWorld();
|
|
|
// cameraGb->m_StateCamera.dTilt = 60/180*PI;
|
|
|
// cameraGb->Pitch(60/180*PI);
|
|
|
// cameraGb->PitchCamera(60/180*PI);
|
|
|
// cameraGb->UpdateViewRange();
|
|
|
// cameraGb->UpdateViewRange();
|
|
|
UGScene3D* scene = pSceneControl->GetScene3D();
|
|
|
|
|
|
// scene->SetTrackingLayerEditable(true);
|
|
|
// scene->SetStereoEnable(true);
|
|
|
|
|
|
// UGString datasetName = _U("Line3DTmp");
|
|
|
// UGLayer3Ds* layers = pSceneControl->GetUGLayer3Ds();
|
|
|
// UGLayer3D* lineLayer3D = pSceneControl->AddLayerFromDataset(pDataSource->GetAlias(),datasetName);
|
|
|
// qDebug()<<"*******************LayerCount1:"<<layers->GetInnerCount();
|
|
|
// lineLayer3D->SetSelectable(true);
|
|
|
// layers->SetEditableLayer(lineLayer3D,true); //设置图层可编辑
|
|
|
// UGStyle3D style3D;
|
|
|
//// style3D.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// style3D.SetLineWidth(1);
|
|
|
// style3D.SetLineColor(UGRGB(255,0,0));
|
|
|
// lineLayer3D->SetStyle3D(style3D);
|
|
|
//// lineLayer3D->SetEditable(true);
|
|
|
//// qDebug()<<"*******************LayerEditable:"<<lineLayer3D->GetEditable();
|
|
|
// pSceneControl->GetSceneEditWnd()->SetUserAction(UGSceneUserAction::suaEdit,UGEditType3D::ET3D_PolyLine); //
|
|
|
//// pSceneControl->GetSceneEditWnd()->SetUserAction(UGEditType3D::ET3D_PolyLine,UGSceneUserAction::suaCreatePolyline);
|
|
|
|
|
|
|
|
|
// UGLayer3D* planeLayer = pSceneControl->GetUGLayer3Ds()->AddLayer(_U("Plane@Route")); //
|
|
|
// pSceneControl->ViewToLayer(planeLayer);
|
|
|
// UGCameraWorld* cameraGb = pSceneControl->GetCameraWorld();
|
|
|
// std::set< UGint > setObjsVisible;
|
|
|
// setObjsVisible.insert(0);
|
|
|
// planeLayer->SetObjsVisible(setObjsVisible,false);
|
|
|
// qDebug()<<"**************layersCount0:"<<layers->GetInnerCount();
|
|
|
// layers->ReleaseLayerState(planeLayer);
|
|
|
// layers->TreeRemoveAt(0);
|
|
|
// qDebug()<<"**************layersCount1:"<<layers->GetInnerCount();
|
|
|
// qDebug()<<"**************:"<<planeLayer->GetAttachData();
|
|
|
|
|
|
// UGStyle3D tmpSty = planeLayer->GetStyle3D();
|
|
|
// tmpSty.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// planeLayer->SetVisible(false);
|
|
|
// layers->SetEditableLayer(planeLayer,true);
|
|
|
// planeLayer->SetSelectable(true);
|
|
|
// UGRenderObjectList* rof = planeLayer->GetRenderObjectList();
|
|
|
// UGRenderFeature* rf = planeLayer->GetRenderFeature(0);
|
|
|
// UGArray< UGRenderFeature* >* rfs = planeLayer->GetEditFeatures();
|
|
|
// UGSelection3D* st = planeLayer->GetSelection3D();
|
|
|
// qDebug()<<"**************SelectionSize:"<<st->GetSize();
|
|
|
// planeLayer->AddSelectedID(0);
|
|
|
// qDebug()<<"**************SelectionSize1:"<<st->GetSize();
|
|
|
// UGArray<UGRenderFeature*>* fts = planeLayer->GetarrSelection();
|
|
|
|
|
|
// int i = rfs->GetSize();
|
|
|
// qDebug()<<"**************ss";
|
|
|
|
|
|
// UGRenderFeature* rf = planeLayer->GetRenderFeature(0);
|
|
|
// rf->GetInestGeometry3D()->SetPosition(UGPoint3D(119.73,32.25,25));
|
|
|
|
|
|
// qDebug()<<"**************ss:"<<ss;
|
|
|
// pDataSource = NULL;
|
|
|
|
|
|
//模型移动测试
|
|
|
// 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:"<<res->GetRecordCount();
|
|
|
// UGGeometry* geometry = NULL;
|
|
|
// res->GetGeometry(geometry); //geometryType: GeoModelPro
|
|
|
// qDebug()<<"*************geometryType:"<<geometry->GetType();
|
|
|
// UGRect2D rec = geometry->GetBounds();
|
|
|
// qDebug()<<"*************leftX:"<<rec.BottomLeft().x;
|
|
|
// qDebug()<<"*************rightX:"<<rec.BottomRight().x;
|
|
|
// qDebug()<<"*************BottomY:"<<rec.BottomLeft().y;
|
|
|
// qDebug()<<"*************TopY:"<<rec.TopLeft().y;
|
|
|
// qDebug()<<"*************Height:"<<rec.Height();
|
|
|
// UGGeometry3D* g3 = (UGGeometry3D*)geometry;
|
|
|
// pSceneControl->GetScene3D()->SetTrackingGeometry(g3);
|
|
|
// pSceneControl->GetScene3D()->SetTrackOffset(UGVector3d(0,0,100));
|
|
|
// g3->SetPosition(UGPoint3D(119.718414,32.234539,25));
|
|
|
// g3->Set3DPoint(UGPoint3D(119.718414,32.234539,25));
|
|
|
// UGPoint3D p3 = g3->GetPosition();
|
|
|
// qDebug()<<"*************x0:"<<p3.x;
|
|
|
// qDebug()<<"*************y0:"<<p3.y;
|
|
|
// qDebug()<<"*************z0:"<<p3.z;
|
|
|
// scene->GetCamera()
|
|
|
// UGCameraGlobal* cameraGb = (UGCameraGlobal*)pSceneControl->GetCameraWorld();
|
|
|
// pSceneControl->GetCameraWorld()->InteriaTracking();
|
|
|
// pSceneControl->GetCameraWorld()->SetTrackingOffset(UGVector3d(0,0,200));
|
|
|
// UGCameraState cs;
|
|
|
// cs.dLat = UGMathEngine::Degree2Radian(g3->GetPosition().y);
|
|
|
// cs.dLon = UGMathEngine::Degree2Radian(g3->GetPosition().x);
|
|
|
// cs.dAltitude = 100;
|
|
|
// cs.dTilt = UGMathEngine::Degree2Radian(80);
|
|
|
// cs.dHeading = 0;
|
|
|
// cs.nAltitudeMode = AltitudeMode::Absolute;
|
|
|
// cameraGb->SetCamera(cs);
|
|
|
|
|
|
// UGCameraWorld* cameraGb = pSceneControl->GetCameraWorld();
|
|
|
// cameraGb->Pitch(UGMathEngine::Degree2Radian(80));
|
|
|
// cameraGb->PitchCamera(UGMathEngine::Degree2Radian(80));
|
|
|
// pSceneControl->GetScene3D()->SetTrackingGeometry(g3);
|
|
|
// pSceneControl->GetScene3D()->SetTrackOffset(UGVector3d(0,0,100));
|
|
|
// cameraGb->UpdateTrackingCamera(g3);
|
|
|
// cameraGb->SetMinDistanceToModel(100);
|
|
|
// cameraGb->SetTrackingOffset(UGVector3d(0,0,100));
|
|
|
// cameraGb->SetEyeTilt(UGMathEngine::Degree2Radian(88));
|
|
|
// pSceneControl->GetCameraWorld()->FlyTo(geometry,100);
|
|
|
|
|
|
// cameraGb->FlyToCamera(cs,100);
|
|
|
// cameraGb->SetEyeTilt(UGMathEngine::Degree2Radian(80));
|
|
|
// cameraGb->SetCamera(cs);
|
|
|
// cameraGb->m_StateCamera.dTilt = UGMathEngine::Degree2Radian(80);
|
|
|
// cameraGb->Refresh();
|
|
|
|
|
|
//// qDebug()<<"********************Type:"<<geometry->GetType();
|
|
|
// res->Edit();
|
|
|
// UGGeoModelPro* model = (UGGeoModelPro*)geometry;
|
|
|
// model->SetPosition(UGPoint3D(119.73,32.234539,25));
|
|
|
// res->SetGeometry(*model);
|
|
|
// res->Update();
|
|
|
// model->SetStyle3D(&tmpSty);
|
|
|
// UGGeoModel* model = (UGGeoModel*)geometry;
|
|
|
|
|
|
// scene->SetTrackingGeometry(model);
|
|
|
// scene->SetTrackOffset(UGVector3d(119.73,32.234539,200));
|
|
|
// plane3D->startFly();
|
|
|
|
|
|
// UGGeoModel* model = new UGGeoModel();
|
|
|
// model->MakeWithGeometry(geometry);
|
|
|
// model->FromGeoModel(geometry);
|
|
|
|
|
|
// model->SetAttachedFilePath(Translator::QStr2UGStr(path1));
|
|
|
// model->SetFilePathName(Translator::QStr2UGStr(path1));
|
|
|
// bool s = model->IsValid();
|
|
|
// model->SetPosition(UGPoint3D(119.718414,32.234539,25));
|
|
|
|
|
|
UGStyle3D style3D;
|
|
|
// style3D.SetMarker3D(true);
|
|
|
// style3D.SetScaleBySymbol(true);
|
|
|
// style3D.SetFixedPixelSize(false);
|
|
|
style3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE);
|
|
|
style3D.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// 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));
|
|
|
//// style3D.SetMarker3D(true);
|
|
|
// style3D.SetMarkerSize(1000);
|
|
|
// style3D.SetMarker3DScaleX(10);
|
|
|
// model->SetStyle3D(&style3D);
|
|
|
// geometry->SetStyle(&style3D);
|
|
|
//// geometry->Set3DPoint(UGPoint3D(119.718567,32.234317,20));
|
|
|
// planeLayer->SetStyle3D(style3D);
|
|
|
|
|
|
|
|
|
UGLayer3Ds* layers = pSceneControl->GetUGLayer3Ds();
|
|
|
// UGLayer3D* planeLayer = pSceneControl->GetUGLayer3Ds()->AddLayer(_U("Plane@Route")); //
|
|
|
// planeLayer->SetStyle3D(style3D);
|
|
|
|
|
|
UGLayer3DManager layer3DMag;
|
|
|
bool ls = layer3DMag.LoadLayer3D(_U("D:/supermap-iobjectscpp/bin/bin_x64/SuLayer3DTree.l3d"));
|
|
|
bool ls1 = layer3DMag.LoadLayer3D(_U("D:/supermap-iobjectscpp/bin/bin_x64/SuLayer3DFile.l3d"));
|
|
|
// UGLayer3D* planeLayer = layer3DMag.CreateLayer3D(UGLayer3DType::l3dDynamicModel);
|
|
|
// UGLayer3DDynamic* dyLayer3D = (UGLayer3DDynamic*)planeLayer;
|
|
|
// UGLayer3DDynamic* p_UGLayer3DDynamic = (UGLayer3DDynamic*)layers->AddLayer(UGC::UGLayer3DType::l3dDynamicModel, _U("AA@Route"), _U("BB"), TRUE);
|
|
|
// dyLayer3D->SetInitialized(true);
|
|
|
// UGLayer3DDynamic* dyLayer3D = new UGLayer3DDynamic();
|
|
|
// UGDynamicObjectlState dyObjState;
|
|
|
// dyObjState.ID = 0;
|
|
|
// dyObjState.Altitude = 25;
|
|
|
// dyObjState.Latitude = 32.234317;
|
|
|
// dyObjState.Longitude = 119.718567;
|
|
|
// p_UGLayer3DDynamic->AddObjectFromFile(_U("D:/plane.s3m"),dyObjState,1);
|
|
|
// p_UGLayer3DDynamic->SetStyle3D(style3D);
|
|
|
// dyLayer3D->SetStyle3D(style3D);
|
|
|
// bool ss = dyLayer3D->SaveKML(_U("E:/b.kml"));
|
|
|
// UGLayer3DModel* modelLayer3D = new UGLayer3DModel();
|
|
|
qDebug()<<"**************layersCount0:"<<layers->GetInnerCount();
|
|
|
// layers->SetEditableLayer(modelLayer3D,true);
|
|
|
|
|
|
// modelLayer3D->SetStyle3D(style3D);
|
|
|
// UGPlottingLayer3D* plotLayer = new UGPlottingLayer3D();
|
|
|
// UGLayer3D* kmlLayer = pSceneControl->AddLayerFromFile("E:/a.kml");
|
|
|
// kmlLayer->SetSelectable(false);
|
|
|
// kmlLayer->SetEditable(true);
|
|
|
// UGLayer3DModel* modelLayer3D = (UGLayer3DModel*)kmlLayer;
|
|
|
|
|
|
// UGGeoPlacemark* GP = new UGGeoPlacemark();
|
|
|
UGGeoPoint3D* p = new UGGeoPoint3D();
|
|
|
p->SetX(119.718567);
|
|
|
p->SetY(32.234317);
|
|
|
p->SetZ(20);
|
|
|
// GP->MakeWithGeometry(p);
|
|
|
// GP->SetGeometry(p);
|
|
|
// GP->SetPosition(UGPoint3D(119.718567,32.234317,20));
|
|
|
// GP->SetName(_U("Test"));
|
|
|
// UGStyle3D s;
|
|
|
// s.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// s.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE);
|
|
|
// s.SetPicturePath(_U("D:/Icon.png"));
|
|
|
// s.SetIconScale(5);
|
|
|
// s.SetPointSize(24);
|
|
|
// UGTextStyle t;
|
|
|
// t.SetSize(24);
|
|
|
// GP->SetNameTextStyle(&t);
|
|
|
// GP->SetStyle3D(&s);
|
|
|
// p->SetStyle3D(&s);
|
|
|
// UGGeoText3D* text3D = new UGGeoText3D();
|
|
|
// text3D->Make(_U("Text"),UGPoint3D(119.718567,32.234317,20));
|
|
|
// text3D->AddSub(_U("Text2"),UGPoint3D(119.719567,32.235317,20));
|
|
|
// RouteGlobalVariant routeGVar;
|
|
|
// text3D->SetTextStyle(routeGVar.getLabelTextStyle());
|
|
|
// UGGeoBillboard* billboard = new UGGeoBillboard();
|
|
|
// billboard->MakeWithGeometry(p);
|
|
|
// UGStyle3D bbsty;
|
|
|
// bbsty.SetPicturePath(_U("D:/Icon.png"));
|
|
|
// bbsty.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// billboard->SetWidth(32);
|
|
|
// billboard->SetHeight(32);
|
|
|
// billboard->SetStyle3D(&bbsty);
|
|
|
// billboard->SetTag(0,_U("1-1"));
|
|
|
// billboard->SetPosition(UGPoint3D(119.718567,32.234317,20));
|
|
|
// pSceneControl->GetTrackingLayer3D()->Add(text3D,_U("a"));
|
|
|
// pSceneControl->GetTrackingLayer3D()->Remove(_U("a"));
|
|
|
// int i = text3D->IsValid();
|
|
|
|
|
|
// modelLayer3D->AddModel(model);
|
|
|
// int layertype = UGLayer3DType::l3dTree;
|
|
|
// kmlLayer->SetLayerType();
|
|
|
// layers->SetEditableLayer(pl,true);
|
|
|
// layers->TreeAddLayer(0,dyLayer3D);
|
|
|
// layers->TreeAddLayer(0,modelLayer3D);
|
|
|
qDebug()<<"**************layersCount1:"<<layers->GetInnerCount();
|
|
|
// layers->SetEditableLayer(modelLayer3D,true);
|
|
|
// modelLayer3D->AddModel(model);
|
|
|
|
|
|
|
|
|
|
|
|
// UGFeature* ft = NULL;
|
|
|
// res->GetFeature(ft);
|
|
|
// res->MoveFirst();
|
|
|
// UGFeature* ft = res->GetFeature();
|
|
|
|
|
|
// UGFeature* ft = new UGFeature();
|
|
|
// ft->SetGeometry(GP);
|
|
|
|
|
|
// UGArray< UGFeature > arrFeatures;
|
|
|
// UGArray< UGFeature* > arrFeatures;
|
|
|
// int i = arrFeatures.Add(*ft);
|
|
|
// planeLayer->SetEditable(true);
|
|
|
// qDebug()<<"***********:"<<arrFeatures.GetSize();
|
|
|
// planeLayer->SetDataSources(pDataSource);
|
|
|
// UGRenderObjectList* rol = kmlLayer->GetRenderObjectList();
|
|
|
|
|
|
// bool b = kmlLayer->AddNewFeatures(arrFeatures);
|
|
|
// bool b = kmlLayer->ModifyFeatures(arrFeatures);
|
|
|
// pl->SetStyle3D(style3D);
|
|
|
// UGLayer3D* pl = layers->AddLayer(planeLayer,_U("Plane"));
|
|
|
// pl->SetStyle3D(style3D);
|
|
|
// qDebug()<<"**************layersCount1:"<<layers->GetInnerCount();
|
|
|
|
|
|
// UGRenderManager rm;
|
|
|
// UGRenderFeature* rf = rm.CreateRenderFeature(UGGeometry::Type::GeoModel);
|
|
|
|
|
|
// UGRenderFeature* rf = rm.CreateRenderFeature(geometry);
|
|
|
// rf->SetGeometry(model);
|
|
|
// rf->SetName(_U("model"));
|
|
|
// rf->SetStyle3D(&style3D);
|
|
|
// UGRenderModelPro* rmp = (UGRenderModels*)rf;
|
|
|
// rol->Add(rf);
|
|
|
// rol->Update(scene->GetRenderParam());
|
|
|
// int rosize = rol->GetSize();
|
|
|
// kmlLayer->Update(scene->GetRenderParam());
|
|
|
// kmlLayer->Render(scene->GetRenderParam());
|
|
|
// scene->UpdateData();
|
|
|
// kmlLayer->SaveKML(_U("E:/b.kml"));
|
|
|
// qDebug()<<"**************RenderObjCount:"<<rol->GetSize();
|
|
|
// pl->Initialize(scene->GetRenderParam());
|
|
|
|
|
|
// pSceneControl->GetScene3D()->UpdateData();
|
|
|
// planeLayer->SetStyle3D(style3D);
|
|
|
// UGLayer3D* pl = layers->GetLayerInnerAt(0);
|
|
|
// qDebug()<<"**************layerName0:"<<Translator::UGStr2QStr(layers->GetLayerInnerAt(0)->GetName());
|
|
|
|
|
|
// UGLayer3D* pl = layers->GetLayerInner(_U("Plane"));
|
|
|
// qDebug()<<"**************layersCount1:";
|
|
|
|
|
|
// UGDatasetVector* dv = (UGDatasetVector*)pDataSource->GetDataset(_U("Plane")).get();
|
|
|
// if(!dv->IsOpen()) dv->Open();
|
|
|
// UGQueryDef query;
|
|
|
// UGRecordsetPtr res = dv->Query(query);
|
|
|
// qDebug()<<"*****************RecordCount:"<<res->GetRecordCount();
|
|
|
// res->MoveLast();
|
|
|
// UGGeometry* geometry = NULL;
|
|
|
// res->GetGeometry(geometry);
|
|
|
// UGGeoModelPro* model = (UGGeoModelPro*)geometry;
|
|
|
// model->SetPosition(UGPoint3D(119.718567,32.234317,20));
|
|
|
// model->SetStyle3D(&style3D);
|
|
|
|
|
|
// kmlLayer->Add(model,_U("model"));
|
|
|
|
|
|
// UGGeoLine3D* l = (UGGeoLine3D*)geometry;
|
|
|
// l->SetStyle3D(&style3D);
|
|
|
// UGStyle3D sty3D;
|
|
|
// sty3D.SetLineWidth(2);
|
|
|
// sty3D.SetLineColor3D(UGRGB(0,0,255));
|
|
|
// sty3D.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// l->SetStyle3D(&sty3D);
|
|
|
|
|
|
// UGMarkerSymbolLib* ms = m_pWorkspace->GetResources()->GetMarkerSymbolLib();
|
|
|
// int id = ms->GetIDAt(ms->GetSymbolCount()-1);
|
|
|
|
|
|
// UGGeoPoint3D* p = new UGGeoPoint3D();
|
|
|
// p->Make(UGPoint3D(119.718567,32.234317,20));
|
|
|
// UGGeoPlacemark* pl = new UGGeoPlacemark();
|
|
|
// pl->SetName(_U("Test"));
|
|
|
// 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);
|
|
|
// UGColorValue3D(1,0,0);
|
|
|
// sty3D.SetPointColor(UGColorValue3D(1,0,0));
|
|
|
// sty3D.SetMarkerSize(30);
|
|
|
// sty3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE);
|
|
|
// sty3D.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// sty3D.SetBottomAltitude(20);
|
|
|
// p->SetStyle3D(&sty3D);
|
|
|
// pl->SetStyle3D(&sty3D);
|
|
|
// plotLayer->Add(p,_U("point"));
|
|
|
// plotLayer->SetRefresh(true);
|
|
|
// p->SetStyle(&sty3D);
|
|
|
|
|
|
// UGStyle3D sty;
|
|
|
// sty.SetMarkerStyle(253268);
|
|
|
// sty.SetMarkerSize(30);
|
|
|
// sty.SetFixedPixelSize(true);
|
|
|
// sty.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
|
|
|
// UGLayer3D* planeLayer = pSceneControl->GetUGLayer3Ds()->AddLayer(_U("Test@Route"));
|
|
|
// planeLayer->SetStyle3D(sty);
|
|
|
// layers->RefreshRasterLayer(planeLayer);
|
|
|
|
|
|
// scene->SetTrackingGeometry();
|
|
|
|
|
|
// UGGeoPlacemark* pm = new UGGeoPlacemark();
|
|
|
// pm->SetGeometry(geometry);
|
|
|
// pm->SetStyle3D(&style3D);
|
|
|
|
|
|
// UGGeoPicture* pt = new UGGeoPicture;
|
|
|
// geometry->ConvertToPicture(*pt,1);
|
|
|
|
|
|
// UGStyle3D styE;
|
|
|
// styE.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
//// styE.SetMarker3D(true);
|
|
|
// geometry->Set3DPoint(UGPoint3D(119.718567,32.234317,20));
|
|
|
// geometry->SetStyle(&styE);
|
|
|
|
|
|
// UGLayer3Ds* layers = pSceneControl->GetUGLayer3Ds();
|
|
|
// layers->GetLayerInnerAt(0)->SetVisible(false); //_U("大路机场18@Route")
|
|
|
// UGGeoPicture* pt = (UGGeoPicture*) geometry;
|
|
|
// UGGeoLine3D* l = (UGGeoLine3D*) geometry;
|
|
|
// l->SetStyle3D(&style3D);
|
|
|
UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
|
|
|
// trackingLayer3D->SetAlwaysRender(true);
|
|
|
// trackingLayer3D->SetWorkspace(m_pWorkspace);
|
|
|
// trackingLayer3D->SetUseGeoStyle(true);
|
|
|
// qDebug()<<"**************TrackingCount0:"<<trackingLayer3D->GetCount();
|
|
|
// trackingLayer3D->Add(pl,_U("picture"));
|
|
|
// UGStyle3D* sty1 = trackingLayer3D->GetAt(0)->GetStyle3D();
|
|
|
// sty1->SetLineColor(UGRGB(0,0,255));
|
|
|
// trackingLayer3D->GetAt(0)->SetStyle3D(&sty3D);
|
|
|
// pSceneControl->GetSceneEditWnd()->SetUserAction(UGSceneUserAction::suaEdit,UGEditType3D::ET3D_PolyLine); //
|
|
|
// trackingLayer3D->SetEditable(true);
|
|
|
// trackingLayer3D->SetRefresh(false);
|
|
|
// layers->RefreshRasterLayer(trackingLayer3D);
|
|
|
|
|
|
// pSceneControl->GetScene3D()->GetCamera(_U("Camera"))->FlyTo(model);
|
|
|
// qDebug()<<"**************TrackingCount1:"<<trackingLayer3D->GetCount();
|
|
|
//// trackingLayer3D->GetRenderObjectList()
|
|
|
//// qDebug()<<"**************RenderObjectSize0:"<<trackingLayer3D->GetRenderObjectList()->GetSize();
|
|
|
// qDebug()<<"**************TrackingCount0:"<<trackingLayer3D->GetCount();
|
|
|
|
|
|
// UGRenderObject* ro = trackingLayer3D->Add(model,_U("point"));
|
|
|
// ro->SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
// ro->RenderToScreen(pSceneControl->GetScene3D()->GetRenderParam());
|
|
|
// ro->Render(pSceneControl->GetScene3D()->GetRenderParam());
|
|
|
// UGRenderManager rm;
|
|
|
// UGRenderFeature* rf = rm.CreateRenderFeature(UGGeometry::GeoModel);
|
|
|
// rf->SetGeometry(model);
|
|
|
// UGArray< UGFeature > arrRenderFeatures;
|
|
|
// arrRenderFeatures.Add(*rf);
|
|
|
// bool b = trackingLayer3D->AddNewFeatures(arrRenderFeatures);
|
|
|
// trackingLayer3D->Add()
|
|
|
|
|
|
// qDebug()<<"**************TrackingCount1:"<<trackingLayer3D->GetCount();
|
|
|
|
|
|
|
|
|
// trackingLayer3D->Initialize(pSceneControl->GetScene3D()->GetRenderParam());
|
|
|
// trackingLayer3D->Render(pSceneControl->GetScene3D()->GetRenderParam());
|
|
|
// trackingLayer3D->Update(pSceneControl->GetScene3D()->GetRenderParam());
|
|
|
// UGRenderObjectList* rol = trackingLayer3D->GetRenderObjectList();
|
|
|
// qDebug()<<"**************RenderObjectSize1:"<<rol->GetSize();
|
|
|
// UGRenderObject* ro = trackingLayer3D->GetAt(0);
|
|
|
// qDebug()<<"**************RenderObjectVisible:"<<ro->IsVisible();
|
|
|
// pSceneControl->Refresh();
|
|
|
// scene->UpdateData();
|
|
|
// scene->Refresh();
|
|
|
|
|
|
// pSceneControl->GetScene3D()->GetCamera(_U("Camera"))->FlyTo(model);
|
|
|
// pSceneControl->GetScene3D()->Refresh();
|
|
|
// scene->ToXML(0,_U("MapWorkspace"));
|
|
|
}
|
|
|
|
|
|
//显示装订航线对话框
|
|
|
void MainWindow::showBindRouteDialog()
|
|
|
{
|
|
|
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
UGDatasetVector* bindRoute_dv = NULL;
|
|
|
//获取线数据集
|
|
|
if(mapType==MapType::Map2D)
|
|
|
bindRoute_dv = (UGDatasetVector*)ds->GetDataset(lineSetAlias).get();
|
|
|
else
|
|
|
bindRoute_dv = (UGDatasetVector*)ds->GetDataset(line3DSetAlias).get();
|
|
|
bindRoute_dv->Open();
|
|
|
|
|
|
//显示装订对话框
|
|
|
bindRouteDialog bindRouteDlg;
|
|
|
bindRouteDlg.setDataset(bindRoute_dv);
|
|
|
bindRouteDlg.exec();
|
|
|
|
|
|
bindRoute_dv = NULL;
|
|
|
ds = NULL;
|
|
|
}
|
|
|
|
|
|
//显示输入坐标点对话框
|
|
|
void MainWindow::showComputeOffsetPosition()
|
|
|
{
|
|
|
// qMapControl->ifComputePointMode = true; //开始自动计算点模式
|
|
|
|
|
|
QPoint LPressPoint = qMapControl->getLMousePressPoint();
|
|
|
// qDebug()<<"*******************x:"<<LPressPoint.x();
|
|
|
// qDebug()<<"*******************y:"<<LPressPoint.y();
|
|
|
|
|
|
inputPosDlg->setGeometry(LPressPoint.x()+5,LPressPoint.y()+5,inputPosDlg->size().width(),inputPosDlg->size().height());
|
|
|
// inputPosDlg.exec();
|
|
|
inputPosDlg->show();
|
|
|
}
|
|
|
|
|
|
//显示在线地图对话框
|
|
|
void MainWindow::showOnlineMapDialog()
|
|
|
{
|
|
|
LoadOnlineMapDialog onlineMapDlg;
|
|
|
if(mapType==MapType::Map2D)
|
|
|
onlineMapDlg.setWorkspace(m_pWorkspace,qMapControl->GetUGMapWnd());
|
|
|
else
|
|
|
{//3DMap
|
|
|
onlineMapDlg.setScene(pSceneControl);
|
|
|
}
|
|
|
onlineMapDlg.exec();
|
|
|
}
|
|
|
|
|
|
// 显示属性右键菜单
|
|
|
void MainWindow::showAttributeMenu()
|
|
|
{
|
|
|
rMenuType = RBtnMenuType::AttributeMenu;
|
|
|
connect(actionExportFile,&QAction::triggered,this,&MainWindow::exportKMLFile,Qt::UniqueConnection);
|
|
|
attributeRBtnMenu->exec(QCursor::pos());
|
|
|
rMenuType = RBtnMenuType::DefaultMenu;
|
|
|
}
|
|
|
|
|
|
//二三维地图切换
|
|
|
void MainWindow::transformMap()
|
|
|
{
|
|
|
if(pSceneView == NULL)
|
|
|
{
|
|
|
//三维场景容器初始化
|
|
|
initSceneControl(stackedWidget);
|
|
|
stackedWidget->addWidget(pSceneView);
|
|
|
pSceneView->startRender(30);
|
|
|
// pSceneView->setCursor(Qt::OpenHandCursor);
|
|
|
// UGDatasetVector* dv = (UGDatasetVector*)m_pWorkspace->GetDataSource(0)->GetDataset(_U("Plane")).get();
|
|
|
// ShowPlane3D* showPlane3D = new ShowPlane3D(pSceneControl,dv);
|
|
|
// showPlane3D->setPlanesCount(3);
|
|
|
// showPlane3D->setPlanesCount(1);
|
|
|
}
|
|
|
|
|
|
switch (mapType) {
|
|
|
case MapType::Map2D://切换为3D地图
|
|
|
{
|
|
|
stackedWidget->setCurrentIndex(1);
|
|
|
actionTransformMap->setIcon(QIcon(":/Resources/view_2d.png"));
|
|
|
actionTransformMap->setIconText("2D地图");
|
|
|
mapType = MapType::Map3D;
|
|
|
}
|
|
|
break;
|
|
|
case MapType::Map3D: //切换为2D地图
|
|
|
{
|
|
|
stackedWidget->setCurrentIndex(0);
|
|
|
actionTransformMap->setIcon(QIcon(":/Resources/view_3d.png"));
|
|
|
actionTransformMap->setIconText("3D地图");
|
|
|
mapType = MapType::Map2D;
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//导入场景数据
|
|
|
void MainWindow::importSceneData(QStringList imagePathList, QStringList terrainPathList)
|
|
|
{
|
|
|
qDebug() << "当前线程对象的地址: " << QThread::currentThread();
|
|
|
int imageDataCount = imagePathList.size();
|
|
|
int terrainDataCount = terrainPathList.size();
|
|
|
//显示进度条
|
|
|
progressDlg = new QProgressDialog();
|
|
|
progressDlg->setLabelText("影像文件导入中(0/" + QString::number(imageDataCount) + ")..."
|
|
|
+ "\n"
|
|
|
+ "地形文件导入中(0/" + QString::number(terrainDataCount) + ")...");
|
|
|
progressDlg->setWindowFlags(Qt::CustomizeWindowHint|Qt::WindowMinimizeButtonHint);
|
|
|
progressDlg->setWindowTitle("提示");
|
|
|
progressDlg->setCancelButton(nullptr);
|
|
|
QProgressBar* bar = new QProgressBar(progressDlg);
|
|
|
bar->setRange(0, 0);
|
|
|
bar->setValue(0);
|
|
|
progressDlg->setBar(bar);
|
|
|
progressDlg->setMinimumWidth(600);
|
|
|
progressDlg->setMinimumDuration(0);
|
|
|
progressDlg->setWindowModality(Qt::WindowModal);
|
|
|
progressDlg->setValue(0);
|
|
|
progressDlg->setAttribute(Qt::WA_DeleteOnClose);//关闭窗口时自动释放内存
|
|
|
progressDlg->showNormal();
|
|
|
|
|
|
/*******************************多线程导入数据(线程池方式)*******************************/
|
|
|
/*
|
|
|
// 线程池初始化,设置最大线程池数
|
|
|
QThreadPool::globalInstance()->setMaxThreadCount(5);
|
|
|
if(pSceneControl == NULL) return;
|
|
|
UGDataSource* pDataSource = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
if(pDataSource->IsOpen()) pDataSource->Open();
|
|
|
LoadTiffSceneData* loadImageTask = NULL;
|
|
|
LoadTiffSceneData* loadTerrianTask = NULL;
|
|
|
if(!imagePathList.isEmpty())
|
|
|
{
|
|
|
for(int i = 0;i<imagePathList.size();i++)
|
|
|
{
|
|
|
// progressDlg->setLabelText("影像文件(" + QString::number(i+1) + "/" + QString::number(imagePathList.size()) + ")导入中...");
|
|
|
QFileInfo fileInfo(imagePathList.at(i));
|
|
|
imageDataList.append(fileInfo.baseName());
|
|
|
UGString imageName = Translator::QStr2UGStr(fileInfo.baseName());
|
|
|
loadImageTask = new LoadTiffSceneData(pSceneControl,pDataSource,imageName,imagePathList.at(i),UGImportParams::ModeIMG);
|
|
|
connect(loadImageTask,&LoadTiffSceneData::sendTaskName,this,&MainWindow::closedProgressDialog);
|
|
|
QThreadPool::globalInstance()->start(loadImageTask);
|
|
|
loadImageTask = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(!terrainPathList.isEmpty())
|
|
|
{
|
|
|
for(int j = 0;j<terrainPathList.size();j++)
|
|
|
{
|
|
|
// progressDlg->setLabelText("地形文件(" + QString::number(j+1) + "/" + QString::number(terrianPathList.size()) + ")导入中...");
|
|
|
QFileInfo fileInfo(terrainPathList.at(j));
|
|
|
terrainDataList.append(fileInfo.baseName());
|
|
|
UGString terrianName = Translator::QStr2UGStr(fileInfo.baseName());
|
|
|
loadTerrianTask = new LoadTiffSceneData(pSceneControl,pDataSource,terrianName,terrainPathList.at(j),UGImportParams::ModeGrid);
|
|
|
connect(loadTerrianTask,&LoadTiffSceneData::sendTaskName,this,&MainWindow::closedProgressDialog);
|
|
|
QThreadPool::globalInstance()->start(loadTerrianTask);
|
|
|
loadTerrianTask = NULL;
|
|
|
}
|
|
|
}
|
|
|
*/
|
|
|
|
|
|
/*******************************多线程导入数据*******************************/
|
|
|
if(pSceneControl == NULL) return;
|
|
|
UGDataSource* pDataSource = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
if(pDataSource->IsOpen()) pDataSource->Open();
|
|
|
// pSceneView->stopRender();
|
|
|
// 创建线程对象
|
|
|
QThread* loadSceneDataThread = new QThread();
|
|
|
// 创建工作的类对象
|
|
|
LoadSceneDataThread* loadSceneDataTask = new LoadSceneDataThread;
|
|
|
|
|
|
loadSceneDataTask->moveToThread(loadSceneDataThread);
|
|
|
loadSceneDataThread->start();
|
|
|
|
|
|
connect(this,&MainWindow::sendSceneDataList,loadSceneDataTask,&LoadSceneDataThread::receiveFileList);
|
|
|
// connect(loadSceneDataTask,&LoadSceneDataThread::sendTaskName,this,&MainWindow::closedProgressDialog);
|
|
|
connect(loadSceneDataTask,&LoadSceneDataThread::sendTaskFinishedCount,this,[=](int imageFinishedCount,int imageTotalCount,int terrianFinishedCount,int terrianTotalCount){
|
|
|
progressDlg->setLabelText("影像文件导入中(" + QString::number(imageFinishedCount) + "/" + QString::number(imageTotalCount) + ")..."
|
|
|
+ "\n"
|
|
|
+ "地形文件导入中(" + QString::number(terrianFinishedCount) + "/" + QString::number(terrianTotalCount) + ")...");
|
|
|
qDebug()<<"*********************ProgressDlgSetLabelTextSuccessed";
|
|
|
if((imageFinishedCount == imageTotalCount) && (terrianFinishedCount == terrianTotalCount))
|
|
|
{
|
|
|
qDebug()<<"*********************CloseProgressDlg";
|
|
|
progressDlg->close();
|
|
|
// delete progressDlg;
|
|
|
progressDlg = NULL;
|
|
|
qDebug()<<"*********************DeletedProgressDlg";
|
|
|
UGScene3D* pScene = pSceneControl->GetSceneEditWnd()->GetScene3D();
|
|
|
// 显示到数据集范围
|
|
|
if(imageTotalCount>0)
|
|
|
{
|
|
|
//pScene->GetCamera(_U("Camera"))->FlyToBounds(pScene->m_Layers.GetLayerInnerAt(0)->GetBounds(), 1);
|
|
|
pSceneControl->ViewToLayer(pScene->m_Layers.GetLayerInnerAt(0));
|
|
|
|
|
|
// pSceneControl->GetCameraWorld()->PitchCamera(UGMathEngine::DegreesToRadians(80));
|
|
|
// UGCameraGlobal* cgb = (UGCameraGlobal*)pScene->GetCamera(_U("Camera"));
|
|
|
UGRect2D bounds = pScene->m_Layers.GetLayerInnerAt(0)->GetBounds();
|
|
|
double lon_la = UGMathEngine::DegreesToRadians(bounds.left);
|
|
|
double lat_la = UGMathEngine::DegreesToRadians(bounds.bottom + bounds.Height()/2);
|
|
|
double lon_cb = UGMathEngine::DegreesToRadians(bounds.left+bounds.Width()/2);
|
|
|
double lat_cb = UGMathEngine::DegreesToRadians(bounds.bottom + bounds.Height()/2);
|
|
|
qDebug()<<"******************Distance:"<<UGMathEngine::SphericalDistance(lon_la,lat_la,lon_cb,lat_cb);
|
|
|
qDebug()<<"******************DistanceCos:"<<UGMathEngine::SphericalDistanceCos(lon_la,lat_la,lon_cb,lat_cb);
|
|
|
}
|
|
|
|
|
|
// UGCameraLocal* cgb = (UGCameraLocal*)pScene->GetCamera(_U("Camera"));
|
|
|
// qDebug()<<"**********************PI:"<<QString::number((60/180*PI),'f',4);
|
|
|
// UGCameraState cs;
|
|
|
// cs.dLat = UGMathEngine::DegreesToRadians(bounds.bottom+bounds.Height()/2);//UGMathEngine::DegreesToRadians(32.2367);
|
|
|
// cs.dLon = UGMathEngine::DegreesToRadians(bounds.left+bounds.Width()/2);//UGMathEngine::DegreesToRadians(119.717);
|
|
|
// cs.dAltitude = 1000;
|
|
|
// cs.dDistance = 1000;
|
|
|
// cs.dTilt = UGMathEngine::DegreesToRadians(80);
|
|
|
// cgb->FlyToCamera(cs,1000);
|
|
|
// cgb->SetLookAt(cs);
|
|
|
// cgb->SetCamera(cs);
|
|
|
// cgb->SetEyeTilt(1);
|
|
|
// cgb->FlyTilt(60/180*PI);
|
|
|
|
|
|
// cgb->FlyToLookAt();
|
|
|
// cgb->UpdateViewRange();
|
|
|
// pScene->GetCamera(_U("Camera"))->FlyTilt(60/180*PI);
|
|
|
// pSceneControl->GetCameraWorld()->PitchCamera(-90);
|
|
|
// UGCameraGlobal* camera = (UGCameraGlobal*)pScene->GetCamera(_U("Camera"));
|
|
|
// camera->m_StateCamera.dLat = 32.2367/180*PI;
|
|
|
// camera->m_StateCamera.dLon = 119.717/180*PI;
|
|
|
// camera->m_StateCamera.dAltitude = 2000;
|
|
|
// camera->m_StateCamera.dTilt = 60/180*PI;
|
|
|
// camera->m_StateLookAt.dLat = 32.2367/180*PI;
|
|
|
// camera->m_StateLookAt.dLon = 119.717/180*PI;
|
|
|
// camera->m_StateLookAt.dDistance = 2000;
|
|
|
// camera->m_StateLookAt.dTilt = 60/180*PI;
|
|
|
// camera->UpdateViewRange();
|
|
|
// pScene->UpdateData();
|
|
|
// pScene->Refresh();
|
|
|
|
|
|
// QEventLoop eventloop;
|
|
|
// QTimer::singleShot(2000, &eventloop, SLOT(quit()));
|
|
|
// eventloop.exec();
|
|
|
// pScene->GetCamera(_U("Camera"))->SetEyeTilt(45);
|
|
|
// UGCameraState cs = pScene->GetCamera(_U("Camera"))->GetCamera();
|
|
|
// qDebug()<<"*******************Lat:"<<pScene->GetCamera(_U("Camera"))->GetLatitude();
|
|
|
// qDebug()<<"*******************Lon:"<<cs.dLon;
|
|
|
// qDebug()<<"*******************Altitude:"<<pScene->GetCamera(_U("Camera"))->GetAltitude();
|
|
|
// qDebug()<<"*******************Heading:"<<cs.dHeading;
|
|
|
// qDebug()<<"*******************Roll:"<<cs.dRoll;
|
|
|
// qDebug()<<"*******************Tilt:"<<cs.dTilt;
|
|
|
// qDebug()<<"*********************Thread";
|
|
|
//释放线程
|
|
|
loadSceneDataThread->quit();
|
|
|
loadSceneDataThread->wait();
|
|
|
loadSceneDataThread->deleteLater();
|
|
|
qDebug()<<"*********************DeletedThread";
|
|
|
loadSceneDataTask->deleteLater();
|
|
|
qDebug()<<"*********************DeletedTask";
|
|
|
//test代码
|
|
|
loadModelData();
|
|
|
}
|
|
|
// m_mutex.unlock();
|
|
|
});
|
|
|
// loadSceneDataTask->receiveFileList(pSceneControl,pDataSource,imagePathList,terrainPathList);
|
|
|
|
|
|
emit sendSceneDataList(pSceneControl,pDataSource,imagePathList,terrainPathList);
|
|
|
|
|
|
/*
|
|
|
QThreadPool::globalInstance()->setMaxThreadCount(8);
|
|
|
if(pSceneControl == NULL) return;
|
|
|
UGDataSource* pDataSource = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
if(pDataSource->IsOpen()) pDataSource->Open();
|
|
|
GeoFileParser geoFileParser;
|
|
|
UGString ugImageLayerName;
|
|
|
UGLayer3D* pLayer = NULL;
|
|
|
UGString ugTerrianLayerName;
|
|
|
UGTerrainAccessor* tm = NULL;
|
|
|
|
|
|
//导入影像数据
|
|
|
if(!imagePathList.isEmpty())
|
|
|
{
|
|
|
// ShowProgressDialog* progressDlg = new ShowProgressDialog();
|
|
|
// connect(this,&MainWindow::closedProgressDialog,progressDlg,&ShowProgressDialog::closedProgressDialog);
|
|
|
// QThreadPool::globalInstance()->start(progressDlg);
|
|
|
// qDebug()<<"*****************activeThreadCount:"<<QThreadPool::globalInstance()->activeThreadCount();
|
|
|
// QTimer* timer = new QTimer();
|
|
|
// connect(timer, &QTimer::timeout, progressDlg, &ShowProgressDialog::updateProgressDialog);
|
|
|
// timer->start(100);//开启一个没有终点的定时器
|
|
|
|
|
|
for(int i = 0;i<imagePathList.size();i++)
|
|
|
{
|
|
|
// progressDlg->setLabelText("影像文件(" + QString::number(i+1) + "/" + QString::number(imagePathList.size()) + ")导入中...");
|
|
|
QFileInfo fileInfo(imagePathList.at(i));
|
|
|
UGString imageName = Translator::QStr2UGStr(fileInfo.baseName());
|
|
|
QElapsedTimer mstimer;
|
|
|
mstimer.start();
|
|
|
bool ss = geoFileParser.importTiffData(pDataSource,imageName,imagePathList.at(i),true);
|
|
|
float time = (double)mstimer.nsecsElapsed() / (double)1000000;
|
|
|
qDebug() << "ImageTime:::" << time/1000;
|
|
|
if(ss)
|
|
|
{
|
|
|
ugImageLayerName = imageName + _U("@") + Translator::QStr2UGStr(routeName); // 数据集名@数据源名,图层默认命名格式,也是通过该格式的名称获得关联数据
|
|
|
pLayer = pSceneControl->GetSceneEditWnd()->GetScene3D()->m_Layers.AddLayer(ugImageLayerName);
|
|
|
}
|
|
|
}
|
|
|
emit closedProgressDialog();
|
|
|
}
|
|
|
//导入地形数据
|
|
|
if(!terrianPathList.isEmpty())
|
|
|
{
|
|
|
for(int j = 0;j<terrianPathList.size();j++)
|
|
|
{
|
|
|
// progressDlg->setLabelText("地形文件(" + QString::number(j+1) + "/" + QString::number(terrianPathList.size()) + ")导入中...");
|
|
|
QFileInfo fileInfo(terrianPathList.at(j));
|
|
|
UGString terrianName = Translator::QStr2UGStr(fileInfo.baseName());
|
|
|
QElapsedTimer mstimer;
|
|
|
mstimer.start();
|
|
|
bool ss = geoFileParser.importTiffData(pDataSource,terrianName,terrianPathList.at(j),true,
|
|
|
UGImportParams::ModeGrid,UGDataCodec::encLZW);
|
|
|
float time = (double)mstimer.nsecsElapsed() / (double)1000000;
|
|
|
qDebug() << "TerrianTime:::" << time/1000;
|
|
|
if(ss)
|
|
|
{
|
|
|
ugTerrianLayerName = terrianName + _U("@") + Translator::QStr2UGStr(routeName); // 数据集名@数据源名,图层默认命名格式,也是通过该格式的名称获得关联数据
|
|
|
tm = pSceneControl->GetSceneEditWnd()->GetScene3D()->m_TerrainLayer3Ds.AddTerrainLayer(ugTerrianLayerName,terrianName);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// progressDlg->close();
|
|
|
// delete progressDlg;
|
|
|
|
|
|
if(!imagePathList.isEmpty())
|
|
|
{
|
|
|
pSceneControl->ViewToLayer(pLayer);
|
|
|
}
|
|
|
*/
|
|
|
|
|
|
}
|
|
|
|
|
|
//关闭进度条
|
|
|
void MainWindow::closedProgressDialog(QString taskName)
|
|
|
{
|
|
|
/***************************************线程池方式********************************/
|
|
|
/*
|
|
|
m_mutex.lock();
|
|
|
int imageIndex = imageDataList.indexOf(taskName);
|
|
|
int terrainIndex = terrainDataList.indexOf(taskName);
|
|
|
if(imageIndex>=0)
|
|
|
{
|
|
|
imageDataList.removeAt(imageIndex);
|
|
|
}
|
|
|
if(terrainIndex>=0)
|
|
|
{
|
|
|
terrainDataList.removeAt(terrainIndex);
|
|
|
}
|
|
|
|
|
|
QString importImageCount = QString::number(imageDataCount - imageDataList.size());
|
|
|
QString importTerrainCount = QString::number(terrainDataCount - terrainDataList.size());
|
|
|
|
|
|
progressDlg->setLabelText("影像文件导入中(" + importImageCount + "/" + QString::number(imageDataCount) + ")..."
|
|
|
+ "\n"
|
|
|
+ "地形文件导入中(" + importTerrainCount + "/" + QString::number(terrainDataCount) + ")...");
|
|
|
if(imageDataList.isEmpty() && terrainDataList.isEmpty())
|
|
|
{
|
|
|
progressDlg->close();
|
|
|
delete progressDlg;
|
|
|
progressDlg = NULL;
|
|
|
UGScene3D* pScene = pSceneControl->GetSceneEditWnd()->GetScene3D();
|
|
|
// 显示到数据集范围
|
|
|
pScene->GetCamera(_U("Camera"))->FlyToBounds(pScene->m_Layers.GetLayerInnerAt(0)->GetBounds(), 1);
|
|
|
}
|
|
|
m_mutex.unlock();
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
//显示三维航点设置对话框
|
|
|
void MainWindow::showSettingFlightPoint3DDialog()
|
|
|
{
|
|
|
SettingFlightPoint3DDialog* settingFlightPoint3DDlg = new SettingFlightPoint3DDialog();
|
|
|
connect(pSceneView,&SceneView::sendTrackingGeometry,settingFlightPoint3DDlg,&SettingFlightPoint3DDialog::receiveTrackingGeometry);
|
|
|
connect(pSceneView,&SceneView::sendTrackedGeometry,settingFlightPoint3DDlg,&SettingFlightPoint3DDialog::receiveTrackedGeometry);
|
|
|
connect(settingFlightPoint3DDlg,&SettingFlightPoint3DDialog::showSaveRouteDialog,this,&MainWindow::showSaveRoute3DDialog);
|
|
|
settingFlightPoint3DDlg->show();
|
|
|
}
|
|
|
|
|
|
//显示三维航线保存对话框
|
|
|
void MainWindow::showSaveRoute3DDialog(UGGeometry* pGeometry)
|
|
|
{
|
|
|
saveRouteDialog saveRoute3DDlg;
|
|
|
//显示对话框
|
|
|
saveRoute3DDlg.setMaxValue(1);
|
|
|
saveRoute3DDlg.setDrawMode(1);
|
|
|
saveRoute3DDlg.setHeightVisible(false);
|
|
|
int ret = saveRoute3DDlg.exec();
|
|
|
if(ret==QDialog::Rejected) return;
|
|
|
|
|
|
//获取数据集
|
|
|
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
UGDatasetVector* dv = (UGDatasetVector*)ds->GetDataset(line3DSetAlias).get();
|
|
|
if(!dv->Open()) dv->Open();
|
|
|
//提取属性信息
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
QMap<QString,QString> fieldsValue;
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteID,QString::number(dv->GetObjectCount()+1));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteNumber,QString::number(saveRoute3DDlg.getRouteNumber()[1]));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.RouteType,QString::number(saveRoute3DDlg.getRouteType()[1]));
|
|
|
fieldsValue.insert(routeGVar.routeFieldsName.IsClosedRoute,QString::number(saveRoute3DDlg.getRouteClosedState()[1]));
|
|
|
|
|
|
//写入数据集
|
|
|
GeoFeatureOperator geoFtOpt;
|
|
|
geoFtOpt.importGeometry3DAttribute(dv,pGeometry,fieldsValue);
|
|
|
//移除临时图层
|
|
|
UGString layername = routeGVar.line3DTempDtName + _U("@") + ds->GetAlias();
|
|
|
pSceneControl->removeLayer3D(layername);
|
|
|
|
|
|
ds = NULL;
|
|
|
dv = NULL;
|
|
|
}
|
|
|
|
|
|
//高亮当前导入的KML 3D几何对象
|
|
|
void MainWindow::highLightKMLGeometry(int currentGeometryID, int lastGeometryID)
|
|
|
{
|
|
|
UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
|
|
|
qDebug()<<"********************currentGeometryID:"<<currentGeometryID;
|
|
|
qDebug()<<"********************lastGeometryID:"<<lastGeometryID;
|
|
|
qDebug()<<"***********************Count:"<<trackingLayer3D->GetCount();
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
UGStyle3D sty;
|
|
|
// 取消原高亮几何对象
|
|
|
// routeGVar.getHighLightStyle3D(sty);
|
|
|
routeGVar.getTemporaryStyle3D(sty);
|
|
|
UGRenderObject* ro = trackingLayer3D->GetAt(lastGeometryID-1); //
|
|
|
// ro->SetAffectedByGlobalEffects(false);
|
|
|
// ro->SetStyle3D(&sty);
|
|
|
ro->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D()); //
|
|
|
// qDebug()<<"********************R:"<<ro->GetStyle3D()->GetLineColor3D().r;
|
|
|
// qDebug()<<"********************g:"<<ro->GetStyle3D()->GetLineColor3D().g;
|
|
|
// qDebug()<<"********************b:"<<ro->GetStyle3D()->GetLineColor3D().b;
|
|
|
// qDebug()<<"********************Type:"<<ro->GetType();
|
|
|
// 高亮新几何对象
|
|
|
routeGVar.getHighLightStyle3D(sty);
|
|
|
UGRenderObject* ro1 = trackingLayer3D->GetAt(currentGeometryID-1);//
|
|
|
// ro1->SetAffectedByGlobalEffects(false);
|
|
|
// ro1->SetStyle3D(&sty);
|
|
|
ro1->GetStyle3D()->SetLineColor3D(sty.GetLineColor3D()); //
|
|
|
// pSceneControl->GetScene3D()->UpdateData();
|
|
|
// pSceneControl->GetScene3D()->Refresh();
|
|
|
// pSceneControl->Refresh();
|
|
|
}
|
|
|
|
|
|
//右键菜单处理函数
|
|
|
void MainWindow::contextMenuEvent(QContextMenuEvent *event)
|
|
|
{
|
|
|
if(rMenuType==RBtnMenuType::DefaultMenu && mapType == MapType::Map2D)
|
|
|
{
|
|
|
mapRBtnMenu->exec(QCursor::pos()); // 右键菜单被模态显示出来了
|
|
|
}
|
|
|
|
|
|
if(rMenuType==RBtnMenuType::DefaultMenu && mapType == MapType::Map3D)
|
|
|
{
|
|
|
/*
|
|
|
UGCameraWorld* camera = pSceneControl->GetScene3D()->GetCamera(_U("Camera"));
|
|
|
UGCameraState cs = camera->m_StateCamera;
|
|
|
pSceneControl->GetCameraWorld()->GetCamera(cs);
|
|
|
qDebug()<<"*************lat:"<<cs.dLat*180/PI;
|
|
|
qDebug()<<"*************lon:"<<cs.dLon*180/PI;
|
|
|
qDebug()<<"*************Distance:"<<cs.dDistance;
|
|
|
qDebug()<<"*************Altitude:"<<cs.dAltitude;
|
|
|
qDebug()<<"*************Heading:"<<cs.dHeading*180/PI;
|
|
|
qDebug()<<"*************Roll:"<<cs.dRoll*180/PI;
|
|
|
qDebug()<<"*************Tilt:"<<cs.dTilt*180/PI;
|
|
|
qDebug()<<"******************Lookat***********************";
|
|
|
UGCameraState cs1 = camera->m_StateLookAt;
|
|
|
qDebug()<<"*************lat1:"<<cs1.dLat*180/PI;
|
|
|
qDebug()<<"*************lon1:"<<cs1.dLon*180/PI;
|
|
|
qDebug()<<"*************Distance1:"<<cs1.dDistance;
|
|
|
qDebug()<<"*************Altitude1:"<<cs1.dAltitude;
|
|
|
qDebug()<<"*************Heading1:"<<cs1.dHeading*180/PI;
|
|
|
qDebug()<<"*************Roll1:"<<cs1.dRoll*180/PI;
|
|
|
qDebug()<<"*************Tilt1:"<<cs1.dTilt*180/PI;
|
|
|
|
|
|
UGVector3d vPos;
|
|
|
UGQuaternion4d q;
|
|
|
UGCameraWorld::PosAndOrientation2CameraState(vPos,q,cs);
|
|
|
qDebug()<<"*************vPos.x:"<<vPos.x;
|
|
|
qDebug()<<"*************vPos.y:"<<vPos.y;
|
|
|
qDebug()<<"*************vPos.z:"<<vPos.z;
|
|
|
|
|
|
qDebug()<<"*************q.x:"<<q.x;
|
|
|
qDebug()<<"*************q.y:"<<q.y;
|
|
|
qDebug()<<"*************q.z:"<<q.z;
|
|
|
qDebug()<<"*************q.w:"<<q.w;
|
|
|
*/
|
|
|
|
|
|
|
|
|
// if(pSceneControl->GetSceneEditWnd()->GetUserAction() != 105) return;
|
|
|
if(pSceneView->isEditStateFlag)
|
|
|
{//处于编辑模式,不弹出右键菜单
|
|
|
pSceneView->isEditStateFlag = false;
|
|
|
return;
|
|
|
}
|
|
|
sceneRBtnMenu->exec(QCursor::pos()); // 右键菜单被模态显示出来了
|
|
|
}
|
|
|
|
|
|
// qDebug()<<"*****************contextMenuEvent:";
|
|
|
}
|
|
|
|
|
|
//Slot:打开栅格地图
|
|
|
void MainWindow::openRasterMap()
|
|
|
{
|
|
|
//获取工作空间中的地图对象
|
|
|
//初始化一个空的地图,并与工作空间建立联系
|
|
|
//地图中的数据就来源于工作空间打开的数据源
|
|
|
UGMap* pMap = qMapControl->GetMap();
|
|
|
pMap->SetLineSmoothingMode(false);
|
|
|
pMap->SetWorkspace(m_pWorkspace);
|
|
|
|
|
|
//获取影像文件路径
|
|
|
QString qStrPath = QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("OpenWorkSpace"),
|
|
|
":/supermap-iobjectscpp/MyProject/MapDisplay/SampleData/",
|
|
|
"GeoTIFF"+tr(u8"文件")+"(*.tif)");
|
|
|
|
|
|
if(qStrPath.isEmpty())
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//打开文件型数据库
|
|
|
UGDataSource* dataSource = m_pWorkspace->OpenDataSource(Translator::QStr2UGStr(qStrPath),
|
|
|
_U("tiffImage"),
|
|
|
UGEngineType::ImagePlugins);
|
|
|
if(dataSource == NULL)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//获取第一个数据集
|
|
|
UGDatasetPtr dataset = dataSource->GetDataset(0);
|
|
|
LayerOperator layerOpt;
|
|
|
// 用自己实现的方法将dataset展示到地图中
|
|
|
layerOpt.appendDatasetToMap(dataset,pMap);
|
|
|
}
|
|
|
//刷新地图窗口
|
|
|
qMapControl->Refresh();
|
|
|
|
|
|
// pMap = NULL;
|
|
|
dataSource = NULL;
|
|
|
|
|
|
/************************************test*******************************/
|
|
|
//二维飞机实时位置显示测试
|
|
|
// ShowPlane* m_pShowPlane = new ShowPlane(qMapControl);
|
|
|
// Plane* plane = new Plane("plane1",2,119.668,32.23);
|
|
|
// m_pShowPlane->addPlane(plane);
|
|
|
// m_pShowPlane->startFly();
|
|
|
|
|
|
|
|
|
// UGGeoPoint* p = new UGGeoPoint();
|
|
|
// 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);
|
|
|
}
|
|
|
|
|
|
/****************地图基础操作**********************/
|
|
|
#pragma region {
|
|
|
//放大地图操作
|
|
|
void MainWindow::zoomIn()
|
|
|
{
|
|
|
qMapControl->ZoomIn();
|
|
|
}
|
|
|
|
|
|
//缩小地图操作
|
|
|
void MainWindow::zoomOut()
|
|
|
{
|
|
|
qMapControl->ZoomOut();
|
|
|
}
|
|
|
|
|
|
//全幅显示地图操作
|
|
|
void MainWindow::viewEntire()
|
|
|
{
|
|
|
qMapControl->ViewEntire();
|
|
|
}
|
|
|
|
|
|
//平移浏览地图操作
|
|
|
void MainWindow::pan()
|
|
|
{
|
|
|
if(mapType==MapType::Map2D)
|
|
|
qMapControl->Pan();
|
|
|
else if(mapType==MapType::Map3D)
|
|
|
pSceneControl->Pan();
|
|
|
}
|
|
|
|
|
|
//选择要素操作
|
|
|
void MainWindow::Select()
|
|
|
{
|
|
|
if(mapType==MapType::Map2D)
|
|
|
qMapControl->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)
|
|
|
{
|
|
|
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();
|
|
|
if(editLayer!=NULL)
|
|
|
{
|
|
|
if(!editLayer->IsEditable())
|
|
|
{//开启编辑
|
|
|
qDebug()<<"***********************OpenEdit:";
|
|
|
qMapControl->setEditable(editLayer,true);
|
|
|
qMapControl->GetMap()->m_DynamicLayers.RemoveAll();
|
|
|
qMapControl->Refresh();
|
|
|
|
|
|
actionStartEdit->setIcon(QIcon(":/Resources/Edit.png"));
|
|
|
//actionEditNode->setIcon(QIcon(":/Resources/EditNode.png"));
|
|
|
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;
|
|
|
}
|
|
|
*/
|
|
|
}
|
|
|
else
|
|
|
{//三维
|
|
|
LayerOperator layerOpt;
|
|
|
if(!pSceneControl->GetEditStatus())
|
|
|
{//开启编辑
|
|
|
pSceneControl->SetEditStatus(true);
|
|
|
pSceneControl->GetUGLayer3Ds()->ReleaseAllSelection();
|
|
|
pSceneControl->GetTrackingLayer3D()->RemoveAll();
|
|
|
|
|
|
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();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
#pragma endregion }
|
|
|
|
|
|
/****************地图量算操作**********************/
|
|
|
#pragma region {
|
|
|
//量算距离
|
|
|
void MainWindow::calcLength()
|
|
|
{
|
|
|
qMapControl->CalcuLength();
|
|
|
}
|
|
|
|
|
|
//量算面积
|
|
|
void MainWindow::calcArea()
|
|
|
{
|
|
|
qMapControl->CalcuArea();
|
|
|
}
|
|
|
|
|
|
//量算角度
|
|
|
void MainWindow::calcAngle()
|
|
|
{
|
|
|
qMapControl->CalcuAngle();
|
|
|
}
|
|
|
|
|
|
#pragma endregion}
|
|
|
|
|
|
/****************矢量要素绘制**********************/
|
|
|
#pragma region {
|
|
|
//绘制点
|
|
|
void MainWindow::drawPoint()
|
|
|
{
|
|
|
// qDebug()<<"isEmpty1:"<<m_pWorkspace->m_DataSources.IsEmpty();
|
|
|
// for (int i=0;i<m_pWorkspace->m_DataSources.GetCount();i++)
|
|
|
// {
|
|
|
// qDebug()<<"DataSourceName:"<<Translator::UGStr2QStr(m_pWorkspace->m_DataSources.m_strArrNames[i]);
|
|
|
// }
|
|
|
drawMode = 1;
|
|
|
qMapControl->drawMode = drawMode;
|
|
|
//获取数据源
|
|
|
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
// qDebug()<<"Proj:" << ds->GetPrjCoordSys().GetGeoCoordSys().GetTypeID();
|
|
|
|
|
|
MapDataManeger mapDataManeger;
|
|
|
UGString pointAlias = _U("Marks");
|
|
|
if(!ds->GetDataset(pointAlias))
|
|
|
{//点数据集不存在则创建
|
|
|
//创建点数据集
|
|
|
mapDataManeger.createVectorSet(ds,UGDataset::Point,pointAlias);
|
|
|
}
|
|
|
//获取点数据集
|
|
|
UGDatasetPtr pointSet = ds->GetDataset(pointAlias);
|
|
|
pointSet->SetPrjCoordSys(UGPrjCoordSys(4326));//设置坐标系为WGS1984
|
|
|
// qDebug()<<"pointSetProj:" << pointSet->GetPrjCoordSys().GetGeoCoordSys().GetTypeID();
|
|
|
//将点数据集添加到地图
|
|
|
UGMap* pUGMap = qMapControl->GetMap();
|
|
|
UGLayer* pointLayer = pUGMap->m_Layers.AddDataset(pointSet,true, UGLayer::UG_Layer_Normal,pointAlias);
|
|
|
LayerOperator layerOpt;
|
|
|
layerOpt.setVectorLayerStyle(pointLayer,UGDataset::Point); //设置图层Style
|
|
|
if (pointLayer != NULL)
|
|
|
{
|
|
|
pointLayer->SetSelectable(true); //设置图层可选择
|
|
|
pUGMap->m_Layers.SetEditableLayer(pointLayer,true);//设置图层可编辑
|
|
|
qMapControl->GetUGMapWnd()->SetUserAction(UGDrawParamaters::uaEdit,UGEditType::ET_Point);
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//绘制线
|
|
|
void MainWindow::drawLine()
|
|
|
{
|
|
|
//获取数据源
|
|
|
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
|
|
|
GeoFeatureOperator geoFtOpt;
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
if(mapType == MapType::Map3D)
|
|
|
{
|
|
|
//创建临时数据集
|
|
|
const UGString datasetName = routeGVar.line3DTempDtName;
|
|
|
MapDataManeger mapDataMag;
|
|
|
UGDatasetVector* dv = NULL;
|
|
|
UGRecordsetPtr res;
|
|
|
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;
|
|
|
res = dv->Query(query);
|
|
|
qDebug()<<"***************RecordCount:"<<res->GetRecordCount();
|
|
|
res->DeleteAll();
|
|
|
res->Update();
|
|
|
}
|
|
|
|
|
|
UGString layer3DName = datasetName + _U("@") + ds->GetAlias(); //图层名命名为:数据集名@数据源名
|
|
|
|
|
|
connect(pSceneView,&SceneView::sendTrackedGeometry,this,[=](UGGeometry* pGeometry){
|
|
|
//接收绘制完成的航线,添加到临时数据集,并显示
|
|
|
UGGeoLine3D* line3D = (UGGeoLine3D*)pGeometry;
|
|
|
res->AddNew(line3D);
|
|
|
res->Update();
|
|
|
pSceneControl->Refresh();
|
|
|
});
|
|
|
// UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
// if(!ds->Open()) ds->Open();
|
|
|
// ds->GetDataset(line3DSetAlias)->Open();
|
|
|
// pSceneControl->GetSceneEditWnd()->SetUserAction(UGSceneUserAction::suaMeasureDistance);
|
|
|
// geoFtOpt.drawLine3D(pSceneView,Translator::QStr2UGStr(routeName),line3DSetAlias);
|
|
|
geoFtOpt.drawLine3D(pSceneView,layer3DName);
|
|
|
}
|
|
|
|
|
|
if(mapType == MapType::Map2D)
|
|
|
{
|
|
|
drawMode = 2;
|
|
|
qMapControl->drawMode = drawMode;
|
|
|
geoFtOpt.drawLine(qMapControl,ds,lineSetAlias);
|
|
|
}
|
|
|
ds = NULL;
|
|
|
|
|
|
/*
|
|
|
drawMode = 2;
|
|
|
qMapControl->drawMode = drawMode;
|
|
|
//获取数据源
|
|
|
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
|
|
|
//获取线数据集
|
|
|
UGDatasetPtr lineSet = ds->GetDataset(lineSetAlias);
|
|
|
lineSet->SetPrjCoordSys(UGPrjCoordSys(4326));//设置坐标系为WGS1984
|
|
|
|
|
|
//将线数据集添加到地图
|
|
|
UGMap* pUGMap = qMapControl->GetMap();
|
|
|
UGLayer* lineLayer = pUGMap->m_Layers.AddDataset(lineSet,true, UGLayer::UG_Layer_Normal,lineSetAlias);
|
|
|
LayerOperator layerOpt;
|
|
|
layerOpt.setVectorLayerStyle(lineLayer,UGDataset::Line); //设置图层Style
|
|
|
|
|
|
// UGStyle stytest;
|
|
|
// stytest.SetLineStyle(6); //设置线样式
|
|
|
// stytest.SetLineColor(UGRGB(255,0,0)); //设置符号颜色
|
|
|
// stytest.SetLineWidth(1); //设置线宽度
|
|
|
|
|
|
if (lineLayer != NULL)
|
|
|
{
|
|
|
lineLayer->SetSelectable(true); //设置图层可选择
|
|
|
pUGMap->m_Layers.SetEditableLayer(lineLayer,true);//设置图层可编辑
|
|
|
UGMapEditorWnd* pEditorWnd = qMapControl->GetUGMapWnd();
|
|
|
|
|
|
pEditorWnd->SetUserAction(UGDrawParamaters::uaEdit,UGEditType::ET_PolyLine);
|
|
|
// pEditorWnd->SetTrackingStyle(stytest); //设置交互式绘制几何对象时的风格。
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
}
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
//绘制多边形
|
|
|
void MainWindow::drawPolygon()
|
|
|
{
|
|
|
drawMode = 3;
|
|
|
qMapControl->drawMode = drawMode;
|
|
|
qMapControl->GetUGMapWnd()->SetUserAction(UGDrawParamaters::uaEdit,UGEditType::ET_PolyGon);
|
|
|
// UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
// UGDatasetVector* dv = (UGDatasetVector*) ds->GetDataset(2).get();
|
|
|
////// qDebug()<<"IsOpen:"<< dv->IsOpen();
|
|
|
//// dv->Open();
|
|
|
////// qDebug()<<"dsName:" << Translator::UGStr2QStr(dv->GetName());
|
|
|
////// qDebug()<<"RecordsetCount:"<<dv->GetRecordsetCount();
|
|
|
|
|
|
//// UGGeoRegion* rg = new UGGeoRegion();
|
|
|
|
|
|
// UGQueryDef queryDef;
|
|
|
// queryDef.m_nOptions = UGQueryDef::Both;
|
|
|
// queryDef.m_nType = UGQueryDef::General;
|
|
|
// queryDef.m_nMode = UGQueryDef::GeneralQuery;
|
|
|
// queryDef.m_nCursorType = UGQueryDef::OpenStatic; //OpenStatic,用于读取数据;OpenDynamic,用于数据增删改
|
|
|
// queryDef.m_strFilter = _U("");
|
|
|
// UGRecordsetPtr re = dv->Query(queryDef);
|
|
|
//// qDebug()<< "@@@@@2:"<<re->m_nRecordCount;
|
|
|
// qDebug()<< "@@@@@2:"<<(re==NULL);
|
|
|
// re->MoveFirst();
|
|
|
|
|
|
// UGVariant v;
|
|
|
// re->GetFieldValue(_U("smx"),v);
|
|
|
|
|
|
// UGGeoRegion* r = new UGGeoRegion();
|
|
|
//// UGGeometry* r1 = new UGGeometry(r);
|
|
|
//// re->GetGeometryDirect();
|
|
|
// qDebug()<< "@@@@@HasGeometry:"<<re->HasGeometry();
|
|
|
// qDebug()<< "@@@@@2:"<<(re->IsEmpty());
|
|
|
|
|
|
//// re->GetFeature()->GetGeometry()->ConvertToRegion(*r,0);
|
|
|
//// qDebug()<<"PointsCount:"<<r->GetPointCount();
|
|
|
|
|
|
//// const UGPoint2D* p = r->GetPoints();
|
|
|
|
|
|
// UGGeoRegion reg;
|
|
|
// UGGeometry * pTempGeomtry = NULL;
|
|
|
// re->GetGeometry(pTempGeomtry,0);
|
|
|
// r = dynamic_cast<UGGeoRegion*>(pTempGeomtry);
|
|
|
// qDebug()<<"PointsCount:"<<r->GetPointCount();
|
|
|
|
|
|
// qDebug()<<"p:"<<(p==NULL);
|
|
|
// qDebug()<<"x:"<<p->x;
|
|
|
// qDebug()<<"y:"<<p->y;
|
|
|
// qDebug()<<"p:"<<(!p);
|
|
|
// while(p)
|
|
|
// {
|
|
|
// qDebug()<<"YES";
|
|
|
// qDebug()<<"x:"<<p->x;
|
|
|
// qDebug()<<"y:"<<p->y;
|
|
|
// p++;
|
|
|
// }
|
|
|
|
|
|
|
|
|
// re->GetGeometryDirect(region);
|
|
|
// qDebug()<< "@@@@@2:"<<(re==NULL);
|
|
|
// qDebug()<< "@@@@@HasGeometry:"<<re->HasGeometry();
|
|
|
|
|
|
// re->GetGeometry(&rg,0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*******************上面是test*************************/
|
|
|
// qMapControl->createMode = 3;
|
|
|
// //获取数据源
|
|
|
// UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
|
|
|
// MapDataManeger mapDataManeger;
|
|
|
// UGString polygonAlias = _U("Geofencing");
|
|
|
// if(!ds->GetDataset(polygonAlias))
|
|
|
// {//点数据集不存在则创建
|
|
|
// //创建点数据集
|
|
|
// mapDataManeger.createVectorSet(ds,UGDataset::Region,polygonAlias);
|
|
|
// }
|
|
|
// //获取点数据集
|
|
|
// UGDatasetPtr polygonSet = ds->GetDataset(polygonAlias);
|
|
|
// polygonSet->SetPrjCoordSys(UGPrjCoordSys(4326));//设置坐标系为WGS1984
|
|
|
|
|
|
// //将点数据集添加到地图
|
|
|
// UGMap* pUGMap = qMapControl->GetMap();
|
|
|
// UGLayer* polygonLayer = pUGMap->m_Layers.AddDataset(polygonSet,true, UGLayer::UG_Layer_Normal,polygonAlias);
|
|
|
// LayerOperator layerOpt;
|
|
|
// layerOpt.setVectorLayerStyle(polygonLayer,UGDataset::Region); //设置图层Style
|
|
|
|
|
|
// if (polygonLayer != NULL)
|
|
|
// {
|
|
|
// polygonLayer->SetSelectable(true); //设置图层可选择
|
|
|
// pUGMap->m_Layers.SetEditableLayer(polygonLayer,true);//设置图层可编辑
|
|
|
// qMapControl->GetUGMapWnd()->SetUserAction(UGDrawParamaters::uaEdit,UGEditType::ET_PolyGon);
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
#pragma endregion}
|