/** * @file DialogPCLGuassFilter.cpp * @brief None * @author 陈增辉 (3045316072@qq.com) * @version 2.5.0 * @date 2024/4/5 * @copyright Copyright (c) Since 2024 中科卫星应用研究院 All rights reserved. */ // You may need to build the project (run Qt uic code generator) to get "ui_DialogPCLGuassFilter.h" // resolved #include "DialogPCLGuassFilter.h" #include "ui_DialogPCLGuassFilter.h" #include "PythonModule/PyAgent.h" #include "MeshData/meshSingleton.h" #include "MeshData/meshSet.h" #include #include //auto meshData = MeshData::MeshData::getInstance(); namespace MainWidget { DialogPCLGuassFilter::DialogPCLGuassFilter(GUI::MainWindow *parent) : QFDialog(parent), _ui(new Ui::DialogPCLGuassFilter), _mw(parent), _selectdlg(new DialogSelectComponents(parent)) { _ui->setupUi(this); _ui->geoSelectPoint->setToolTip(tr("Clicked Button Selected Components")); setWindowTitle(tr("Guass Filter")); _ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu); connect(_ui->geoSelectPoint, &QPushButton::clicked, [=]() { _selectdlg->clearSelectItems(); _selectdlg->exec(); }); connect(_selectdlg, SIGNAL(selectedComponentsSig(QList)), this, SLOT(selectedComponentsSlot(QList))); connect(_ui->listWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(customContextMenuRequestedSlot(const QPoint &))); } DialogPCLGuassFilter::~DialogPCLGuassFilter() { delete _ui; _ui = NULL; delete _selectdlg; _selectdlg = NULL; } void DialogPCLGuassFilter::accept() { if (_components.size() == 0) return; QString componentIds, rotate, moveLocation, scale; for (auto component : _components) componentIds.append(QString(",%1").arg(component->getID())); componentIds.remove(0, 1); double Sigma=_ui->Sigma->value(); double threshold=_ui->threshold->value(); emit excuteAlg( componentIds, Sigma, threshold); QString code = QString("MainWindow.createVTKTransform(\"%1\",\"%2\",\"%3\",\"%4\")").arg(componentIds).arg(rotate).arg(moveLocation).arg(scale); Py::PythonAgent::getInstance()->submit(code); QFDialog::accept(); } void DialogPCLGuassFilter::selectedComponentsSlot(QList components) { for (MeshData::MeshSet *set : components) { if (_components.contains(set)) continue; _components.append(set); _ui->listWidget->addItem(set->getName()); } } void DialogPCLGuassFilter::customContextMenuRequestedSlot(const QPoint &point) { QListWidgetItem *curItem = _ui->listWidget->itemAt(point); if (!curItem) return; QMenu *menu = new QMenu(this); QAction *deleteItem = new QAction(tr("delete this item")); menu->addAction(deleteItem); connect(menu, &QMenu::triggered, [=]() { removeCurrentItem(curItem); }); menu->exec(QCursor::pos()); } void DialogPCLGuassFilter::removeCurrentItem(QListWidgetItem *curItem) { auto meshData = MeshData::MeshData::getInstance(); auto meshSet = meshData->getMeshSetByName(curItem->text()); if (!meshSet) return; _components.removeOne(meshSet); _ui->listWidget->removeItemWidget(curItem); delete curItem; } } // namespace MainWidget