#include "bindroutedialog.h" #include "Geometry/UGGeoLine.h" #include "Geometry3D/UGGeoLine3D.h" #include "qdebug.h" #include "ui_bindroutedialog.h" #include "translator.h" bindRouteDialog::bindRouteDialog(QWidget *parent) : QDialog(parent), ui(new Ui::bindRouteDialog) { ui->setupUi(this); this->setWindowTitle(u8"航线装订"); this->resize(1100,600); this->setWindowFlags(Qt::WindowCloseButtonHint); //关闭右上角帮助(?)按钮。 // ui->routeNumberCombox->addItem("1"); // addRouteTypeItem(); bindState = u8"未装订"; // RouteType[1] = "飞行航线"; // RouteType[2] = "应急航线"; // RouteType[3] = "回收航线"; // RouteType[4] = "围栏航线"; // RouteType[5] = "通场航线"; // RouteType[6] = "跑道航线"; RouteType = routeGVar.getRouteType(); model = new BindRouteTableModel(); ui->bindRouteTable->setModel(model); // ui->bindRouteTable->resizeColumnToContents(); ui->bindRouteTable->verticalHeader()->hide(); ui->bindRouteTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // ui->bindRouteTable->horizontalHeader()->setSectionResizeMode(2,QHeaderView::ResizeToContents); // ui->bindRouteTable->horizontalHeader()->setSectionResizeMode(3,QHeaderView::ResizeToContents); ui->bindRouteTable->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->bindRouteTable->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); // 显示垂直滑动条 } bindRouteDialog::~bindRouteDialog() { delete ui; } void bindRouteDialog::setDataset(UGC::UGDatasetVector *dv) { this->dv = dv; addRouteTypeItem(); } void bindRouteDialog::addRouteTypeItem() { UGRecordsetPtr res = queryFeature(dv); if(!res) return; res->MoveFirst(); UGVariant v; // QSet typeset; std::set typeset; //Qset不会排序,因此这里使用std::set while(!res->IsEOF()) {//获取航线类型唯一值 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]); } } void bindRouteDialog::addRouteNumberItem(UGRecordsetPtr res) { ui->routeNumberCombox->clear(); QStringList strl; UGVariant v; if(res) { while (!res->IsEOF()) { //获取航线编号 res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteNumber),v); strl << Translator::UGStr2QStr(v.ToString()); res->MoveNext(); } } ui->routeNumberCombox->addItems(strl); } 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.routeFeatures = routeFeatures; model->routeData.bindState = bindState; model->setEndResetModel(); // qDebug()<<"*************************rowCount:"<getRowCount(); // qDebug()<<"*************************rowCount:"<getRowCount(); // qDebug()<<"*************************rowCount:"<getRowCount(); ui->bindRouteTable->viewport()->update(); ui->bindRouteTable->repaint(); } UGRecordsetPtr bindRouteDialog::queryFeature(UGDatasetVector *dv, UGString filter) { 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 = filter; //查询条件 return dv->Query(queryDef); } void bindRouteDialog::getNodePoints(UGRecordsetPtr res, QMap&points) { res->MoveFirst(); UGGeometry* pGeometry = NULL; res->GetGeometry(pGeometry); QVector3D point; int type = pGeometry->GetType(); switch (type) { case UGGeometry::GeoLine: { //导航高度 UGVariant v; res->GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteHeight),v); double height = v.ToDouble(); UGGeoLine* line = (UGGeoLine*)pGeometry; const UGPoint2D* p = line->GetPoints(); //节点指针 int nodeNum = line->GetPointCount(); //节点数 if (line->GetStartNode() == line->GetEndNode()) {//闭合航线,减去末尾重合航点 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: { UGGeoRegion* polygon = (UGGeoRegion*)pGeometry; const UGPoint2D* p = polygon->GetPoints(); //节点指针 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; } } } void bindRouteDialog::on_routeNumberCombox_currentIndexChanged(int index) { routeNumber = ui->routeNumberCombox->currentText(); if(routeNumber.isEmpty()) { return; } // qDebug()<<"*************************routeNumber:"<GetFieldValue(Translator::QStr2UGStr(routeGVar.routeFieldsName.RouteHeight),v1); // routeHeight = v1.ToDouble(); //添加0号起飞点 QVector3D point0(0,0,0); //起飞点 points.clear(); 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,"03",bindState); pGeometry = NULL; } void bindRouteDialog::on_routeTypeCombox_currentIndexChanged(int index) { routeType = QString::number(RouteType.key(ui->routeTypeCombox->currentText())); QString queryFilter = "RouteType=" + routeType; UGRecordsetPtr res2 = queryFeature(dv,Translator::QStr2UGStr(queryFilter)); //更新航线编号选项 addRouteNumberItem(res2); routeNumber = ui->routeNumberCombox->currentText(); } // 当内容改变时自适应列宽 //void bindRouteDialog::resizeContents() //{ //} void bindRouteDialog::on_bindRouteCancelBtn_clicked() { this->close(); } void bindRouteDialog::on_bindRouteStartBtn_clicked() { this->accept(); }