/* Copyright(c)--Navinfo--Author:fangzurui--date:2023-10-13 */ #include "EarthViewer/OSGRender.h" #include "DataManager/MarkPointFileManager.h" MarkPointFileImport::MarkPointFileImport(QWidget* parent) : QDialog(parent) , ui(new Ui::MarkPointFileImport) { ui->setupUi(this); this->setWindowIcon(QIcon(QCoreApplication::applicationDirPath() + "\\Resource\\dmatch.ico")); initMarkPointFileImportWidget(); } MarkPointFileImport::~MarkPointFileImport() { delete ui; } void MarkPointFileImport::initMarkPointFileImportWidget() { // 设置文字信息 ui->ImportPath->setText(QObject::tr("Import Path")); ui->Confirm->setText(QObject::tr("Confirm")); ui->Cancel->setText(QObject::tr("Cancel")); ui->Explore->setText(QObject::tr("Explore")); ui->TaskFilePathEdit->setPlaceholderText(QObject::tr("Enter Task File Path")); connect(ui->Explore, SIGNAL(clicked(bool)), this, SLOT(getFilePath())); connect(ui->Confirm, SIGNAL(clicked(bool)), this, SLOT(readMarkPointFile())); connect(ui->Cancel, SIGNAL(clicked(bool)), this, SLOT(close())); } void MarkPointFileImport::getFilePath() { // 获取文件路径 QFileDialog* dialog = new QFileDialog(); // 获取上次打开的路径 QString runPath; if(_strFilePath.isEmpty() == false) { runPath = _strFilePath; } else { runPath = QCoreApplication::applicationDirPath(); } QString strPath = dialog->getOpenFileName(this, QObject::tr("Choose File"), runPath, "Text Files(*.txt)", nullptr); // 获取的路径正确 if(strPath.isEmpty() == false) { // 将路径传到ui中 ui->TaskFilePathEdit->setText(strPath); // 将路径所在文件夹路径记录 _strFilePath = strPath; } else { QMessageBox::warning(this, QObject::tr("Waring"), QObject::tr("No file is selected"), QMessageBox::Ok, QMessageBox::Ok); } delete dialog; dialog = nullptr; } void MarkPointFileImport::readMarkPointFile() { if(ui->TaskFilePathEdit->text().isEmpty()) { QMessageBox::warning(this, QObject::tr("Waring"), QObject::tr("Please Enter Absolute Path"), QMessageBox::Ok, QMessageBox::Ok); return; } // 读取文件 QFile taskFile(ui->TaskFilePathEdit->text()); if(!taskFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(this, QObject::tr("Waring"), QObject::tr("Cannot Open Task File"), QMessageBox::Ok, QMessageBox::Ok); } else { int result = QMessageBox::warning(this, QObject::tr("Waring"), QObject::tr("Task Points not Saved Will be Cleaned."), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel); if(result = QMessageBox::Ok) { // 清空之前的任务点图层 RenderNode::getInstance()->deleteMarkPointLayer(); // 获取清空后的任务点图层对象 MarkPointLayer* layer = RenderNode::getInstance()->getMarkPointLayer(); // 创建任务点数据库管理对象 MarkPointDb* markPointDb = new MarkPointDb(); // 清空之前的数据记录 markPointDb->clearMarkPoint(); while(!taskFile.atEnd()) { // 按行读取 QString str = taskFile.readLine(); str.replace(QRegExp("\n"), ""); // 移除末尾的\n QStringList list = str.split(" "); // 将读取后的任务点存入数据库 MarkPoint* markPoint = new MarkPoint(); MapPoint mapPoint(list.at(2).toDouble(), list.at(3).toDouble(), list.at(4).toDouble()); markPoint->setId(list.at(1).toStdString()); markPoint->setMapPoint(mapPoint); markPointDb->saveMarkPoint(markPoint); // 将读取后的坐标添加到图层的数组中 MarkPoint* point = layer->createMarkPoint(mapPoint, list.at(1).toStdString()); layer->addMarkPoint(point); // 获取名称最大值 QString num; QRegExp rx("\\d+"); rx.indexIn(list.at(1), 0); num = rx.cap(0); // 将计数器设为名称对应数字的最大值 layer->setMarkPointCount(num.toInt()); // 绘制到图层中 RenderNode::getInstance()->addMark(point->getMarkPtr()); } delete markPointDb; markPointDb = nullptr; taskFile.close(); this->close(); } else { return; } } } MarkPointFileExport::MarkPointFileExport(QWidget* parent) : QDialog(parent) , ui(new Ui::MarkPointFileExport) { ui->setupUi(this); initMarkPointFileExportWidget(); } MarkPointFileExport::~MarkPointFileExport() { delete ui; } void MarkPointFileExport::initMarkPointFileExportWidget() { // 设置文字信息 ui->ExportPath->setText(QObject::tr("Export Path")); ui->ExportName->setText(QObject::tr("Export Name")); ui->Confirm->setText(QObject::tr("Confirm")); ui->Cancel->setText(QObject::tr("Cancel")); ui->Explore->setText(QObject::tr("Explore")); ui->SavePathEdit->setPlaceholderText(QObject::tr("Enter Task File Path")); ui->SaveNameEdit->setPlaceholderText(QObject::tr("Enter Saved File Name")); connect(ui->Explore, SIGNAL(clicked(bool)), this, SLOT(getFilePath())); connect(ui->Confirm, SIGNAL(clicked(bool)), this, SLOT(writeMarkPointExportFile())); connect(ui->Cancel, SIGNAL(clicked(bool)), this, SLOT(close())); } void MarkPointFileExport::getFilePath() { QFileDialog* dialog = new QFileDialog(); // 获取上次打开的路径 QString runPath; if(_strFilePath.isEmpty() == false) { runPath = _strFilePath; } else { runPath = QCoreApplication::applicationDirPath(); } QString strPath = dialog->getExistingDirectory(this, QObject::tr("Choose Directory"), runPath); if(strPath.isEmpty() == false) { // 将路径传到ui中 ui->SavePathEdit->setText(strPath); // 将路径所在文件夹路径记录 _strFilePath = strPath; } else { QMessageBox::warning(this, QObject::tr("Waring"), QObject::tr("No file is selected"), QMessageBox::Ok, QMessageBox::Ok); } delete dialog; dialog = nullptr; } void MarkPointFileExport::writeMarkPointExportFile() { // 判断输入是否正确 if(ui->SavePathEdit->text().isEmpty() || ui->SaveNameEdit->text().isEmpty()) { QMessageBox::warning(this, QObject::tr("Waring"), QObject::tr("Please Enter Absolute Path"), QMessageBox::Ok, QMessageBox::Ok); return; } // 判断该路径是否可以写入 qt_ntfs_permission_lookup++; // 获取输出的文件路径 std::string strOutputPath; if(ui->SavePathEdit->text().back() == "/" || ui->SavePathEdit->text().back() == "\\") { strOutputPath = ui->SavePathEdit->text().toStdString() + ui->SaveNameEdit->text().toStdString() + ".txt"; } else { strOutputPath = ui->SavePathEdit->text().toStdString() + "\\" + ui->SaveNameEdit->text().toStdString() + ".txt"; } // 通过数据库导出txt MarkPointDb* markPointDb = new MarkPointDb(); if(markPointDb->exportMarkPoint(strOutputPath.c_str()) == true) { QMessageBox::information(this, QObject::tr("Finished"), QObject::tr("Export Task File Success"), QMessageBox::Ok, QMessageBox::Ok); } else { QMessageBox::warning(this, QObject::tr("Waring"), QObject::tr("Cannot Write File, Please Check"), QMessageBox::Ok, QMessageBox::Ok); } this->close(); qt_ntfs_permission_lookup--; } MarkPointInfo::MarkPointInfo(QWidget* parent) : QDialog(parent) , ui(new Ui::MarkPointInfo) { ui->setupUi(this); initMarkPointInfoWidget(); } MarkPointInfo::~MarkPointInfo() { delete ui; } void MarkPointInfo::initMarkPointInfoWidget() { // 设置文字信息 ui->Delete->setText(QObject::tr("Delete")); ui->Cancel->setText(QObject::tr("Cancel")); connect(ui->Delete, SIGNAL(clicked(bool)), this, SLOT(deleteMarkPoint())); connect(ui->Cancel, SIGNAL(clicked(bool)), this, SLOT(close())); } void MarkPointInfo::setIndex(int index) { _index = index; } void MarkPointInfo::deleteMarkPoint() { if(_index == -1) { QMessageBox::warning(this, QObject::tr("Warning"), QObject::tr("Cannot Remove Last Point"), QMessageBox::Ok, QMessageBox::Ok); } else { emit OSGRender::getInstance()->deleteMarkPoint(_index); this->close(); } }