装订航线适配三维场景

master
cbwu 2 years ago
parent df6b22d7bd
commit 1d869462e9

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 10.0.1, 2023-06-14T11:25:10. --> <!-- Written by QtCreator 10.0.1, 2023-06-18T09:18:49. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

@ -1,5 +1,6 @@
#include "bindroutedialog.h" #include "bindroutedialog.h"
#include "Geometry/UGGeoLine.h" #include "Geometry/UGGeoLine.h"
#include "Geometry3D/UGGeoLine3D.h"
#include "qdebug.h" #include "qdebug.h"
#include "ui_bindroutedialog.h" #include "ui_bindroutedialog.h"
#include "translator.h" #include "translator.h"
@ -18,12 +19,14 @@ bindRouteDialog::bindRouteDialog(QWidget *parent) :
bindState = u8"未装订"; bindState = u8"未装订";
RouteType[1] = "飞行航线"; // RouteType[1] = "飞行航线";
RouteType[2] = "应急航线"; // RouteType[2] = "应急航线";
RouteType[3] = "回收航线"; // RouteType[3] = "回收航线";
RouteType[4] = "围栏航线"; // RouteType[4] = "围栏航线";
RouteType[5] = "通场航线"; // RouteType[5] = "通场航线";
RouteType[6] = "跑道航线"; // RouteType[6] = "跑道航线";
RouteType = routeGVar.getRouteType();
model = new BindRouteTableModel(); model = new BindRouteTableModel();
@ -48,6 +51,7 @@ bindRouteDialog::~bindRouteDialog()
void bindRouteDialog::setDataset(UGC::UGDatasetVector *dv) void bindRouteDialog::setDataset(UGC::UGDatasetVector *dv)
{ {
this->dv = dv; this->dv = dv;
addRouteTypeItem();
} }
void bindRouteDialog::addRouteTypeItem() void bindRouteDialog::addRouteTypeItem()
@ -56,14 +60,16 @@ void bindRouteDialog::addRouteTypeItem()
if(!res) return; if(!res) return;
res->MoveFirst(); res->MoveFirst();
UGVariant v; UGVariant v;
QSet<int> typeset; // QSet<int> typeset;
std::set<int> typeset; //Qset不会排序因此这里使用std::set
while(!res->IsEOF()) while(!res->IsEOF())
{//获取航线类型唯一值 {//获取航线类型唯一值
res->GetFieldValue(_U("RouteType"),v); res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteType),v);
typeset.insert(v.ToInt()); typeset.insert(v.ToInt());
res->MoveNext(); res->MoveNext();
} }
for(auto i = typeset.begin(); i != typeset.end(); i ++)
for(auto i = typeset.begin(); i != typeset.end(); i++)
{ {
ui->routeTypeCombox->addItem(RouteType[*i]); ui->routeTypeCombox->addItem(RouteType[*i]);
} }
@ -77,7 +83,7 @@ void bindRouteDialog::addRouteNumberItem(UGRecordsetPtr res)
if(res) if(res)
{ {
while (!res->IsEOF()) { //获取航线编号 while (!res->IsEOF()) { //获取航线编号
res->GetFieldValue(_U("RouteNumber"),v); res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteNumber),v);
strl << Translator::UGStr2QStr(v.ToString()); strl << Translator::UGStr2QStr(v.ToString());
res->MoveNext(); res->MoveNext();
} }
@ -86,14 +92,14 @@ void bindRouteDialog::addRouteNumberItem(UGRecordsetPtr res)
ui->routeNumberCombox->addItems(strl); ui->routeNumberCombox->addItems(strl);
} }
void bindRouteDialog::showTableData(QString routeNumber,QMap<int,QPointF> points,qreal routeHeight, void bindRouteDialog::showTableData(QString routeNumber,QMap<int,QVector3D> points,
QString routeFeatures,QString bindState) QString routeFeatures,QString bindState)
{ {
//与tableView绑定 //与tableView绑定
model->setBeginResetModel(); model->setBeginResetModel();
model->routeData.routeNumber = routeNumber; model->routeData.routeNumber = routeNumber;
model->routeData.points = points; model->routeData.points = points;
model->routeData.routeHeight = routeHeight; // model->routeData.routeHeight = routeHeight;
model->routeData.routeFeatures = routeFeatures; model->routeData.routeFeatures = routeFeatures;
model->routeData.bindState = bindState; model->routeData.bindState = bindState;
model->setEndResetModel(); model->setEndResetModel();
@ -102,7 +108,6 @@ void bindRouteDialog::showTableData(QString routeNumber,QMap<int,QPointF> points
// qDebug()<<"*************************rowCount:"<<model->getRowCount(); // qDebug()<<"*************************rowCount:"<<model->getRowCount();
// qDebug()<<"*************************rowCount:"<<model->getRowCount(); // qDebug()<<"*************************rowCount:"<<model->getRowCount();
ui->bindRouteTable->viewport()->update(); ui->bindRouteTable->viewport()->update();
ui->bindRouteTable->repaint(); ui->bindRouteTable->repaint();
@ -119,53 +124,78 @@ UGRecordsetPtr bindRouteDialog::queryFeature(UGDatasetVector *dv, UGString filte
return dv->Query(queryDef); return dv->Query(queryDef);
} }
void bindRouteDialog::getNodePoints(UGRecordsetPtr res, UGint geometryType, QMap<int,QPointF>&points) void bindRouteDialog::getNodePoints(UGRecordsetPtr res, QMap<int,QVector3D>&points)
{ {
UGGeometry* pTempGeomtry = NULL; res->MoveFirst();
UGGeoLine line; UGGeometry* pGeometry = NULL;
UGGeoRegion polygon; res->GetGeometry(pGeometry);
QPointF point;
const UGPoint2D* p = NULL;
switch (geometryType) { QVector3D point;
int type = pGeometry->GetType();
switch (type) {
case UGGeometry::GeoLine: case UGGeometry::GeoLine:
{ {
//导航高度
UGVariant v; UGVariant v;
res->GetFieldValue(_U("IsClosedRoute"),v); //判断是否闭合航线 res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteHeight),v);
double height = v.ToDouble();
res->GetGeometry(pTempGeomtry,0); UGGeoLine* line = (UGGeoLine*)pGeometry;
pTempGeomtry->ConvertToRegion(polygon); const UGPoint2D* p = line->GetPoints(); //节点指针
p = polygon.GetPoints(); //节点指针 int nodeNum = line->GetPointCount(); //节点数
int nodeNum; if (line->GetStartNode() == line->GetEndNode())
if (v.ToInt())
{//闭合航线,减去末尾重合航点 {//闭合航线,减去末尾重合航点
nodeNum = polygon.GetPointCount() - 1; nodeNum--;
}
else
{
nodeNum = polygon.GetPointCount();
} }
for(int i = 0;i<nodeNum;i++) //遍历一个要素所有节点 for(int i = 0;i<nodeNum;i++) //遍历一个要素所有节点
{ {
point.setX(p->x); point.setX(p->x);
point.setY(p->y); point.setY(p->y);
point.setZ(height);
points[i+1] = point; points[i+1] = point;
p++; p++;
} }
line = NULL;
p = NULL;
break; break;
} }
case UGGeometry::GeoRegion: case UGGeometry::GeoRegion:
{ {
res->GetGeometry(pTempGeomtry,0); UGGeoRegion* polygon = (UGGeoRegion*)pGeometry;
pTempGeomtry->ConvertToLine(line); const UGPoint2D* p = polygon->GetPoints(); //节点指针
p = line.GetPoints(); //节点指针 int nodeNum = polygon->GetPointCount()-1; //节点数
for(int i = 0;i<line.GetPointCount();i++) for(int i = 0;i<nodeNum;i++)
{ {
point.setX(p->x); point.setX(p->x);
point.setY(p->y); point.setY(p->y);
point.setZ(0);
points[i] = point; points[i] = point;
p++; p++;
} }
polygon = NULL;
p = NULL;
break;
}
case UGGeometry::GeoLine3D:
{
UGGeoLine3D* line3D = (UGGeoLine3D*)pGeometry;
const UGPoint3D* p = line3D->GetPoints(); //节点指针
int nodeNum = line3D->GetPointCount(); //节点数
if (line3D->GetStartNode() == line3D->GetEndNode())
{//闭合航线,减去末尾重合航点
nodeNum--;
}
for(int i = 0;i<nodeNum;i++)
{
point.setX(p->x);
point.setY(p->y);
point.setZ(p->z);
points[i+1] = point;
p++;
}
line3D = NULL;
p = NULL;
break; break;
} }
} }
@ -178,28 +208,31 @@ void bindRouteDialog::on_routeNumberCombox_currentIndexChanged(int index)
{ {
return; return;
} }
qDebug()<<"*************************routeNumber:"<<routeNumber; // qDebug()<<"*************************routeNumber:"<<routeNumber;
QString queryFilter = "RouteType=" + routeType + " and " + QString queryFilter = "RouteType=" + routeType + " and " +
("RouteNumber=") + routeNumber; ("RouteNumber=") + routeNumber;
qDebug()<<"*************************queryFilter_NUM:"<<queryFilter; // qDebug()<<"*************************queryFilter_NUM:"<<queryFilter;
UGRecordsetPtr res1 = queryFeature(dv,Translator::QStr2UGStr(queryFilter)); UGRecordsetPtr res1 = queryFeature(dv,Translator::QStr2UGStr(queryFilter));
//导航高度 //导航高度
UGVariant v1; // UGVariant v1;
res1->GetFieldValue(_U("RouteHeight"),v1); // res1->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteHeight),v1);
routeHeight = v1.ToDouble(); // routeHeight = v1.ToDouble();
//添加0号起飞点 //添加0号起飞点
QPointF point0(0,0); //起飞点 QVector3D point0(0,0,0); //起飞点
points.clear(); points.clear();
getNodePoints(res1,UGGeometry::GeoLine,points); //航点 UGGeometry* pGeometry = NULL;
res1->GetGeometry(pGeometry);
getNodePoints(res1,points); //航点
points[0] = point0; points[0] = point0;
QStringList m_headData; QStringList m_headData;
m_headData<<"航线"<<"航点"<<"经度"<<"纬度"<<"导航高度"<<"航路特征"<<"装订状态"; m_headData<<"航线"<<"航点"<<"经度"<<"纬度"<<"导航高度"<<"航路特征"<<"装订状态";
model->m_headData = m_headData; model->m_headData = m_headData;
showTableData(routeNumber,points,routeHeight,"03",bindState); showTableData(routeNumber,points,"03",bindState);
pGeometry = NULL;
} }
void bindRouteDialog::on_routeTypeCombox_currentIndexChanged(int index) void bindRouteDialog::on_routeTypeCombox_currentIndexChanged(int index)

@ -2,9 +2,12 @@
#define BINDROUTEDIALOG_H #define BINDROUTEDIALOG_H
#include <QDialog> #include <QDialog>
#include <QVector3D>
#include "Engine/UGDatasetVector.h" #include "Engine/UGDatasetVector.h"
#include "bindroutetablemodel.h" #include "bindroutetablemodel.h"
#include "routeglobalvariant.h"
//MSVC编译器界面显示乱码问题 //MSVC编译器界面显示乱码问题
#if _MSC_VER >= 1600 #if _MSC_VER >= 1600
@ -25,7 +28,7 @@ public:
explicit bindRouteDialog(QWidget *parent = nullptr); explicit bindRouteDialog(QWidget *parent = nullptr);
~bindRouteDialog(); ~bindRouteDialog();
qint16 getRouteID();; qint16 getRouteID();
qint16 getRouteType(); //获取航线类型 qint16 getRouteType(); //获取航线类型
QString getRouteText(); QString getRouteText();
@ -42,18 +45,19 @@ private:
QString routeFeatures; QString routeFeatures;
QString routeNumber; QString routeNumber;
QString routeType; QString routeType;
QMap<int,QPointF> points; QMap<int,QVector3D> points;
qreal routeHeight; qreal routeHeight;
RouteGlobalVariant routeGVar;
QMap<int,QString> RouteType; QMap<int,QString> RouteType;
private: private:
void addRouteNumberItem(UGRecordsetPtr res); //添加航线编号 void addRouteNumberItem(UGRecordsetPtr res); //添加航线编号
void showTableData(QString routeNumber,QMap<int,QPointF> points,qreal routeHeight, void showTableData(QString routeNumber,QMap<int,QVector3D> points,
QString routeFeatures,QString bindState); //显示表格数据 QString routeFeatures,QString bindState); //显示表格数据
UGRecordsetPtr queryFeature(UGDatasetVector* dv,UGString filter=_U("")); UGRecordsetPtr queryFeature(UGDatasetVector* dv,UGString filter=_U(""));
void getNodePoints(UGRecordsetPtr res,UGint geometryType,QMap<int,QPointF>&points); //获取节点 void getNodePoints(UGRecordsetPtr res,QMap<int,QVector3D>&points); //获取节点
private slots: private slots:
void on_routeNumberCombox_currentIndexChanged(int index); void on_routeNumberCombox_currentIndexChanged(int index);

@ -86,7 +86,8 @@ QVariant BindRouteTableModel::data(const QModelIndex &index, int role) const
} }
else else
{ {
return QString::number(routeData.routeHeight,'f',2); // return QString::number(routeData.routeHeight,'f',2);
return QString::number(routeData.points[index.row()].z(),'f',2);
} }
break; break;
} }

