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.
nmWTAI-Platform/Include/nmNum/nmRender/nmVTKOrientationMarkerContr...

77 lines
2.9 KiB
C

#ifndef NMVTKORIENTATIONMARKERCONTROLLER_H
#define NMVTKORIENTATIONMARKERCONTROLLER_H
#include "nmRender_global.h"
#include <vtkSmartPointer.h>
class vtkAxesActor;
class vtkOrientationMarkerWidget;
class vtkRenderer;
class vtkRenderWindowInteractor;
/**
* @brief
*
* AxesActor OrientationMarkerWidget Scene
* Render Qt GUI 线
*/
class NM_RENDER_EXPORT nmVTKOrientationMarkerController
{
public:
/** @brief 创建默认开启、默认不可用的方向轴控制器。 */
nmVTKOrientationMarkerController();
/** @brief 先禁用并解除所有 VTK 关联,再释放内部对象。 */
~nmVTKOrientationMarkerController();
/**
* @brief RenderWindow Interactor Renderer
*
* Ready true
* Marker
*/
bool bindInteractor(vtkRenderWindowInteractor* pInteractor,
vtkRenderer* pRenderer);
/** @brief 禁用 Marker并解除 Actor、Renderer 和 Interactor 的引用关系。 */
void unbindInteractor();
/** @brief 修改长期显示偏好;空、错误和加载状态不会覆盖该偏好。 */
void setVisible(bool bVisible);
/** @brief 返回长期显示偏好,不代表 Marker 当前一定处于 Enabled 状态。 */
bool isVisible() const;
/** @brief 设置当前视图是否处于可显示方向轴的 Ready 状态。 */
void setViewAvailable(bool bAvailable);
/** @brief 返回当前视图可用状态。 */
bool isViewAvailable() const;
/**
* @brief [0, 1]
* @return Widget true
*/
bool setViewport(double dXMinimum,
double dYMinimum,
double dXMaximum,
double dYMaximum);
private:
Q_DISABLE_COPY(nmVTKOrientationMarkerController)
/** @brief 按绑定、显示偏好和 Ready 状态统一更新 Marker 的 Enabled 状态。 */
void updateEnabledState();
// 智能指针独占 VTK 对象MarkerWidget 启用期间还会持有相关 VTK 引用。
vtkSmartPointer<vtkAxesActor> m_pAxesActor;
vtkSmartPointer<vtkOrientationMarkerWidget> m_pMarkerWidget;
// 以下为非所有权访问指针,解绑时必须在释放外部对象前清空。
vtkRenderWindowInteractor* m_pInteractor;
vtkRenderer* m_pRenderer;
bool m_bVisible; ///< 用户长期显示偏好,默认开启。
bool m_bViewAvailable; ///< 当前容器是否处于 Ready 状态。
double m_dViewport[4]; ///< 归一化方向轴视口。
};
#endif // NMVTKORIENTATIONMARKERCONTROLLER_H