|
|
/*****************************************************************//**
|
|
|
* @file PreWindowInitializer.h
|
|
|
* @brief 前处理窗口初始化。
|
|
|
*
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*********************************************************************/
|
|
|
|
|
|
#ifndef __PRE_WIDOWINIINTIALIZER_H___
|
|
|
#define __PRE_WIDOWINIINTIALIZER_H___
|
|
|
|
|
|
#include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowInterface.h"
|
|
|
#include "FITK_Component/FITKRenderWindowVTK/FITKGraphInteractionStyle.h"
|
|
|
|
|
|
#include <QTimer>
|
|
|
|
|
|
// 前置声明
|
|
|
class vtkRenderer;
|
|
|
class vtkRenderWindow;
|
|
|
|
|
|
namespace EventOper
|
|
|
{
|
|
|
class GraphInteractionOperator;
|
|
|
class GraphEventOperator;
|
|
|
};
|
|
|
|
|
|
namespace Comp
|
|
|
{
|
|
|
class FITKGraph3DWindowVTK;
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* @brief 前处理窗口初始化。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
class PreWindowInitializer : public Comp::Graph3DWindowInitializer
|
|
|
{
|
|
|
public:
|
|
|
/**
|
|
|
* @brief 构造函数。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
explicit PreWindowInitializer();
|
|
|
|
|
|
/**
|
|
|
* @brief 析构函数。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
virtual ~PreWindowInitializer() = default;
|
|
|
|
|
|
/**
|
|
|
* @brief 获取交互方式。[重写]
|
|
|
* @return 交互器交互方式
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
virtual Comp::FITKGraphInteractionStyle* getStyle() override;
|
|
|
|
|
|
protected:
|
|
|
|
|
|
private:
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
class PreWindowInteractionStyle : public Comp::FITKGraphInteractionStyle
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
public:
|
|
|
/**
|
|
|
* @brief 创建实例。[静态]
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
static PreWindowInteractionStyle* New();
|
|
|
|
|
|
vtkTypeMacro(PreWindowInteractionStyle,FITKGraphInteractionStyle);
|
|
|
|
|
|
private:
|
|
|
/**
|
|
|
* @brief 鼠标左键按下事件响应
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-07-25
|
|
|
*/
|
|
|
virtual void OnLeftButtonDown() override;
|
|
|
|
|
|
/**
|
|
|
* @brief 鼠标左键抬起事件响应
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-11-04
|
|
|
*/
|
|
|
virtual void OnLeftButtonUp() override;
|
|
|
/**
|
|
|
* @brief 鼠标中键按下事件响应
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-07-25
|
|
|
*/
|
|
|
virtual void OnMiddleButtonDown() override;
|
|
|
/**
|
|
|
* @brief 鼠标中键抬起事件响应
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-11-04
|
|
|
*/
|
|
|
virtual void OnMiddleButtonUp() override;
|
|
|
/**
|
|
|
* @brief 鼠标移动事件
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-11-03
|
|
|
*/
|
|
|
virtual void OnMouseMove() override;
|
|
|
|
|
|
/**
|
|
|
* @brief 鼠标滑轮事件
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-11-04
|
|
|
*/
|
|
|
void OnMouseWheelForward() override;
|
|
|
/**
|
|
|
* @brief 鼠标滑轮事件
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-11-04
|
|
|
*/
|
|
|
void OnMouseWheelBackward() override;
|
|
|
/**
|
|
|
* @brief 鼠标中键点击事件
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-11-04
|
|
|
*/
|
|
|
void OnRightButtonDown() override;
|
|
|
/**
|
|
|
* @brief 鼠标中键释放事件
|
|
|
* @author LiBaojun (libaojunqd@foxmail.com)
|
|
|
* @date 2023-11-04
|
|
|
*/
|
|
|
void OnRightButtonUp() override;
|
|
|
|
|
|
/**
|
|
|
* @brief 框选。
|
|
|
* @param startPos:鼠标起始坐标
|
|
|
* @param endPos:鼠标结束坐标
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-18
|
|
|
*/
|
|
|
void areaPick(int* startPos, int* endPos) override;
|
|
|
|
|
|
private:
|
|
|
/**
|
|
|
* @brief 构造函数。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
PreWindowInteractionStyle();
|
|
|
|
|
|
/**
|
|
|
* @brief 析构函数。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
~PreWindowInteractionStyle() = default;
|
|
|
|
|
|
/**
|
|
|
* @brief 获取当前三维窗口
|
|
|
* @return 三维窗口
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
Comp::FITKGraph3DWindowVTK* getCurrentGraphWindow();
|
|
|
|
|
|
/**
|
|
|
* @brief 在当前鼠标位置执行一次点击拾取操作。
|
|
|
* @param isPreview:是否为预选[缺省]
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
void pick(bool isPreview = false);
|
|
|
|
|
|
/**
|
|
|
* @brief 在当前鼠标位置执行一次点击拾取节点操作。(预留)
|
|
|
* @param graphWindow:可视化窗口
|
|
|
* @param pos:拾取位置
|
|
|
* @param isPreview:是否为预选
|
|
|
* @param tol:拾取精度容差[缺省]
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
void pickPoint(Comp::FITKGraph3DWindowVTK* graphWindow, int* pos, bool isPreview, double tol = 0.005);
|
|
|
|
|
|
/**
|
|
|
* @brief 在当前鼠标位置执行一次点击拾取单元操作。(点、线、面、体拾取均使用此方法)
|
|
|
* @param graphWindow:可视化窗口
|
|
|
* @param pos:拾取位置
|
|
|
* @param isPreview:是否为预选
|
|
|
* @param tol:拾取精度容差[缺省]
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
void pickCell(Comp::FITKGraph3DWindowVTK* graphWindow, int* pos, bool isPreview, double tol = 0.003);
|
|
|
|
|
|
private slots:
|
|
|
/**
|
|
|
* @brief 槽函数 - 预选高亮定时器槽函数,执行预选高亮。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
void slot_prePick();
|
|
|
|
|
|
private:
|
|
|
/**
|
|
|
* @brief 预选高亮定时器,悬浮200ms后显示预选拾取对象。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
QTimer m_timerForPrePick;
|
|
|
|
|
|
/**
|
|
|
* @brief 预选高亮可视化操作器。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
EventOper::GraphInteractionOperator* m_operPreview{ nullptr };
|
|
|
|
|
|
/**
|
|
|
* @brief 高亮可视化操作器。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
EventOper::GraphInteractionOperator* m_operPick{ nullptr };
|
|
|
|
|
|
/**
|
|
|
* @brief 前处理可视化操作器。
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
* @date 2024-04-17
|
|
|
*/
|
|
|
EventOper::GraphEventOperator* m_operGraph{ nullptr };
|
|
|
|
|
|
};
|
|
|
#endif |