@ -7,15 +7,16 @@
*/ */
#include <QAbstractTableModel> #include <QAbstractTableModel>
#include <QVector3D>
#include "Engine/UGDatasetVector.h" #include "Engine/UGDatasetVector.h"
// //
struct RouteData struct RouteData
{ {
QMap<int,QPointF>points; QMap<int,QVector3D>points;
QString routeNumber; QString routeNumber;
qreal routeHeight; // qreal routeHeight;
QString bindState; QString bindState;
QString routeFeatures; QString routeFeatures;
}; };

@ -1604,14 +1604,22 @@ void MainWindow::loadModelData()
//显示装订航线对话框 //显示装订航线对话框
void MainWindow::showBindRouteDialog() void MainWindow::showBindRouteDialog()
{ {
UGDataSource* ds = m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName));
UGDatasetVector* bindRoute_dv = NULL;
//获取线数据集 //获取线数据集
UGDatasetVector* bindRoute_dv = (UGDatasetVector*)m_pWorkspace->GetDataSource(Translator::QStr2UGStr(routeName))->GetDataset(lineSetAlias).get(); if(mapType==MapType::Map2D)
bindRoute_dv = (UGDatasetVector*)ds->GetDataset(lineSetAlias).get();
else
bindRoute_dv = (UGDatasetVector*)ds->GetDataset(line3DSetAlias).get();
bindRoute_dv->Open(); bindRoute_dv->Open();
//显示装订对话框
bindRouteDialog bindRouteDlg; bindRouteDialog bindRouteDlg;
bindRouteDlg.setDataset(bindRoute_dv); bindRouteDlg.setDataset(bindRoute_dv);
bindRouteDlg.addRouteTypeItem();
bindRouteDlg.exec(); bindRouteDlg.exec();
bindRoute_dv = NULL; bindRoute_dv = NULL;
ds = NULL;
} }
//显示输入坐标点对话框 //显示输入坐标点对话框

Loading…
Cancel
Save