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.
AppFlow/GUIDialog/GUIMeshDialog/LocalSelectGroupWidget.cpp

129 lines
5.2 KiB
C++

#include "LocalSelectGroupWidget.h"
#include "ui_LocalSelectGroupWidget.h"
#include "GUIFrame/MainWindow.h"
#include "GUIFrame/PropertyWidget.h"
#include "OperatorsInterface/ParaWidgetInterfaceOperator.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKGeoModelManager.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoCommand.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoShapeAgent.h"
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFGeometryData.h"
#include "FITK_Interface/FITKInterfaceMeshGen/FITKMeshGenInterface.h"
#include "FITK_Interface/FITKInterfaceMeshGen/FITKAbstractGeometryMeshSizeGenerator.h"
#include "FITK_Interface/FITKInterfaceMeshGen/FITKGeometryMeshSize.h"
#define LocalGeoId Qt::UserRole
#define LocalGroId Qt::UserRole + 1
namespace GUI
{
LocalSelectGroupWidget::LocalSelectGroupWidget(EventOper::ParaWidgetInterfaceOperator* oper) :
GUIWidgetBase(dynamic_cast<MainWindow*>(FITKAPP->getGlobalData()->getMainWindow())),
_oper(oper)
{
_ui = new Ui::LocalSelectGroupWidget();
_ui->setupUi(this);
_ui->tableWidget->setRowCount(0);
_ui->tableWidget->setColumnCount(1);
//自适应
_ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//隐藏行表头
_ui->tableWidget->verticalHeader()->setVisible(false);
//隐藏列表头
_ui->tableWidget->horizontalHeader()->setVisible(false);
//设置不可编辑
_ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
init();
}
LocalSelectGroupWidget::~LocalSelectGroupWidget()
{
if (_ui)delete _ui;
}
void LocalSelectGroupWidget::init()
{
updateTableWidget();
}
void LocalSelectGroupWidget::updateTableWidget()
{
Interface::FITKMeshGenInterface* genInterface = Interface::FITKMeshGenInterface::getInstance();
Interface::FITKGeometryMeshSizeManager* manger = genInterface->getGeometryMeshSizeManager();
if (manger == nullptr)return;
Interface::FITKGeoCommandList* geometryData = FITKAPP->getGlobalData()->getGeometryData<Interface::FITKGeoCommandList>();
if (geometryData == nullptr) return;
_ui->tableWidget->clear();
_ui->tableWidget->setRowCount(0);
int currentRow = 0;
//数据是否存在在管理器中局部函数
auto isInclude = [&](int id)->bool {
for (int i = 0; i < manger->getDataCount(); i++) {
auto obj = manger->getDataByIndex(i);
if (obj == nullptr)continue;
if (obj->getGeoGroupComponentId() == id)return true;
}
return false;
};
for (int i = 0; i < geometryData->getDataCount(); i++) {
auto geometryObj = geometryData->getDataByIndex(i);
if (geometryObj == nullptr)continue;
if (geometryObj->getShapeAgent() == nullptr)continue;
Interface::FITKGeoComponentManager* compManager = geometryObj->getShapeAgent()->getGeoComponentManager();
if (compManager == nullptr)continue;
QString geoName = geometryObj->getDataObjectName();
for (int j = 0; j < compManager->getDataCount(); j++) {
Interface::FITKGeoComponent* geoCom = compManager->getDataByIndex(j);
if (geoCom == nullptr)continue;
//判断数据是否在管理器中存在
if (isInclude(geoCom->getDataObjectID()))continue;
//不存在添加到选项列表中
QString comName = geoCom->getDataObjectName();
QTableWidgetItem* item = new QTableWidgetItem(geoName + "." + comName);
item->setData(LocalGeoId, geometryObj->getDataObjectID());
item->setData(LocalGroId, geoCom->getDataObjectID());
_ui->tableWidget->insertRow(currentRow);
_ui->tableWidget->setItem(currentRow, 0, item);
currentRow++;
}
}
}
void LocalSelectGroupWidget::on_pushButton_Add_clicked()
{
QList<QTableWidgetItem*> items = _ui->tableWidget->selectedItems();
for (QTableWidgetItem* item : items) {
if (item == nullptr)return;
Interface::FITKMeshGenInterface* genInterface = Interface::FITKMeshGenInterface::getInstance();
Interface::FITKAbstractGeometryMeshSizeGenerator* generator = genInterface->getGeometryMeshSizeGenerator();
if (generator == nullptr)return;
Interface::FITKGeometryMeshSizeManager* manger = genInterface->getGeometryMeshSizeManager();
if (manger == nullptr)return;
//创建几何划分网格尺寸类
Interface::FITKGeometryMeshSize* meshSize = generator->createGeometryMeshSize();
meshSize->setGeoGroupComponentId(item->data(LocalGroId).toInt());
meshSize->setDataObjectName(item->text());
//添加至管理器中
manger->appendDataObj(meshSize);
}
if (_oper) {
_oper->execProfession();
updateTableWidget();
}
}
}