LAMPCAE/src/PluginWBFZExchangePlugin/TaskNodeList.cpp

996 lines
28 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "AllHead.h"
#include "TaskNodeList.h"
// =====================================================================
// OCCTShapeModelNode
//
// =====================================================================
OCCTShapeModelNode::OCCTShapeModelNode(QWidget* parent) : TaskNode(parent)
{
this->setChecked(true);
this->Filepath = QString("");
// 绑定事件
QObject::connect(this, &QCheckBox::stateChanged, this, &OCCTShapeModelNode::oncheckBoxStateChanged);
this->initContextMenu();
}
OCCTShapeModelNode::~OCCTShapeModelNode()
{
if ( this->Data_AIS) {
this->myContext->Remove(this->Data_AIS, Standard_False);
this->myContext->UpdateCurrentViewer();
}
}
void OCCTShapeModelNode::initContextMenu()
{
qDebug() << u8"初始化initContentListContextMenu模型编辑模块";
this->setContextMenuPolicy(Qt::CustomContextMenu);
//this->setFocusPolicy(Qt::NoFocus); // 允许快捷键
this->ContentListContextMenu = new QMenu(this); // 表格控件的右键菜单
QAction* show_hideAction = this->ContentListContextMenu->addAction(u8"显示/隐藏"); //
QObject::connect(show_hideAction, SIGNAL(triggered()), this, SLOT(ShowOrHide()));
QAction* copyAction = this->ContentListContextMenu->addAction(u8"复制对象"); //
copyAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C));
QObject::connect(copyAction, SIGNAL(triggered()), this, SLOT(copyItem()));
QAction* RenameAction = this->ContentListContextMenu->addAction(u8"重命名"); //
QObject::connect(RenameAction, SIGNAL(triggered()), this, SLOT(renameItem()));
QAction* showExtendAction = this->ContentListContextMenu->addAction(u8"缩放至"); //
QObject::connect(showExtendAction, SIGNAL(triggered()), this, SLOT(showExtend()));
QAction* TranslationdAction = this->ContentListContextMenu->addAction(u8"模型操作"); //
QObject::connect(TranslationdAction, SIGNAL(triggered()), this, SLOT(TranslationObject()));
QAction* removeItemAction = this->ContentListContextMenu->addAction(u8"移除对象"); //
QObject::connect(removeItemAction, SIGNAL(triggered()), this, SLOT(removeItem()));
QAction* saveAction = this->ContentListContextMenu->addAction(u8"保存"); //
QObject::connect(saveAction, SIGNAL(triggered()), this, SLOT(saveItem()));
QAction* saveAsAction = this->ContentListContextMenu->addAction(u8"另存为"); //
QObject::connect(saveAsAction, SIGNAL(triggered()), this, SLOT(saveAsItem()));
QAction* exportAction = this->ContentListContextMenu->addAction(u8"导出"); //
QObject::connect(exportAction, SIGNAL(triggered()), this, SLOT(ExportItem()));
QObject::connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(ShowContentListContextMenu(QPoint)));
qDebug() << u8"初始化contextMenu结束";
}
void OCCTShapeModelNode::HideShape()
{
this->myContext->Erase(this->Data_AIS, Standard_True);
this->setChecked(false);
}
void OCCTShapeModelNode::ShowShape()
{
this->myContext->Display(this->Data_AIS, Standard_True);
this->setChecked(true);
}
void OCCTShapeModelNode::removeDataShapeShow()
{
if (this->myContext) {
this->myContext->Remove(this->Data_AIS, Standard_False);
this->myContext->UpdateCurrentViewer();
}
}
void OCCTShapeModelNode::setContext(Handle(AIS_InteractiveContext) myContext)
{
this->myContext = myContext;
}
void OCCTShapeModelNode::setShape(const TopoDS_Shape& Data_Shape)
{
this->Data_AIS = new AIS_Shape(Data_Shape);
modelRepair = false;
}
// 将模型保存到指定文件路径上
void OCCTShapeModelNode::SaveShape(QString Filepath)
{
SaveTopoDs(Filepath, this->Shape(), this->shapetype);
}
Handle(AIS_Shape)& OCCTShapeModelNode::AIS()
{
return this->Data_AIS;
}
const TopoDS_Shape& OCCTShapeModelNode::Shape()
{
return this->Data_AIS->Shape();
}
bool OCCTShapeModelNode::setDataFile(QString filepath)
{
QFileInfo fileinfo(filepath);
QString filename = fileinfo.fileName();
TopoDS_Shape shape_TopoDs;
this->shapetype = ReadTopoDs_Shape(filepath, shape_TopoDs);
if (this->shapetype == OCCTShapeType::NoneType) {
return false;
}
this->setText(filename); // 设置文件
this->setShape(shape_TopoDs);
return true;
}
bool OCCTShapeModelNode::setSaveFilePath(QString filepath)
{
this->Filepath = filepath;
return true;
}
bool OCCTShapeModelNode::SaveFile()
{
this->SaveShape(this->Filepath);
return false;
}
bool OCCTShapeModelNode::CheckFilePath()
{
if (this->Filepath.isEmpty()) {
qDebug() << this->text() + QString(u8", 文件路径为空!!");
return false;
}
if (!QDir::isAbsolutePath(this->Filepath)) {
qDebug() << this->text() + QString(u8", 不是文件路径!!");
return false;
}
return true;
}
int OCCTShapeModelNode::ExcuteTask()
{
this->ShowShape();
this->status = TaskStatusEnum::excuting;
return 0;
}
int OCCTShapeModelNode::FinishTask()
{
if (this->modelRepair) {
// 询问是否关闭模型
QMessageBox msgBox;
msgBox.setText(u8"模型已经修改,是否保存模型");
msgBox.setInformativeText("模型已经修改,是否保存模型");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
if (ret == QMessageBox::Yes) { // 保存模型
this->saveItem();
}
else if (ret == QMessageBox::No) { // 选择不保存模型
}
}
this->myContext->Remove(this->AIS(), Standard_False); // 删除模型
this->myContext->UpdateCurrentViewer(); // 删除模型
this->status = TaskStatusEnum::finish;
QObject::disconnect(this, nullptr, this, nullptr);
return 0;
}
TaskNode* OCCTShapeModelNode::CopyToNew()
{
return nullptr;
}
void OCCTShapeModelNode::removeItem()
{
this->FinishTask();
emit this->deleteItem(this->text());
}
void OCCTShapeModelNode::renameItem()
{
bool ok;
QString oldname = this->getTaskName();
QString newName = QInputDialog::getText(this, "Rename Item", "Enter new name:", QLineEdit::Normal, this->text(), &ok);
if (newName.isEmpty()) {
newName = oldname;
return;
}
else {}
emit this->renameItem(newName);
}
void OCCTShapeModelNode::copyItem()
{
emit this->copyNew();
}
void OCCTShapeModelNode::showExtend()
{
// 缩放到特定模型
myContext->ClearSelected(Standard_True);
myContext->AddOrRemoveSelected(this->Data_AIS, Standard_True);
emit this->ShowFullExtend(this->Shape());
}
void OCCTShapeModelNode::saveItem()
{
qDebug() << u8"保存模型:" << this->Filepath;
QFileInfo fi(this->Filepath); // 判断文件是否存在
if (fi.exists()) {
qDebug() << " Path exists." << this->Filepath;
this->SaveFile();
}
else {
this->saveAsItem();
}
}
void OCCTShapeModelNode::saveAsItem()
{
qDebug() << "Item SaveAs.";
QString saveFilePath = getSaveFilePath(nullptr,
QString::fromUtf8(u8"另保存模型"),
getOCCTShapeTypeFilterString(this->shapetype));
// 另存为模型
this->Filepath = saveFilePath;
this->SaveFile(); // 设置文件路径,重新保存
}
void OCCTShapeModelNode::ExportItem() {
OcctExportClass exportwindows(this);
exportwindows.setDataShape(this->Shape());
exportwindows.exec();
}
void OCCTShapeModelNode::TranslationObject()
{
emit this->ModelModify(this);
}
void OCCTShapeModelNode::ShowContentListContextMenu(QPoint p)
{
this->ContentListContextMenu->exec(QCursor::pos());
}
void OCCTShapeModelNode::ShowOrHide()
{
qDebug() << u8"切换显示 \n";
if (this->isChecked()) { // 当前显示
qDebug() << u8"True \n";
this->HideShape();
}
else {
qDebug() << u8"false \n";
this->ShowShape();
}
}
void OCCTShapeModelNode::oncheckBoxStateChanged(int state) {
OCCTShapeModelNode* senderCheckBox = qobject_cast<OCCTShapeModelNode*>(sender());
if (senderCheckBox) {
// 根据状态变化的 QCheckBox 显示相应的消息
QString message = QString("%1 state changed to %2").arg(senderCheckBox->text()).arg(state == Qt::Checked ? "Checked" : "Unchecked");
qDebug() << "Checkbox State Changed\n";
qDebug() << message;
if (state == Qt::Checked) {
this->ShowShape();
}
else {
this->HideShape();
}
}
}
// =====================================================================
// DataShowNode
//
// =====================================================================
// =====================================================================
// ComplexDataShowNode
//
// =====================================================================
ComplexDataShowNode::ComplexDataShowNode(QWidget* parent) :TaskNode(parent)
{
this->m = nullptr;
this->datapath = QString();
this->setName("NOData");
QAction* action_Load_dB_Image = this->ContentListContextMenu->addAction(u8"加载dB");
QAction* action_Load_amp_Image = this->ContentListContextMenu->addAction(u8"加载振幅");
QAction* action_Load_real_Image = this->ContentListContextMenu->addAction(u8"加载实部");
QAction* action_Load_imag_Image = this->ContentListContextMenu->addAction(u8"加载虚部");
QAction* action_Load_pha_Image = this->ContentListContextMenu->addAction(u8"加载相位");
QObject::connect(action_Load_dB_Image, SIGNAL(triggered()), this, SLOT(Load_dB_Image()));
QObject::connect(action_Load_amp_Image, SIGNAL(triggered()), this, SLOT(Load_amp_Image()));
QObject::connect(action_Load_real_Image, SIGNAL(triggered()), this, SLOT(Load_real_Image()));
QObject::connect(action_Load_imag_Image, SIGNAL(triggered()), this, SLOT(Load_imag_Image()));
QObject::connect(action_Load_pha_Image, SIGNAL(triggered()), this, SLOT(Load_pha_Image()));
}
void ComplexDataShowNode::bangdindWindows(QMainWindow* m)
{
this->m = m;
}
ComplexDataShowNode::~ComplexDataShowNode()
{
}
void ComplexDataShowNode::loadData()
{
QFileInfo fileinfo(this->TaskXmlPath);
if (fileinfo.exists()) {
//this->echo = readMatrixXcd2ENVI_CFloat64(this->TaskXmlPath);
}
else {}
}
void ComplexDataShowNode::OpenData(QString TaskXmlPath)
{
this->TaskXmlPath = TaskXmlPath;
QFileInfo fileinfo(this->TaskXmlPath);
if (fileinfo.exists()) {
if (fileinfo.makeAbsolute()) {
this->datapath = fileinfo.filePath();
}
else {
this->datapath = TaskXmlPath;
}
this->setName(fileinfo.fileName());
}
else {}
}
int ComplexDataShowNode::ExcuteTask()
{
this->status = TaskStatusEnum::excuting;
this->Load_amp_Image();
return 0;
}
void ComplexDataShowNode::Load_amp_Image()
{
ImageShowDialogClass* DataShowDockWidget = new ImageShowDialogClass(this);
gdalImageComplex img(this->TaskXmlPath);
Eigen::MatrixXcd im_final = img.getDataComplex(0, 0, img.height, img.width, 1);
Eigen::MatrixXd gt = img.getGeoTranslation();
Eigen::MatrixXd Y(img.height, 1);
Eigen::MatrixXd X(1, img.width);
for (int i = 0; i < img.height; i++) {
Y(i, 0) = gt(1, 0) + gt(1, 1) * 0 - gt(1, 2) * i;
}
for (int i = 0; i < img.width; i++) {
X(i, 0) = gt(0, 0) + gt(0, 1) * i - gt(0, 2) * 0;
}
Eigen::MatrixXd im_amp = Complex2Amplitude(im_final);
DataShowDockWidget->load_double_MatrixX_data(X, Y, im_amp, this->getName());
DataShowDockWidget->show();
}
void ComplexDataShowNode::Load_pha_Image()
{
ImageShowDialogClass* DataShowDockWidget = new ImageShowDialogClass(this);
gdalImageComplex img(this->TaskXmlPath);
Eigen::MatrixXcd im_final = img.getDataComplex(0, 0, img.height, img.width, 1);
Eigen::MatrixXd gt = img.getGeoTranslation();
Eigen::MatrixXd Y(img.height, 1);
Eigen::MatrixXd X(1, img.width);
for (int i = 0; i < img.height; i++) {
Y(i, 0) = gt(1, 0) + gt(1, 1) * 0 + gt(1, 2) * i;
}
for (int i = 0; i < img.width; i++) {
X(i, 0) = gt(0, 0) + gt(0, 1) * i + gt(0, 2) * 0;
}
Eigen::MatrixXd im_pha = Complex2phase(im_final);
DataShowDockWidget->load_double_MatrixX_data(X, Y, im_pha, this->getName());
DataShowDockWidget->show();
}
void ComplexDataShowNode::Load_real_Image()
{
ImageShowDialogClass* DataShowDockWidget = new ImageShowDialogClass(this);
gdalImageComplex img(this->TaskXmlPath);
Eigen::MatrixXcd im_final = img.getDataComplex(0, 0, img.height, img.width, 1);
Eigen::MatrixXd gt = img.getGeoTranslation();
Eigen::MatrixXd Y(img.height, 1);
Eigen::MatrixXd X(1, img.width);
for (int i = 0; i < img.height; i++) {
Y(i, 0) = gt(1, 0) + gt(1, 1) * 0 + gt(1, 2) * i;
}
for (int i = 0; i < img.width; i++) {
X(i, 0) = gt(0, 0) + gt(0, 1) * i + gt(0, 2) * 0;
}
Eigen::MatrixXd im_amp = im_final.array().real();
DataShowDockWidget->load_double_MatrixX_data(X, Y, im_amp, this->getName());
DataShowDockWidget->show();
}
void ComplexDataShowNode::Load_imag_Image()
{
ImageShowDialogClass* DataShowDockWidget = new ImageShowDialogClass(this);
gdalImageComplex img(this->TaskXmlPath);
Eigen::MatrixXcd im_final = img.getDataComplex(0, 0, img.height, img.width, 1);
Eigen::MatrixXd gt = img.getGeoTranslation();
Eigen::MatrixXd Y(img.height, 1);
Eigen::MatrixXd X(1, img.width);
for (int i = 0; i < img.height; i++) {
Y(i, 0) = gt(1, 0) + gt(1, 1) * 0 + gt(1, 2) * i;
}
for (int i = 0; i < img.width; i++) {
X(i, 0) = gt(0, 0) + gt(0, 1) * i + gt(0, 2) * 0;
}
Eigen::MatrixXd im_amp = im_final.array().imag();
DataShowDockWidget->load_double_MatrixX_data(X, Y, im_amp, this->getName());
DataShowDockWidget->show();
}
void ComplexDataShowNode::Load_dB_Image()
{
ImageShowDialogClass* DataShowDockWidget = new ImageShowDialogClass(this);
gdalImageComplex img(this->TaskXmlPath);
Eigen::MatrixXcd im_final = img.getDataComplex(0, 0, img.height, img.width, 1);
Eigen::MatrixXd gt = img.getGeoTranslation();
Eigen::MatrixXd Y(img.height, 1);
Eigen::MatrixXd X(1, img.width);
for (int i = 0; i < img.height; i++) {
Y(i, 0) = gt(1, 0) + gt(1, 1) * 0 + gt(1, 2) * i;
}
for (int i = 0; i < img.width; i++) {
X(i, 0) = gt(0, 0) + gt(0, 1) * i + gt(0, 2) * 0;
}
Eigen::MatrixXd im_dB = Complex2dB(im_final);
DataShowDockWidget->load_double_MatrixX_data(X, Y, im_dB, this->getName());
DataShowDockWidget->show();
}
DataShowNode::DataShowNode(QWidget* parent) :TaskNode(parent)
{
this->m = nullptr;
this->datapath = QString();
this->setName("NOData");
QAction* action_Load_Image = this->ContentListContextMenu->addAction(u8"加载图像");
QObject::connect(action_Load_Image, SIGNAL(triggered()), this, SLOT(Load_Image()));
}
void DataShowNode::Load_Image()
{
this->loadData();
}
DataShowNode::~DataShowNode()
{
}
void DataShowNode::bangdindWindows(QMainWindow* m)
{
}
void DataShowNode::loadData()
{
QFileInfo fileinfo(this->datapath);
if (fileinfo.exists()) {
gdalImage img(this->datapath);
Eigen::MatrixXd im_final = img.getData(0, 0, img.height, img.width, 1);
Eigen::MatrixXd gt = img.getGeoTranslation();
Eigen::MatrixXd Y(img.height, 1);
Eigen::MatrixXd X(1, img.width);
for (int i = 0; i < img.height; i++) {
Y(i, 0) = gt(1, 0) + gt(1, 1) * 0 + gt(1, 2) * i;
}
for (int i = 0; i < img.width; i++) {
X(i, 0) = gt(0, 0) + gt(0, 1) * i + gt(0, 2) * 0;
}
DataShowDockWidget->load_double_MatrixX_data(X, Y, im_final, this->getName());
DataShowDockWidget->show();
}
}
void DataShowNode::OpenData(QString TaskXmlPath)
{
this->TaskXmlPath = TaskXmlPath;
QFileInfo fileinfo(this->TaskXmlPath);
if (fileinfo.exists()) {
if (fileinfo.makeAbsolute()) {
this->datapath = fileinfo.filePath();
}
else {
this->datapath = TaskXmlPath;
}
this->setName(fileinfo.fileName());
}
else {}
}
int DataShowNode::ExcuteTask()
{
this->status = TaskStatusEnum::excuting;
this->loadData();
return 0;
}
// =====================================================================
// FEKOResultImportTaskNode
//
// =====================================================================
FEKOResultImportTaskNode::FEKOResultImportTaskNode()
{
}
FEKOResultImportTaskNode::~FEKOResultImportTaskNode()
{
if (nullptr != this->TaskWindows) {
this->TaskWindows->close();
delete this->TaskWindows;
this->TaskWindows = nullptr;
}
}
int FEKOResultImportTaskNode::ExcuteTask()
{
this->status = TaskStatusEnum::excuting;
this->TaskWindows = new FEKOResultImport();
this->TaskWindows->setAttribute(Qt::WA_DeleteOnClose); // 关闭时自动释放
//this->TaskWindows->setWindowModality(Qt::WindowModal);
QObject::connect((this->TaskWindows), SIGNAL(callbackFekoResultImport(FEKOResultImport*)), this, SLOT(getExcuteTaskResult(FEKOResultImport*)));
// 更新参数
this->TaskWindows->setFEKOPreProjectFolderPath(this->FolderPath);
this->TaskWindows->setNearFieldNames(this->nearFieldNames);
this->TaskWindows->setFarFieldNames(this->farFieldNames);
this->TaskWindows->setSelectFieldNames(this->selectFieldNames, this->nearField);
this->TaskWindows->setFEKOResultCSVPath(this->outPath);
this->TaskWindows->setFEKOPreFileName(this->prename);
this->TaskWindows->initView();
this->TaskWindows->show(); // 展示图像
//FEKOImportWindows->close();
//delete FEKOImportWindows;
return 0;
}
int FEKOResultImportTaskNode::loadXmlFile(QString xmlFilePath)
{
this->TaskXmlPath = xmlFilePath;
if (isExists(xmlFilePath)) {
QDomDocument doc;
this->loadXmlDocument(this->TaskXmlPath, doc);
// 解析xml文件
QDomElement root = doc.documentElement();
// 采用DSF
QDomNodeList rootchild = root.childNodes();
for (int i = 0; i < rootchild.length(); i++) {
QDomNode tempnode = rootchild.at(i);
if (strcmp(tempnode.nodeName().toUtf8().constData(), "TaskName") == 0) {
this->setName(tempnode.firstChild().nodeValue());
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "Description") == 0) {
this->description = tempnode.firstChild().nodeValue();
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "TaskStatus") == 0) {
QString temptext = tempnode.firstChild().nodeValue();
if (strcmp(temptext.toUtf8().constData(), "wait") == 0) {
this->status = TaskStatusEnum::wait;
}
else if (strcmp(temptext.toUtf8().constData(), "success") == 0) {
this->status = TaskStatusEnum::success;
}
else if (strcmp(temptext.toUtf8().constData(), "fail") == 0) {
this->status = TaskStatusEnum::fail;
}
else {}
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "preName") == 0) {
this->prename = tempnode.firstChild().nodeValue().toUtf8().constData();
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "FEKOProjectFolderPath") == 0) {
this->FolderPath = tempnode.firstChild().nodeValue().toUtf8().constData();
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "NearField") == 0) {
QString temptext = tempnode.firstChild().nodeValue().toUpper().toUtf8().constData();
if (strcmp(temptext.toUtf8().constData(), "FALSE") == 0) {
this->nearField = false;
}
else if (strcmp(temptext.toUtf8().constData(), "TRUE") == 0) {
this->nearField = true;
}
else {
this->nearField = false;
}
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "FarField") == 0) {
QString temptext = tempnode.firstChild().nodeValue().toUpper().toUtf8().constData();
if (strcmp(temptext.toUtf8().constData(), "FALSE") == 0) {
this->farField = false;
}
else if (strcmp(temptext.toUtf8().constData(), "TRUE") == 0) {
this->farField = true;
}
else {
this->farField = false;
}
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "OutPath") == 0) {
this->outPath = tempnode.firstChild().nodeValue().toUtf8().constData();
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "NearFieldNodeList") == 0) {
QDomNodeList tempnodechild = tempnode.childNodes();
this->nearFieldNames = std::vector<QString>(0);
for (int ii = 0; ii < tempnodechild.count(); ii++) {
QDomNode tempnode = tempnodechild.at(ii);
this->nearFieldNames.push_back(tempnode.firstChild().nodeValue().toUtf8().constData());
}
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "FarFieldNodeList") == 0) {
QDomNodeList tempnodechild = tempnode.childNodes();
this->farFieldNames = std::vector<QString>(0);
for (int ii = 0; ii < tempnodechild.count(); ii++) {
QDomNode tempnode = tempnodechild.at(ii);
this->farFieldNames.push_back(tempnode.firstChild().nodeValue().toUtf8().constData());
}
}
else if (strcmp(tempnode.nodeName().toUtf8().constData(), "SelectNodeList") == 0) {
QDomNodeList tempnodechild = tempnode.childNodes();
this->selectFieldNames = std::vector<QString>(0);
for (int ii = 0; ii < tempnodechild.count(); ii++) {
QDomNode tempnode = tempnodechild.at(ii);
this->selectFieldNames.push_back(tempnode.firstChild().nodeValue().toUtf8().constData());
}
}
}
if (this->nearField || this->farField) {
// 保存结果
return -1;
}
else {
QMessageBox::warning(this, u8"错误", u8"request Field 错误");
return 1;
}
}
else {
this->TaskXmlPath = xmlFilePath;
this->selectFieldNames = std::vector<QString>(0);
this->farFieldNames = std::vector<QString>(0);
this->nearFieldNames = std::vector<QString>(0);
return 0;
}
return 0;
}
/// <summary>
/// 输出FEKOResult导入任务
/// </summary>
/// <returns></returns>
int FEKOResultImportTaskNode::saveXmlFile()
{
if (isExists(this->TaskXmlPath)) {
removeFile(this->TaskXmlPath);
}
else {}
QDomDocument doc; // 创建 任务输出xml
QDomProcessingInstruction instruction;// 创建XML处理类通常用于处理第一行描述信息
instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");// 创建XML头部格式
doc.appendChild(instruction);// 添加到XML文件中
QDomElement root = doc.createElement("FEKOResultImportTaskNode"); // 创建根节点
doc.appendChild(root);
QDomElement TaskNameNode = doc.createElement("TaskName"); // 任务名称
TaskNameNode.appendChild(doc.createTextNode(this->getName()));
root.appendChild(TaskNameNode);
QDomElement DescripNode = doc.createElement("Description"); // 描述
DescripNode.appendChild(doc.createTextNode(this->description));
root.appendChild(DescripNode);
QDomElement TaskStatusNode = doc.createElement("TaskStatus"); // 执行状态
if (this->status == TaskStatusEnum::wait) {
TaskStatusNode.appendChild(doc.createTextNode("wait"));
}
else if (this->status == TaskStatusEnum::success) {
TaskStatusNode.appendChild(doc.createTextNode("success"));
}
else if (this->status == TaskStatusEnum::fail) {
TaskStatusNode.appendChild(doc.createTextNode("fail"));
}
else {}
root.appendChild(TaskStatusNode);
QDomElement preNameNode = doc.createElement("preName"); // 导入文件工程 .pre 文件名
preNameNode.appendChild(doc.createTextNode(this->prename));
root.appendChild(preNameNode);
QDomElement FEKOProjectFolderPathNode = doc.createElement("FEKOProjectFolderPath"); // 导入文件工程 folder 文件名
FEKOProjectFolderPathNode.appendChild(doc.createTextNode(this->FolderPath));
root.appendChild(FEKOProjectFolderPathNode);
QDomElement NearFieldNode = doc.createElement("NearField"); // 是否是近场文件
NearFieldNode.appendChild(doc.createTextNode(this->nearField ? "True" : "False"));
root.appendChild(NearFieldNode);
QDomElement FarFieldNode = doc.createElement("FarField"); // 是否是远场文件
FarFieldNode.appendChild(doc.createTextNode(this->farField ? "True" : "False"));
root.appendChild(FarFieldNode);
QDomElement outPathNode = doc.createElement("OutPath"); // 包含输出文件
outPathNode.appendChild(doc.createTextNode(this->outPath));
root.appendChild(outPathNode);
QDomElement NearFieldListNode = doc.createElement("NearFieldNodeList"); // 近场数据列表性输出
for (int i = 0; i < this->nearFieldNames.size(); i++) {
QDomElement NearFieldMetaNode = doc.createElement("FileNode");
NearFieldMetaNode.appendChild(doc.createTextNode(this->nearFieldNames[i]));
NearFieldListNode.appendChild(NearFieldMetaNode);
}
root.appendChild(NearFieldListNode);
QDomElement FarFieldListNode = doc.createElement("FarFieldNodeList"); // 近场数据列表性输出
for (int i = 0; i < this->farFieldNames.size(); i++) {
QDomElement FarFieldMetaNode = doc.createElement("FileNode");
FarFieldMetaNode.appendChild(doc.createTextNode(this->farFieldNames[i]));
FarFieldListNode.appendChild(FarFieldMetaNode);
}
root.appendChild(FarFieldListNode);
QDomElement SelectNodeListNode = doc.createElement("SelectNodeList"); // 生成所选择数据列表
for (int i = 0; i < this->selectFieldNames.size(); i++) {
QDomElement SelectMetaNode = doc.createElement("FileNode");
SelectMetaNode.appendChild(doc.createTextNode(this->selectFieldNames[i]));
SelectNodeListNode.appendChild(SelectMetaNode);
}
root.appendChild(SelectNodeListNode);
this->writeXmlDocument(doc);
return 0;
}
int FEKOResultImportTaskNode::FinishTask()
{
this->status = TaskStatusEnum::finish;
return 0;
}
void FEKOResultImportTaskNode::getExcuteTaskResult(FEKOResultImport* obj)
{
// 更新状态
this->status = obj->getSaveSucessfully() ? TaskStatusEnum::success : TaskStatusEnum::fail;
this->nearField = obj->getNearChecked();
this->farField = obj->getFarChecked();
this->nearFieldNames = obj->getNearFieldNames();
this->farFieldNames = obj->getFarFieldNames();
this->prename = obj->getFEKOPreFileName();
this->selectFieldNames = obj->getSelectFieldNames();
this->outPath = obj->getFEKOResultCSVPath();
this->FolderPath = obj->getFEKOPreProjectFolderPath();
this->saveXmlFile();
QMessageBox::information(nullptr, u8"正在打开FEKO结果文件", this->outPath);
// 打开tableview界面进行确认修改
EchoTableEditWindow* tablewindow = new EchoTableEditWindow(this); // 打开回波编辑页面
tablewindow->setCheckFieldContextHasEmptyCeilLOCK(true);
tablewindow->setAttribute(Qt::WA_DeleteOnClose);// 关闭时自动释放
tablewindow->show();
tablewindow->setWindowTitle(u8"正在打开文件");
//FEKOResultCsvTableModel* tablemode = new FEKOResultCsvTableModel();
std::shared_ptr< FEKOResultCsvTableModel> tablemode = std::make_shared< FEKOResultCsvTableModel>();
tablemode->loadCSVFilePath((this->outPath));
tablewindow->loadTablemode(tablemode);
tablewindow->setTableViewAutoSort(true);
tablewindow->LockFileOpen();
QFileInfo fileInfo((this->outPath));
QString titletext = QString::QString(u8"正在编辑 ") + fileInfo.fileName();
tablewindow->setWindowTitle(titletext);
tablewindow->show();
}
// =====================================================================
// FEKOImageSettingTaskNodeClass
//
// =====================================================================
FEKOImageSettingTaskNodeClass::FEKOImageSettingTaskNodeClass()
{
this->simulationparams = new FEKOBase::FEKOSimulationDataparams;//std::make_shared<FEKOBase::FEKOSimulationDataparams>(); // 创建虚拟指针
DebugInfo(" FEKOImageSettingFun has init simulationparams init \n");
this->TaskWindows = new QtSARAntModelSettingClass();
DebugInfo(" FEKOImageSettingFun has init TaskWindows init \n");
}
FEKOImageSettingTaskNodeClass::~FEKOImageSettingTaskNodeClass()
{
}
int FEKOImageSettingTaskNodeClass::ExcuteTask()
{
this->status = TaskStatusEnum::excuting;
this->TaskWindows->show();
return 0;
}
int FEKOImageSettingTaskNodeClass::FinishTask()
{
this->status = TaskStatusEnum::finish;
if (this->TaskWindows) {
this->TaskWindows->saveFEKOImageSettingXML();
this->TaskWindows->close();
}
return 0;
}
int FEKOImageSettingTaskNodeClass::loadXmlFile(QString xmlFilePath)
{
this->TaskWindows->setFEKOSimulationDataparams(this->simulationparams);
this->TaskWindows->loadFEKOImageSettingXML(xmlFilePath);
this->TaskWindows->ReferenceWindows();
return 0;
}
int FEKOImageSettingTaskNodeClass::saveXmlFile()
{
this->TaskWindows->saveFEKOImageSettingXML();
return 0;
}
QString FEKOImageSettingTaskNodeClass::getTaskName()
{
return this->simulationparams->taskName;
}
// =====================================================================
// FEKOScatterSettingTaskNodeClass
//
// =====================================================================
FEKOScatterSettingTaskNodeClass::FEKOScatterSettingTaskNodeClass()
{
this->TaskWindows = new LAMP_ScatterSettingClass();
}
FEKOScatterSettingTaskNodeClass::~FEKOScatterSettingTaskNodeClass()
{
}
int FEKOScatterSettingTaskNodeClass::ExcuteTask()
{
this->status = TaskStatusEnum::excuting;
this->TaskWindows->show();
return 0;
}
int FEKOScatterSettingTaskNodeClass::loadXmlFile(QString xmlFilePath)
{
QFile file(xmlFilePath);
if (file.exists()) {
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::warning(nullptr, u8"警告", u8"新建文件");
return 0;
}
else {
this->TaskWindows->loadxml(xmlFilePath);
return 0;
}
}
else {
bool ok;
QString newName = QInputDialog::getText(nullptr, u8"任务名称", u8"输入任务名:", QLineEdit::Normal, u8"TestTask", &ok);
if (newName.isEmpty()) {
newName = u8"TestTask";
}
else {
}
this->setName(newName);
this->TaskWindows->setTaskName(newName);
this->TaskWindows->setWorkSpacePath(xmlFilePath);
return 0;
}
}
int FEKOScatterSettingTaskNodeClass::saveXmlFile()
{
this->TaskWindows->savexml();
return 0;
}
QString FEKOScatterSettingTaskNodeClass::getTaskName()
{
return this->TaskWindows->settingobj->taskName;
}