修改三维航线显示实现逻辑,与二维航线显示逻辑一致,通过设置数据集的Filter来实现不同航线类型的显示

master
cbwu 2 years ago
parent f612c56f5a
commit ef1e733d75

@ -13,7 +13,7 @@
#include "layeroperator.h" #include "layeroperator.h"
#include "Scene/UGLayer3D.h" #include "Scene/UGLayer3D.h"
#include "Scene/UGTrackingLayer3D.h" #include "Scene/UGTrackingLayer3D.h"
#include "Layer3DDataset/UGLayer3DDatasetVector.h"
DisplayRouteDialog::DisplayRouteDialog(QWidget *parent) : DisplayRouteDialog::DisplayRouteDialog(QWidget *parent) :
QDialog(parent), QDialog(parent),
@ -214,7 +214,7 @@ void DisplayRouteDialog::showRoute3D()
QStringList routeNumberList = ui->RouteNumberCbbox->currentText().replaceInStrings(";",","); QStringList routeNumberList = ui->RouteNumberCbbox->currentText().replaceInStrings(";",",");
QString numFilter = "RouteNumber in (" + routeNumberList.join("\\,") + ")"; QString numFilter = "RouteNumber in (" + routeNumberList.join("\\,") + ")";
// qDebug()<<"******************************:"<<numFilter; qDebug()<<"******************************:"<<numFilter;
//图层几何对象过滤语句 //图层几何对象过滤语句
UGString layerFilter = Translator::QStr2UGStr(numFilter + " and " + typeFilter); UGString layerFilter = Translator::QStr2UGStr(numFilter + " and " + typeFilter);
@ -222,6 +222,36 @@ void DisplayRouteDialog::showRoute3D()
UGRecordsetPtr res = gftOpt.queryFeature(dtv,layerFilter); UGRecordsetPtr res = gftOpt.queryFeature(dtv,layerFilter);
res->MoveFirst(); res->MoveFirst();
UGQueryDef queryDef;
res->GetQueryDef(queryDef);
qDebug()<<"******************************RecordCount0:"<<res->GetRecordCount();
const UGString strDataName = routeGVar.workspaceDataName.Line3DDatasetName + _U("@") + routeGVar.workspaceDataName.DatasourceName;
const UGString layer3DName = _U("RouteLayer3D") + Translator::QStr2UGStr(routeType);
UGLayer3Ds* layer3Ds = pSceneControl->GetUGLayer3Ds();
UGLayer3DDatasetVector* layer3DDv = NULL;
if(layer3Ds->FindNameInner(layer3DName)>=0)
{//图层已存在则重新设置Filter
layer3DDv = (UGLayer3DDatasetVector*)layer3Ds->GetLayerInner(layer3DName);
layer3DDv->SetDisplayFilter(queryDef);
}
else
{
layer3DDv = (UGLayer3DDatasetVector*)layer3Ds->AddLayer(strDataName,layer3DName,_U(""));
layer3DDv->SetDisplayFilter(queryDef);
};
UGStyle3D style3D = routeGVar.getRouteStyle3D(routeType.toInt());
layer3DDv->SetStyle3D(style3D);
UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
UGRecordsetPtr tempRes = gftOpt.queryFeature(dtv,Translator::QStr2UGStr(typeFilter));
gftOpt.removeNodeLabel3D(tempRes,trackingLayer3D); //移除该类型航线注记
gftOpt.addNodeLabel3D(res,trackingLayer3D);//添加航点注记
pSceneControl->Refresh(layer3DDv);
/*
UGLayer3Ds* layers = pSceneControl->GetUGLayer3Ds(); UGLayer3Ds* layers = pSceneControl->GetUGLayer3Ds();
UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D(); UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
//添加到显示数据集 //添加到显示数据集
@ -240,10 +270,12 @@ void DisplayRouteDialog::showRoute3D()
UGStyle3D style3D = routeGVar.getRouteStyle3D(routeType.toInt()); UGStyle3D style3D = routeGVar.getRouteStyle3D(routeType.toInt());
displayLayer->SetStyle3D(style3D); displayLayer->SetStyle3D(style3D);
pSceneControl->Refresh(displayLayer); pSceneControl->Refresh(displayLayer);
displayLayer = NULL; displayLayer = NULL;
layers = NULL; layers = NULL;
trackingLayer3D = NULL; trackingLayer3D = NULL;
*/
/* TrackingLayer3D显示方式 /* TrackingLayer3D显示方式
UGTrackingLayer3D* pTrackingLayer3D = pSceneControl->GetTrackingLayer3D(); UGTrackingLayer3D* pTrackingLayer3D = pSceneControl->GetTrackingLayer3D();
@ -399,6 +431,9 @@ void DisplayRouteDialog::on_displayBtn_clicked()
mMessageTips->show(); mMessageTips->show();
// mMessageTips = NULL; // mMessageTips = NULL;
// this->reject(); // this->reject();
// int type = RouteType.key(ui->RouteTypeCbbox->currentText());
// pSceneControl->removeLayer3D(Translator::QStr2UGStr("RouteLayer3D"+QString::number(type)));
return; return;
} }
if(is3DMap) if(is3DMap)

@ -74,6 +74,7 @@ private:
QMap<int,QList<QString>> routeTags; QMap<int,QList<QString>> routeTags;
bool is3DMap; //二三维标识 bool is3DMap; //二三维标识
}; };
#endif // DISPLAYROUTEDIALOG_H #endif // DISPLAYROUTEDIALOG_H

@ -500,6 +500,7 @@ void GeoFeatureOperator::addNodeLabel3D(UGRecordsetPtr res, UGTrackingLayer3D *p
} }
UGString geoTextTag = Translator::QStr2UGStr(QString::number(type)) + _U("_") + number; UGString geoTextTag = Translator::QStr2UGStr(QString::number(type)) + _U("_") + number;
if(pTrackingLayer3D->Find(geoTextTag)>=0) pTrackingLayer3D->Remove(geoTextTag);
pTrackingLayer3D->Add(geoText3D,geoTextTag); pTrackingLayer3D->Add(geoText3D,geoTextTag);
res->MoveNext(); res->MoveNext();
@ -509,6 +510,25 @@ void GeoFeatureOperator::addNodeLabel3D(UGRecordsetPtr res, UGTrackingLayer3D *p
line3D = NULL; line3D = NULL;
} }
//移除三维航线注记
void GeoFeatureOperator::removeNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D)
{
res->MoveFirst();
UGVariant type;
UGVariant number;
UGString geoTextTag;
while(!res->IsEOF())
{
res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteType),type);
res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteNumber),number);
geoTextTag = type.ToString() + _U("_") + number.ToString();
if(pTrackingLayer3D->Find(geoTextTag)>=0)
pTrackingLayer3D->Remove(geoTextTag);
res->MoveNext();
}
}
//添加三维几何对象到记录集 //添加三维几何对象到记录集
void GeoFeatureOperator::addGeometry3DToDataset(UGDatasetVector *dv, UGGeometry *pGeometry) void GeoFeatureOperator::addGeometry3DToDataset(UGDatasetVector *dv, UGGeometry *pGeometry)
{ {

@ -46,6 +46,9 @@ public:
//添加三维航点注记 //添加三维航点注记
void addNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D); void addNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D);
//移除三维航线注记
void removeNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D);
//添加三维几何对象到记录集 //添加三维几何对象到记录集
void addGeometry3DToDataset(UGDatasetVector* dv,UGGeometry* pGeometry); void addGeometry3DToDataset(UGDatasetVector* dv,UGGeometry* pGeometry);

@ -61,6 +61,7 @@
#include "Layer3DFile/UGLayer3DDynamic.h" #include "Layer3DFile/UGLayer3DDynamic.h"
#include "Layer3DFile/UGLayer3DModel.h" #include "Layer3DFile/UGLayer3DModel.h"
#include "Layer3DFile/UGLayer3DVector.h"
//#include "Layer3DTree/UGLayer3DTree.h" //#include "Layer3DTree/UGLayer3DTree.h"
#include "Base3D/UGMathEngine.h" #include "Base3D/UGMathEngine.h"
#include "Scene/UGFlyRoute.h" #include "Scene/UGFlyRoute.h"
@ -678,7 +679,7 @@ void MainWindow::addMapMenuAction()
actionExportFile = attributeRBtnMenu->addAction("导出"); actionExportFile = attributeRBtnMenu->addAction("导出");
} }
//声明编辑条的行为 //声明编辑条的行为
void MainWindow::addEditToolAction() void MainWindow::addEditToolAction()
{ {
//为"编辑"按钮添加按钮图标并将其置于工具条上 //为"编辑"按钮添加按钮图标并将其置于工具条上
@ -2378,6 +2379,21 @@ void MainWindow::Edit()
editLayer = NULL; editLayer = NULL;
} }
} }
else
{//三维
UGLayer3DDatasetVector* pLayer3D = (UGLayer3DDatasetVector*)pSceneControl->GetUGLayer3Ds()->AddLayer(_U("FlightLines3D@Route")); //
UGQueryDef queryDef;
queryDef.m_nOptions = UGQueryDef::Both; //查询选项:几何对象(Geometry)和属性(Attribute)都查询
queryDef.m_nType = UGQueryDef::General; //查询类型:一般的数下条件查询
queryDef.m_nMode = UGQueryDef::GeneralQuery; //查询模式:一般查询(非模糊查询)
queryDef.m_nCursorType = UGQueryDef::OpenStatic; //OpenStatic,用于读取数据OpenDynamic,用于数据增删改
queryDef.m_strFilter = _U("RouteNumber =2 and RouteType=1"); //查询条件
pLayer3D->SetDisplayFilter(queryDef);
qDebug()<<"*********************1:"<<pSceneControl->GetUGLayer3Ds()->GetInnerCount();
}
} }
#pragma endregion } #pragma endregion }

@ -595,6 +595,24 @@ UGTerrainAccessor* SceneControl::AddTerrainLayerFromFile(string filePath)
return pTerrain; return pTerrain;
} }
//获取第一个高亮对象所在图层
UGLayer3D *SceneControl::GetSelectionLayer()
{
UGLayer3Ds* pLayers = GetUGLayer3Ds();
int count = pLayers->GetInnerCount();
UGLayer3D* pLayer = NULL;
for (int i = 0; i < count; i++)
{
pLayer = pLayers->GetLayerInnerAt(i);
UGSelection3D* pSelection = pLayer->GetSelection3D();
if (NULL != pSelection && pSelection->GetSize() > 0)
{
return pLayer;
}
}
return pLayer;
}
UGArray<UGSelection3D*>* SceneControl::GetGeoSelections() UGArray<UGSelection3D*>* SceneControl::GetGeoSelections()
{ {
UGLayer3Ds* pLayers = GetUGLayer3Ds(); UGLayer3Ds* pLayers = GetUGLayer3Ds();

@ -193,7 +193,6 @@ using namespace UGC;
*/ */
UGCameraWorld* GetCameraWorld(); UGCameraWorld* GetCameraWorld();
private: // TODO:
/* /*
* @en * @en
* @brief Set a layer editable or not in current scense. * @brief Set a layer editable or not in current scense.
@ -253,6 +252,12 @@ using namespace UGC;
//UGLayer3D* AddLayerFromWeb(); //UGLayer3D* AddLayerFromWeb();
/*
*@cbwu
*@brief
*/
UGLayer3D* GetSelectionLayer();
// 获取所有选中对象的选择集。通常情况下,使用点击选择对象,只有个图层有选中对象,因此只有一个选择集 // 获取所有选中对象的选择集。通常情况下,使用点击选择对象,只有个图层有选中对象,因此只有一个选择集
// 若没有选中对象返回NULL; 不需要使用时请先RemoveAll(), 再delete // 若没有选中对象返回NULL; 不需要使用时请先RemoveAll(), 再delete
UGArray<UGSelection3D*>* GetGeoSelections(); UGArray<UGSelection3D*>* GetGeoSelections();
@ -328,7 +333,6 @@ using namespace UGC;
// signals: // signals:
// void sendTrackedGeometry(UGGeometry* pGeometry,UGint nUserAction); // void sendTrackedGeometry(UGGeometry* pGeometry,UGint nUserAction);
}; };
//} //}
//} //}

Loading…
Cancel
Save