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.

240 lines
6.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.

/*****************************************************************//**
* @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