装订航线适配三维场景

master
cbwu 2 years ago
parent df6b22d7bd
commit 1d869462e9

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<data>
<variable>EnvironmentId</variable>

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

@ -2,9 +2,12 @@
#define BINDROUTEDIALOG_H
#include <QDialog>
#include <QVector3D>
#include "Engine/UGDatasetVector.h"
#include "bindroutetablemodel.h"
#include "routeglobalvariant.h"
//MSVC编译器界面显示乱码问题
#if _MSC_VER >= 1600
@ -25,7 +28,7 @@ public:
explicit bindRouteDialog(QWidget *parent = nullptr);
~bindRouteDialog();
qint16 getRouteID();;
qint16 getRouteID();
qint16 getRouteType(); //获取航线类型
QString getRouteText();
@ -42,18 +45,19 @@ private:
QString routeFeatures;
QString routeNumber;
QString routeType;
QMap<int,QPointF> points;
QMap<int,QVector3D> points;
qreal routeHeight;
RouteGlobalVariant routeGVar;
QMap<int,QString> RouteType;
private:
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); //显示表格数据
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:
void on_routeNumberCombox_currentIndexChanged(int index);

@ -86,7 +86,8 @@ QVariant BindRouteTableModel::data(const QModelIndex &index, int role) const
}
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;
}

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

@ -1604,14 +1604,22 @@ void MainWindow::loadModelData()
//显示装订航线对话框
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();
//显示装订对话框
bindRouteDialog bindRouteDlg;
bindRouteDlg.setDataset(bindRoute_dv);
bindRouteDlg.addRouteTypeItem();
bindRouteDlg.exec();
bindRoute_dv = NULL;
ds = NULL;
}
//显示输入坐标点对话框

Loading…
Cancel
Save