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

master
cbwu 2 years ago
parent f612c56f5a
commit ef1e733d75

@ -13,7 +13,7 @@
#include "layeroperator.h"
#include "Scene/UGLayer3D.h"
#include "Scene/UGTrackingLayer3D.h"
#include "Layer3DDataset/UGLayer3DDatasetVector.h"
DisplayRouteDialog::DisplayRouteDialog(QWidget *parent) :
QDialog(parent),
@ -214,7 +214,7 @@ void DisplayRouteDialog::showRoute3D()
QStringList routeNumberList = ui->RouteNumberCbbox->currentText().replaceInStrings(";",",");
QString numFilter = "RouteNumber in (" + routeNumberList.join("\\,") + ")";
// qDebug()<<"******************************:"<<numFilter;
qDebug()<<"******************************:"<<numFilter;
//图层几何对象过滤语句
UGString layerFilter = Translator::QStr2UGStr(numFilter + " and " + typeFilter);
@ -222,6 +222,36 @@ void DisplayRouteDialog::showRoute3D()
UGRecordsetPtr res = gftOpt.queryFeature(dtv,layerFilter);
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();
UGTrackingLayer3D* trackingLayer3D = pSceneControl->GetTrackingLayer3D();
//添加到显示数据集
@ -240,10 +270,12 @@ void DisplayRouteDialog::showRoute3D()
UGStyle3D style3D = routeGVar.getRouteStyle3D(routeType.toInt());
displayLayer->SetStyle3D(style3D);
pSceneControl->Refresh(displayLayer);
displayLayer = NULL;
layers = NULL;
trackingLayer3D = NULL;
*/
/* TrackingLayer3D显示方式
UGTrackingLayer3D* pTrackingLayer3D = pSceneControl->GetTrackingLayer3D();
@ -399,6 +431,9 @@ void DisplayRouteDialog::on_displayBtn_clicked()
mMessageTips->show();
// mMessageTips = NULL;
// this->reject();
// int type = RouteType.key(ui->RouteTypeCbbox->currentText());
// pSceneControl->removeLayer3D(Translator::QStr2UGStr("RouteLayer3D"+QString::number(type)));
return;
}
if(is3DMap)

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

@ -500,6 +500,7 @@ void GeoFeatureOperator::addNodeLabel3D(UGRecordsetPtr res, UGTrackingLayer3D *p
}
UGString geoTextTag = Translator::QStr2UGStr(QString::number(type)) + _U("_") + number;
if(pTrackingLayer3D->Find(geoTextTag)>=0) pTrackingLayer3D->Remove(geoTextTag);
pTrackingLayer3D->Add(geoText3D,geoTextTag);
res->MoveNext();
@ -509,6 +510,25 @@ void GeoFeatureOperator::addNodeLabel3D(UGRecordsetPtr res, UGTrackingLayer3D *p
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)
{

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

@ -61,6 +61,7 @@
#include "Layer3DFile/UGLayer3DDynamic.h"
#include "Layer3DFile/UGLayer3DModel.h"
#include "Layer3DFile/UGLayer3DVector.h"
//#include "Layer3DTree/UGLayer3DTree.h"
#include "Base3D/UGMathEngine.h"
#include "Scene/UGFlyRoute.h"
@ -678,7 +679,7 @@ void MainWindow::addMapMenuAction()
actionExportFile = attributeRBtnMenu->addAction("导出");
}
//声明编辑条的行为
//声明编辑条的行为
void MainWindow::addEditToolAction()
{
//为"编辑"按钮添加按钮图标并将其置于工具条上
@ -2378,6 +2379,21 @@ void MainWindow::Edit()
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 }

@ -595,6 +595,24 @@ UGTerrainAccessor* SceneControl::AddTerrainLayerFromFile(string filePath)
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()
{
UGLayer3Ds* pLayers = GetUGLayer3Ds();

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

Loading…
Cancel
Save