114 lines
3.3 KiB
C++
114 lines
3.3 KiB
C++
/**
|
|
* @file DialogPCLGPMesh.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_DialogPCLGPMesh.h"
|
|
// resolved
|
|
|
|
#include "DialogPCLGPMesh.h"
|
|
#include "ui_DialogPCLGPMesh.h"
|
|
|
|
#include "PythonModule/PyAgent.h"
|
|
#include "MeshData/meshSingleton.h"
|
|
#include "MeshData/meshSet.h"
|
|
#include <QMenu>
|
|
#include <QDebug>
|
|
|
|
|
|
//auto meshData = MeshData::MeshData::getInstance();
|
|
|
|
namespace MainWidget {
|
|
DialogPCLGPMesh::DialogPCLGPMesh(GUI::MainWindow *parent)
|
|
: QFDialog(parent),
|
|
_ui(new Ui::DialogPCLGPMesh),
|
|
_mw(parent),
|
|
_selectdlg(new DialogSelectComponents(parent))
|
|
{
|
|
_ui->setupUi(this);
|
|
_ui->geoSelectPoint->setToolTip(tr("Clicked Button Selected Components"));
|
|
setWindowTitle(tr("GP Meshing"));
|
|
_ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
|
|
|
|
|
|
connect(_ui->geoSelectPoint, &QPushButton::clicked, [=]()
|
|
{ _selectdlg->clearSelectItems(); _selectdlg->exec(); });
|
|
connect(_selectdlg, SIGNAL(selectedComponentsSig(QList<MeshData::MeshSet *>)), this, SLOT(selectedComponentsSlot(QList<MeshData::MeshSet *>)));
|
|
connect(_ui->listWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(customContextMenuRequestedSlot(const QPoint &)));
|
|
|
|
}
|
|
|
|
DialogPCLGPMesh::~DialogPCLGPMesh()
|
|
{
|
|
delete _ui;
|
|
_ui = NULL;
|
|
delete _selectdlg;
|
|
_selectdlg = NULL;
|
|
}
|
|
|
|
void DialogPCLGPMesh::accept()
|
|
{
|
|
if (_components.size() == 0)
|
|
return;
|
|
|
|
QString componentIds;
|
|
for (auto component : _components)
|
|
componentIds.append(QString(",%1").arg(component->getID()));
|
|
componentIds.remove(0, 1);
|
|
|
|
double SearchRadius=_ui->SearchRadius->value();
|
|
double Mu=_ui->Mu->value();
|
|
int MaximumNearestNeighbors=_ui->MaximumNearestNeighbors->value();
|
|
double MaximumSurfaceAngle=_ui->MaximumSurfaceAngle->value();
|
|
double MaximumAngle=_ui->MaximumAngle->value();
|
|
double MinimumAngle=_ui->MinimumAngle->value();
|
|
|
|
// excuteAlg( QString componentIds , double SearchRadius, double Mu,int MaximumNearestNeighbors,double MaximumSurfaceAngle,double MaximumAngle,double MinimumAngle);
|
|
emit excuteAlg( componentIds , SearchRadius, Mu, MaximumNearestNeighbors, MaximumSurfaceAngle, MaximumAngle, MinimumAngle);
|
|
|
|
QFDialog::accept();
|
|
}
|
|
|
|
void DialogPCLGPMesh::selectedComponentsSlot(QList<MeshData::MeshSet *> components)
|
|
{
|
|
for (MeshData::MeshSet *set : components)
|
|
{
|
|
if (_components.contains(set))
|
|
continue;
|
|
_components.append(set);
|
|
_ui->listWidget->addItem(set->getName());
|
|
}
|
|
}
|
|
|
|
void DialogPCLGPMesh::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 DialogPCLGPMesh::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
|