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.

199 lines
6.0 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 FITKGraphInteractionStyle.h
* @brief 渲染窗口交互器类接口声明
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*
*/
#ifndef _FITKGraphInteractionStyle_H_
#define _FITKGraphInteractionStyle_H_
#include "FITKRenderWindowVTKAPI.h"
#include <QObject>
#include <vtkInteractorStyleRubberBandPick.h>
namespace Comp
{
class FITKGraphOperator;
class FITKGraph3DWindowVTK;
class FITKGraphAreaPicker;
/**
* @brief 渲染窗口交互器类接口声明
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
class FITKRenderWindowVTKAPI FITKGraphInteractionStyle :public QObject, public vtkInteractorStyleRubberBandPick
{
Q_OBJECT
public:
/**
* @brief 创建函数
* @return FITKGraphInteractionStyle*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
static FITKGraphInteractionStyle* New();
vtkTypeMacro(FITKGraphInteractionStyle, vtkInteractorStyleRubberBandPick);
/**
* @brief 设置交互器对应的窗口
* @param[i] graphWin 窗口对象
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void setGraph3DWin(FITKGraph3DWindowVTK* graphWin);
/**
* @brief 设置窗口的交互器对象
* @param[i] interactor My Param doc
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void setInteractor(vtkRenderWindowInteractor* interactor);
/**
* @brief 设置框选器框选的渲染图层对象
* @param[i] renderer 渲染图层对象
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void setAreaPickRenderer(vtkRenderer* renderer);
/**
* @brief 获取VTK交互器对象
* @return vtkRenderWindowInteractor*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
vtkRenderWindowInteractor* getInteractor();
/**
* @brief 设置框选器的状态
* @param[i] state 状态true为开启
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void setAredPickerState(bool state);
/**
* @brief 区域拾取
* @param[i] startPos 起始点
* @param[i] endPos 终止点
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-17
*/
virtual void areaPick(int* startPos, int* endPos);
protected:
/**
* @brief Construct a new FITKGraphInteractionStyle object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraphInteractionStyle();
/**
* @brief Destroy the FITKGraphInteractionStyle object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual ~FITKGraphInteractionStyle();
/**
* @brief 鼠标左键按下事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnLeftButtonDown() override;
/**
* @brief 鼠标左键抬起事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnLeftButtonUp() override;
/**
* @brief 鼠标中键按下事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMiddleButtonDown() override;
/**
* @brief 鼠标中键抬起事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMiddleButtonUp() override;
/**
* @brief 鼠标移动事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMouseMove() override;
/**
* @brief 鼠标滑轮向前事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMouseWheelForward() override;
/**
* @brief 鼠标滑轮向后事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMouseWheelBackward() override;
/**
* @brief 鼠标中键按下事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnRightButtonDown() override;
/**
* @brief 鼠标中键抬起事件
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnRightButtonUp() override;
/**
* @brief 鼠标移动判断
* @return true
* @return false
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
bool isMouseMoved();
protected:
/**
* @brief 渲染窗口对象
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraph3DWindowVTK* m_graph3dWin = nullptr;
/**
* @brief 绘图操作器对象
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraphOperator* m_operactor = nullptr;
/**
* @brief 鼠标按下位置
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
int m_leftButtonDowmPos[2] = { 0,0 };
/**
* @brief 鼠标抬起位置
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
int m_leftButtonUpPos[2] = { 0,0 };
/**
* @brief 框选功能对象
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
FITKGraphAreaPicker* m_areaPick = nullptr;
/**
* @brief 框选器状态
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
// bool m_pickerState = true;
};
}
#endif