|
|
|
@ -50,6 +50,7 @@
|
|
|
|
|
#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"
|
|
|
|
@ -801,7 +802,6 @@ void MainWindow::addSceneActionConnect()
|
|
|
|
|
DisplayRouteDialog displayRouteDlg;
|
|
|
|
|
displayRouteDlg.setDataset(Route3D_ds);
|
|
|
|
|
displayRouteDlg.setSceneControl(pSceneControl);
|
|
|
|
|
displayRouteDlg.setMapType(true);
|
|
|
|
|
displayRouteDlg.addRouteTypeItem();
|
|
|
|
|
|
|
|
|
|
displayRouteDlg.exec();
|
|
|
|
@ -809,9 +809,13 @@ void MainWindow::addSceneActionConnect()
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 连接信号actionImportRoute和槽导入
|
|
|
|
|
connect(actionImportRoute,&QAction::triggered,this,[=](){
|
|
|
|
|
importKMLData();
|
|
|
|
|
connect(actionSceneImportRoute,&QAction::triggered,this,[=](){
|
|
|
|
|
importKML3DData();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/********************场景右键属性菜单信号槽连接********************/
|
|
|
|
|
//连接actionExportFile与KML导出函数
|
|
|
|
|
connect(actionExportFile,&QAction::triggered,this,&MainWindow::exportKMLFile);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Scene连接信号和槽的函数
|
|
|
|
@ -820,6 +824,9 @@ void MainWindow::addSceneConnect()
|
|
|
|
|
// connect(pSceneView,&SceneView::sendTrackedGeometry,this,&MainWindow::showSaveRoute3DDialog);
|
|
|
|
|
|
|
|
|
|
connect(pSceneView,&SceneView::showSettingFlightPointDialg,this,&MainWindow::showSettingFlightPoint3DDialog);
|
|
|
|
|
|
|
|
|
|
//连接右键属性菜单信号
|
|
|
|
|
connect(pSceneView,&SceneView::showAttributeMenu,this,&MainWindow::showAttributeMenu);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -870,18 +877,13 @@ void MainWindow::importKMLData()
|
|
|
|
|
|
|
|
|
|
GeoFeatureOperator geoFtOperator;
|
|
|
|
|
UGRecordsetPtr kmlRes = geoFtOperator.queryFeature(kmlDv);
|
|
|
|
|
//添加航线到Tracking Layer
|
|
|
|
|
LayerOperator layerOperator;
|
|
|
|
|
RouteGlobalVariant routeGVar;
|
|
|
|
|
UGStyle sty;
|
|
|
|
|
routeGVar.getTemporaryStyle(sty);
|
|
|
|
|
/* Tracking Layer
|
|
|
|
|
UGTrackingLayer* pTrackingLayer = &qMapControl->GetMap()->m_TrackingLayer;
|
|
|
|
|
layerOperator.addGeometryInTrackingLayer(pTrackingLayer,res,sty);
|
|
|
|
|
routeGVar.getHighLightStyle(sty);
|
|
|
|
|
UGGeoEvent* pGeoEvent = pTrackingLayer->GetAt(0);
|
|
|
|
|
pGeoEvent->SetStyle(sty); //设置第一条航线高亮
|
|
|
|
|
*/
|
|
|
|
|
// if(mapType==MapType::Map2D)
|
|
|
|
|
// layerOperator.showKMLTemporary(qMapControl,kmlRes);
|
|
|
|
|
|
|
|
|
|
//将kml航线临时展示在动态图层
|
|
|
|
|
UGMap* pMap = qMapControl->GetMap();
|
|
|
|
|
UGDynamicLayer* pDyLayer = NULL;
|
|
|
|
@ -920,17 +922,18 @@ void MainWindow::importKMLData()
|
|
|
|
|
//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();
|
|
|
|
|
});
|
|
|
|
|
//显示弹窗
|
|
|
|
@ -941,9 +944,201 @@ void MainWindow::importKMLData()
|
|
|
|
|
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()
|
|
|
|
|
{
|
|
|
|
@ -1082,7 +1277,7 @@ void MainWindow::loadModelData()
|
|
|
|
|
// pDataSource = NULL;
|
|
|
|
|
|
|
|
|
|
//模型移动测试
|
|
|
|
|
UGDatasetVector* dv = (UGDatasetVector*)pDataSource->GetDataset(_U("Plane")).get(); //FlightLines3D
|
|
|
|
|
// UGDatasetVector* dv = (UGDatasetVector*)pDataSource->GetDataset(_U("FlightLines3D")).get(); //FlightLines3D
|
|
|
|
|
// ShowPlane3D* plane3D = new ShowPlane3D(pSceneControl,dv);
|
|
|
|
|
// plane3D->setPlanesCount(1);
|
|
|
|
|
// plane3D->startFly();
|
|
|
|
@ -1165,11 +1360,11 @@ void MainWindow::loadModelData()
|
|
|
|
|
UGStyle3D style3D;
|
|
|
|
|
// style3D.SetMarker3D(true);
|
|
|
|
|
// style3D.SetScaleBySymbol(true);
|
|
|
|
|
style3D.SetFixedPixelSize(false);
|
|
|
|
|
style3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE);
|
|
|
|
|
// style3D.SetFixedPixelSize(false);
|
|
|
|
|
// style3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE);
|
|
|
|
|
style3D.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
|
|
// style3D.SetLineWidth(1);
|
|
|
|
|
// style3D.SetLineColor(UGRGB(255,0,0));
|
|
|
|
|
style3D.SetLineWidth(1);
|
|
|
|
|
style3D.SetLineColor(UGRGB(255,0,0));
|
|
|
|
|
// style3D.SetFillBackColor(UGRGB(255,0,0));
|
|
|
|
|
// style3D.SetFillForeColor(UGRGB(255,0,0));
|
|
|
|
|
// style3D.SetFillColor(UGRGB(255,0,0));
|
|
|
|
@ -1191,16 +1386,16 @@ void MainWindow::loadModelData()
|
|
|
|
|
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);
|
|
|
|
|
// 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);
|
|
|
|
|
// 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();
|
|
|
|
@ -1295,8 +1490,10 @@ void MainWindow::loadModelData()
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
|
@ -1309,14 +1506,14 @@ void MainWindow::loadModelData()
|
|
|
|
|
// pl->SetName(_U("Test"));
|
|
|
|
|
// pl->SetGeometry(model);
|
|
|
|
|
|
|
|
|
|
UGStyle3D sty3D;
|
|
|
|
|
// UGStyle3D sty3D;
|
|
|
|
|
// sty3D.SetMarkerStyle(318); //253268
|
|
|
|
|
//// sty3D.SetMarker3D(true);
|
|
|
|
|
sty3D.SetPointColor(UGRGB(255,0,0));
|
|
|
|
|
sty3D.SetMarkerSize(30);
|
|
|
|
|
// sty3D.SetPointColor(UGRGB(255,0,0));
|
|
|
|
|
// sty3D.SetMarkerSize(30);
|
|
|
|
|
// sty3D.SetFill3DMode(UGC::/*UGFill3DMode::*/FILL_FACE);
|
|
|
|
|
sty3D.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
|
|
sty3D.SetBottomAltitude(20);
|
|
|
|
|
// sty3D.SetAltitudeMode(AltitudeMode::Absolute);
|
|
|
|
|
// sty3D.SetBottomAltitude(20);
|
|
|
|
|
// p->SetStyle3D(&sty3D);
|
|
|
|
|
// pl->SetStyle3D(&sty3D);
|
|
|
|
|
// plotLayer->Add(p,_U("point"));
|
|
|
|
@ -1353,12 +1550,15 @@ void MainWindow::loadModelData()
|
|
|
|
|
// UGGeoPicture* pt = (UGGeoPicture*) geometry;
|
|
|
|
|
// UGGeoLine3D* l = (UGGeoLine3D*) geometry;
|
|
|
|
|
// l->SetStyle3D(&style3D);
|
|
|
|
|
UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
|
|
|
|
|
// UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
|
|
|
|
|
// trackingLayer3D->SetAlwaysRender(true);
|
|
|
|
|
// trackingLayer3D->SetWorkspace(m_pWorkspace);
|
|
|
|
|
// trackingLayer3D->SetUseGeoStyle(true);
|
|
|
|
|
// qDebug()<<"**************TrackingCount0:"<<trackingLayer3D->GetCount();
|
|
|
|
|
// trackingLayer3D->Add(GP,_U("picture"));
|
|
|
|
|
// trackingLayer3D->Add(l,_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);
|
|
|
|
@ -1392,9 +1592,9 @@ void MainWindow::loadModelData()
|
|
|
|
|
// qDebug()<<"**************RenderObjectSize1:"<<rol->GetSize();
|
|
|
|
|
// UGRenderObject* ro = trackingLayer3D->GetAt(0);
|
|
|
|
|
// qDebug()<<"**************RenderObjectVisible:"<<ro->IsVisible();
|
|
|
|
|
pSceneControl->Refresh();
|
|
|
|
|
// pSceneControl->Refresh();
|
|
|
|
|
// scene->UpdateData();
|
|
|
|
|
scene->Refresh();
|
|
|
|
|
// scene->Refresh();
|
|
|
|
|
|
|
|
|
|
// pSceneControl->GetScene3D()->GetCamera(_U("Camera"))->FlyTo(model);
|
|
|
|
|
// pSceneControl->GetScene3D()->Refresh();
|
|
|
|
@ -1445,33 +1645,7 @@ void MainWindow::showOnlineMapDialog()
|
|
|
|
|
void MainWindow::showAttributeMenu()
|
|
|
|
|
{
|
|
|
|
|
rMenuType = RBtnMenuType::AttributeMenu;
|
|
|
|
|
connect(actionExportFile,&QAction::triggered,this,[=](){
|
|
|
|
|
QString savePath = QFileDialog::getSaveFileName(this, tr("导出KML文件"),
|
|
|
|
|
"/航线1",
|
|
|
|
|
tr("Google KML(*.kml);;Google KML(*.kmz)"));
|
|
|
|
|
if(savePath.isEmpty()) return;
|
|
|
|
|
|
|
|
|
|
UGMap* pMap = qMapControl->GetMap();
|
|
|
|
|
LayerOperator layerOpt;
|
|
|
|
|
QMap<int,QStringList> featureInfo;
|
|
|
|
|
featureInfo = layerOpt.getSelectedFeature(pMap);
|
|
|
|
|
//构造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;
|
|
|
|
|
GeoFP.exportKMLData(ds,"FlightLines",savePath,filter);
|
|
|
|
|
// qDebug()<<"****************Succes:"<<exportKMLData(ds,"temp0",savePath); //,"RouteNumber = 1 and RouteType=1"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(actionExportFile,&QAction::triggered,this,&MainWindow::exportKMLFile,Qt::UniqueConnection);
|
|
|
|
|
attributeRBtnMenu->exec(QCursor::pos());
|
|
|
|
|
rMenuType = RBtnMenuType::DefaultMenu;
|
|
|
|
|
}
|
|
|
|
@ -1837,6 +2011,37 @@ void MainWindow::showSaveRoute3DDialog(UGGeometry* pGeometry)
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
@ -1847,6 +2052,7 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
|
|
|
|
|
|
|
|
|
|
if(rMenuType==RBtnMenuType::DefaultMenu && mapType == MapType::Map3D)
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
UGCameraWorld* camera = pSceneControl->GetScene3D()->GetCamera(_U("Camera"));
|
|
|
|
|
UGCameraState cs = camera->m_StateCamera;
|
|
|
|
|
pSceneControl->GetCameraWorld()->GetCamera(cs);
|
|
|
|
@ -1878,6 +2084,7 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
|
|
|
|
|
qDebug()<<"*************q.y:"<<q.y;
|
|
|
|
|
qDebug()<<"*************q.z:"<<q.z;
|
|
|
|
|
qDebug()<<"*************q.w:"<<q.w;
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if(pSceneControl->GetSceneEditWnd()->GetUserAction() != 105) return;
|
|
|
|
@ -1977,13 +2184,19 @@ void MainWindow::viewEntire()
|
|
|
|
|
//平移浏览地图操作
|
|
|
|
|
void MainWindow::pan()
|
|
|
|
|
{
|
|
|
|
|
qMapControl->Pan();
|
|
|
|
|
if(mapType==MapType::Map2D)
|
|
|
|
|
qMapControl->Pan();
|
|
|
|
|
else if(mapType==MapType::Map3D)
|
|
|
|
|
pSceneControl->Pan();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//选择要素操作
|
|
|
|
|
void MainWindow::Select()
|
|
|
|
|
{
|
|
|
|
|
qMapControl->Select();
|
|
|
|
|
if(mapType==MapType::Map2D)
|
|
|
|
|
qMapControl->Select();
|
|
|
|
|
else if(mapType==MapType::Map3D)
|
|
|
|
|
pSceneControl->Select();
|
|
|
|
|
}
|
|
|
|
|
#pragma endregion }
|
|
|
|
|
|
|
|
|
@ -2057,12 +2270,6 @@ void MainWindow::drawPoint()
|
|
|
|
|
//绘制线
|
|
|
|
|
void MainWindow::drawLine()
|
|
|
|
|
{
|
|
|
|
|
// int count = pSceneControl->GetSceneEditWnd()->GetScene3D()->m_Layers.GetInnerCount();
|
|
|
|
|
// for(int n=0;n<count; n++)
|
|
|
|
|
// {
|
|
|
|
|
// qDebug()<<"*******************:"<<Translator::UGStr2QStr(pSceneControl->GetSceneEditWnd()->GetScene3D()->m_Layers.GetLayerInnerAt(n)->GetName());
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
//获取数据源
|
|
|
|
|
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
|
|
|
|
|
|
|
|
|
|