#include "bindroutedialog.h" #include "Geometry/UGGeoLine.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] = "跑道航线"; 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; } void bindRouteDialog::addRouteTypeItem() { UGRecordsetPtr res = queryFeature(dv); if(!res) return; res->MoveFirst(); UGVariant v; QSet typeset; while(!res->IsEOF()) {//获取航线类型唯一值 res->GetFieldValue(_U("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(_U("RouteNumber"),v); strl << Translator::UGStr2QStr(v.ToString()); res->MoveNext(); } } ui->routeNumberCombox->addItems(strl); } void bindRouteDialog::showTableData(QString routeNumber,QMap points,qreal routeHeight, 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, UGint geometryType, QMap&points) { UGGeometry* pTempGeomtry = NULL; UGGeoLine line; UGGeoRegion polygon; QPointF point; const UGPoint2D* p = NULL; switch (geometryType) { case UGGeometry::GeoLine: { UGVariant v; res->GetFieldValue(_U("IsClosedRoute"),v); //判断是否闭合航线 res->GetGeometry(pTempGeomtry,0); pTempGeomtry->ConvertToRegion(polygon); p = polygon.GetPoints(); //节点指针 int nodeNum; if (v.ToInt()) {//闭合航线,减去末尾重合航点 nodeNum = polygon.GetPointCount() - 1; } else { nodeNum = polygon.GetPointCount(); } for(int i = 0;ix); point.setY(p->y); points[i+1] = point; p++; } break; } case UGGeometry::GeoRegion: { res->GetGeometry(pTempGeomtry,0); pTempGeomtry->ConvertToLine(line); p = line.GetPoints(); //节点指针 for(int i = 0;ix); point.setY(p->y); points[i] = point; p++; } break; } } } void bindRouteDialog::on_routeNumberCombox_currentIndexChanged(int index) { routeNumber = ui->routeNumberCombox->currentText(); if(routeNumber.isEmpty()) { return; } qDebug()<<"*************************routeNumber:"<GetFieldValue(_U("RouteHeight"),v1); routeHeight = v1.ToDouble(); //添加0号起飞点 QPointF point0(0,0); //起飞点 points.clear(); getNodePoints(res1,UGGeometry::GeoLine,points); //航点 points[0] = point0; QStringList m_headData; m_headData<<"航线"<<"航点"<<"经度"<<"纬度"<<"导航高度"<<"航路特征"<<"装订状态"; model->m_headData = m_headData; showTableData(routeNumber,points,routeHeight,"03",bindState); } 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(); }