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++

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 "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