#include "OperGraphPick.h" #include "GUIWidget/PickedData.h" #include "PostGraphAdaptor/PostGraphObjectPick.h" // App #include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h" #include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h" // Render #include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowVTK.h" #include "FITK_Component/FITKRenderWindowVTK/FITKGraphRender.h" #include "FITK_Component/FITKRenderWindowVTK/FITKGraphObjectVTK.h" // Pick data provider #include "GUIWidget/PickedDataProvider.h" // GUI #include "GUIFrame/MainWindow.h" #include "GUIFrame/RenderWidget.h" #include "FITK_Component/FITKWidget/FITKMdiArea.h" #include "GUIWidget/GUIPickInfo.h" namespace GUIOper { OperGraphPick::OperGraphPick() { // 初始化拾取数据管理器。 m_pickedProvider = GraphData::PickedDataProvider::getInstance(); } OperGraphPick::~OperGraphPick() { } void OperGraphPick::picked(Comp::FITKGraph3DWindowVTK* graphWindow, vtkActor* actor, int index, double* pickedWorldPos) { if (!graphWindow || !actor)return; GUI::GUIPickInfo::PickObjType pickType = GUI::GUIPickInfo::GetPickInfo()._pickObjType; m_pickedProvider->addPicked(actor, index, pickedWorldPos); Interface::PostGraphObjectPick* graphObjPick = m_pickedProvider->getPickDatas()->getGraphPickObject(); if (m_pickedProvider == nullptr)return; graphObjPick->setColor(QColor(255, 0, 0)); graphObjPick->update(); // 设置演员样式。 //@{ switch (pickType) { case GUI::GUIPickInfo::POBJVert: graphObjPick->setPickedType(1); break; case GUI::GUIPickInfo::POBJEdge: graphObjPick->setPickedType(2); break; case GUI::GUIPickInfo::POBJFace: case GUI::GUIPickInfo::POBJSolid: graphObjPick->setPickedType(3); break; default: graphObjPick->setVisible(false); return; } //@} // 添加到渲染窗口。 graphObjPick->setVisible(true); addGraphObjectToWidget(graphObjPick, graphWindow); // 刷新窗口。 graphWindow->reRender(); } void OperGraphPick::addGraphObjectToWidget(Interface::PostGraphObjectPick* obj, Comp::FITKGraph3DWindowVTK* graphWidget) { if (!obj || !graphWidget) { return; } // 添加可视化对象。 //@{ obj->removeFromGraphWidget(); graphWidget->addObject(obj->getRenderLayer(), obj, true); //} // 刷新窗口。 //@{ graphWidget->reRender(); //@} } void OperGraphPick::setActorStateByPickInfo(int pickObjType, int pickMethod, int dataObjId) { //GraphData::GraphProviderManager::getInstance()->setActorStateByPickInfo(pickObjType, pickMethod, dataObjId); } } // namespace GUIOper