diff --git a/MapDisplay.pro.user b/MapDisplay.pro.user index 714b10b2..ba98d42a 100644 --- a/MapDisplay.pro.user +++ b/MapDisplay.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/bindroutedialog.cpp b/bindroutedialog.cpp index e79695e5..90749d44 100644 --- a/bindroutedialog.cpp +++ b/bindroutedialog.cpp @@ -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,14 +60,16 @@ void bindRouteDialog::addRouteTypeItem() if(!res) return; res->MoveFirst(); UGVariant v; - QSet typeset; +// QSet typeset; + std::set 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 ++) + + 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 points,qreal routeHeight, +void bindRouteDialog::showTableData(QString routeNumber,QMap 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 points // qDebug()<<"*************************rowCount:"<getRowCount(); // qDebug()<<"*************************rowCount:"<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&points) +void bindRouteDialog::getNodePoints(UGRecordsetPtr res, QMap&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;ix); 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;iGetPoints(); //节点指针 + int nodeNum = polygon->GetPointCount()-1; //节点数 + for(int i = 0;ix); 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;ix); + 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:"<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) diff --git a/bindroutedialog.h b/bindroutedialog.h index 4cd50cfd..53f9c0cc 100644 --- a/bindroutedialog.h +++ b/bindroutedialog.h @@ -2,9 +2,12 @@ #define BINDROUTEDIALOG_H #include +#include #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 points; + QMap points; qreal routeHeight; + RouteGlobalVariant routeGVar; QMap RouteType; private: void addRouteNumberItem(UGRecordsetPtr res); //添加航线编号 - void showTableData(QString routeNumber,QMap points,qreal routeHeight, + void showTableData(QString routeNumber,QMap points, QString routeFeatures,QString bindState); //显示表格数据 UGRecordsetPtr queryFeature(UGDatasetVector* dv,UGString filter=_U("")); - void getNodePoints(UGRecordsetPtr res,UGint geometryType,QMap&points); //获取节点 + void getNodePoints(UGRecordsetPtr res,QMap&points); //获取节点 private slots: void on_routeNumberCombox_currentIndexChanged(int index); diff --git a/bindroutetablemodel.cpp b/bindroutetablemodel.cpp index d6b4ad5a..c5ea6deb 100644 --- a/bindroutetablemodel.cpp +++ b/bindroutetablemodel.cpp @@ -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; } diff --git a/bindroutetablemodel.h b/bindroutetablemodel.h index 1cc96991..790e32ee 100644 --- a/bindroutetablemodel.h +++ b/bindroutetablemodel.h @@ -7,15 +7,16 @@ */ #include +#include #include "Engine/UGDatasetVector.h" // struct RouteData { - QMappoints; + QMappoints; QString routeNumber; - qreal routeHeight; +// qreal routeHeight; QString bindState; QString routeFeatures; }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 1a09ef16..771021ae 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -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; } //显示输入坐标点对话框