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/OperatorsGUI/OperGraphPreprocess.cpp

339 lines
9.5 KiB
C++

#include "OperGraphPreprocess.h"
// APP
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppSettings.h"
// Global data
#include "FITK_Kernel/FITKCore/FITKDataRepo.h"
// Graph widget and object
#include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowVTK.h"
#include "FITK_Component/FITKFluidVTKGraphAdaptor/FITKFluidVTKGraphObject3D.h"
// Graph data manager
#include "GraphDataProvider/GraphProviderManager.h"
#include "GraphDataProvider/GraphModelProvider.h"
#include "GraphDataProvider/GraphMarkProvider.h"
// GUI
#include "GUIFrame/MainTreeWidget.h"
namespace GUIOper
{
void OperGraphPreprocess::updateGraph(int dataObjId, bool forceUpdate)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 获取或创建可视化对象。
QList<Exchange::FITKFluidVTKGraphObject3D*> objs = getGraphObjectsByDataId(dataObjId);
// 添加至三维窗口。
for (Exchange::FITKFluidVTKGraphObject3D* obj : objs)
{
if (!obj)
{
continue;
}
obj->update(forceUpdate);
addGraphObjectToWidget(obj, graphWidget, false);
}
}
void OperGraphPreprocess::updateGraphByType(int type, GraphOperParam param)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 获取符号可视化对象管理器。
GraphData::GraphMarkProvider* markProvider = GraphData::GraphProviderManager::getInstance()->getMarkProvider(graphWidget);
if (!markProvider)
{
return;
}
// 获取或创建可视化对象。type数值与树形节点类型枚举对应。
Exchange::FITKFluidVTKGraphObject3D* obj = markProvider->getGraphObjectByType(type);
if (!obj)
{
return;
}
// 首先添加至三维窗口。
addGraphObjectToWidget(obj, graphWidget, false);
// 刷新数据。
obj->update(param.ForceUpdate);
// 高亮/取消高亮。
switch (param.HighlightMode)
{
case HighlightLevel::DisHighlight:
{
obj->disHighlight();
break;
}
case HighlightLevel::Highlight:
{
obj->highlight();
break;
}
case HighlightLevel::AdvHighlight:
{
obj->advanceHighlight(Exchange::FITKFluidVTKCommons::ShapeType::ShapeTypeNone, param.AdvHighlightIndice);
break;
}
default:
break;
}
// 隐藏或显示。
obj->setVisible(param.Visibility);
// 刷新窗口。
graphWidget->reRender();
}
Exchange::FITKFluidVTKGraphObject3D* OperGraphPreprocess::getModelGraphObjectByDataId(int dataObjId)
{
// 可视化对象。
Exchange::FITKFluidVTKGraphObject3D* obj{ nullptr };
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return obj;
}
// 获取模型/网格可视化对象管理器。
GraphData::GraphModelProvider* modelProvider = GraphData::GraphProviderManager::getInstance()->getModelProvider(graphWidget);
if (!modelProvider)
{
return obj;
}
obj = modelProvider->getCurrentGraphObjByDataId(dataObjId);
return obj;
}
void OperGraphPreprocess::setEnableModelTransparent(bool flag)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 获取模型/网格可视化对象管理器。
GraphData::GraphModelProvider* modelProvider = GraphData::GraphProviderManager::getInstance()->getModelProvider(graphWidget);
if (!modelProvider)
{
return;
}
// 启用或关闭半透明。
QList<Exchange::FITKFluidVTKGraphObject3D*> objs = modelProvider->getAllModelGraphObjects();
for (Exchange::FITKFluidVTKGraphObject3D* obj : objs)
{
if (obj)
{
obj->setTransparent(flag);
}
}
// 刷新窗口。
graphWidget->reRender();
}
void OperGraphPreprocess::setEnableMeshTransparent(bool flag)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 获取模型/网格可视化对象管理器。
GraphData::GraphModelProvider* modelProvider = GraphData::GraphProviderManager::getInstance()->getModelProvider(graphWidget);
if (!modelProvider)
{
return;
}
// 启用或关闭半透明。
QList<Exchange::FITKFluidVTKGraphObject3D*> objs = modelProvider->getAllMeshGraphObjects();
for (Exchange::FITKFluidVTKGraphObject3D* obj : objs)
{
if (obj)
{
obj->setTransparent(flag);
}
}
// 刷新窗口。
graphWidget->reRender();
}
void OperGraphPreprocess::setModelVisible(int dataObjId, bool visibility)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 获取模型/网格可视化对象管理器。
GraphData::GraphModelProvider* modelProvider = GraphData::GraphProviderManager::getInstance()->getModelProvider(graphWidget);
if (!modelProvider)
{
return;
}
Exchange::FITKFluidVTKGraphObject3D* obj = modelProvider->getModelGraphObject(dataObjId);
if (obj)
{
obj->setVisible(visibility);
}
// 刷新窗口。
graphWidget->reRender();
}
void OperGraphPreprocess::setMeshVisible(int dataObjId, bool visibility)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 获取模型/网格可视化对象管理器。
GraphData::GraphModelProvider* modelProvider = GraphData::GraphProviderManager::getInstance()->getModelProvider(graphWidget);
if (!modelProvider)
{
return;
}
Exchange::FITKFluidVTKGraphObject3D* obj = modelProvider->getBoundMeshGraphObject(dataObjId);
if (obj)
{
obj->setVisible(visibility);
}
// 刷新窗口。
graphWidget->reRender();
}
void OperGraphPreprocess::highlight(int dataObjId, QVariant info, QColor color)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 全部高亮。
QList<Exchange::FITKFluidVTKGraphObject3D*> objs = getGraphObjectsByDataId(dataObjId);
for (Exchange::FITKFluidVTKGraphObject3D* obj : objs)
{
if (!obj)
{
continue;
}
obj->highlight(Exchange::FITKFluidVTKCommons::ShapeType::ShapeTypeNone, color);
}
// 刷新窗口。
graphWidget->reRender();
}
void OperGraphPreprocess::advHighlight(int dataObjId, QVector<int> & indice, QColor color)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 全部高级高亮。
QList<Exchange::FITKFluidVTKGraphObject3D*> objs = getGraphObjectsByDataId(dataObjId);
for (Exchange::FITKFluidVTKGraphObject3D* obj : objs)
{
if (!obj)
{
continue;
}
obj->advanceHighlight(Exchange::FITKFluidVTKCommons::ShapeType::ShapeTypeNone, indice, color);
}
// 刷新窗口。
graphWidget->reRender();
}
void OperGraphPreprocess::clearHighlight()
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
// 获取模型/网格与符号可视化对象管理器,并清除高亮。
GraphData::GraphModelProvider* modelProvider = GraphData::GraphProviderManager::getInstance()->getModelProvider(graphWidget);
if (modelProvider)
{
modelProvider->clearHighlight();
}
GraphData::GraphMarkProvider* markProvider = GraphData::GraphProviderManager::getInstance()->getMarkProvider(graphWidget);
if (markProvider)
{
markProvider->clearHighlight();
}
// 刷新窗口。
graphWidget->reRender();
}
void OperGraphPreprocess::reRender(bool fitView)
{
// 获取可视化窗口。
Comp::FITKGraph3DWindowVTK* graphWidget = getGraphWidget();
if (!graphWidget)
{
return;
}
if (fitView)
{
graphWidget->fitView();
}
else
{
graphWidget->reRender();
}
}
} // namespace GUIOper