You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
6.8 KiB
C++

#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<int> 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<int,QPointF> 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:"<<model->getRowCount();
// qDebug()<<"*************************rowCount:"<<model->getRowCount();
// qDebug()<<"*************************rowCount:"<<model->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<int,QPointF>&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;i<nodeNum;i++) //遍历一个要素所有节点
{
point.setX(p->x);
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;i<line.GetPointCount();i++)
{
point.setX(p->x);
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:"<<routeNumber;
QString queryFilter = "RouteType=" + routeType + " and " +
("RouteNumber=") + routeNumber;
qDebug()<<"*************************queryFilter_NUM:"<<queryFilter;
UGRecordsetPtr res1 = queryFeature(dv,Translator::QStr2UGStr(queryFilter));
//导航高度
UGVariant v1;
res1->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();
}