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/nmVTKCameraController.h

68 lines
2.6 KiB
C

#ifndef NMVTKCAMERACONTROLLER_H
#define NMVTKCAMERACONTROLLER_H
#include "nmRender_global.h"
class vtkRenderer;
/**
* @brief VTK
*
* Renderer Render
* Renderer Prop false
*/
class NM_RENDER_EXPORT nmVTKCameraController
{
public:
/** @brief 绑定 Renderer 非所有权指针;允许传入 NULL 延后初始化。 */
explicit nmVTKCameraController(vtkRenderer* pRenderer = NULL);
/** @brief 只解除 Renderer 引用,不修改相机和场景。 */
~nmVTKCameraController();
/** @brief 切换非所有权 Renderer传入 NULL 表示解除。 */
void setRenderer(vtkRenderer* pRenderer);
/** @brief 返回当前 Renderer 非所有权指针。 */
vtkRenderer* getRenderer() const;
/** @brief 恢复透视投影并适配当前可见边界。 */
bool resetCamera();
/** @brief 按固定倍率 1.2 放大当前视图,保持观察方向和投影方式。 */
bool zoomIn();
/** @brief 按固定倍率 1.0 / 1.2 缩小当前视图。 */
bool zoomOut();
/** @brief 保持当前观察方向和投影方式,仅适配可见边界。 */
bool fitView();
/** @brief 沿 +Z 方向设置正交顶视图。 */
bool setTopView();
/** @brief 沿 -Y 方向设置正交前视图。 */
bool setFrontView();
/** @brief 沿 +X 方向设置正交右视图。 */
bool setRightView();
/** @brief 设置透视等轴视图。 */
bool setIsometricView();
/** @brief 保持观察方向和距离,将焦点平移到指定世界坐标。 */
bool setRotationCenter(double dX, double dY, double dZ);
/** @brief 将旋转中心恢复为当前可见边界中心。 */
bool resetRotationCenter();
private:
Q_DISABLE_COPY(nmVTKCameraController)
/** @brief 读取并验证当前可见 Prop 的有限包围盒。 */
bool getVisibleBounds(double dBounds[6]) const;
/** @brief 设置观察方向和投影方式,再按可见边界适配相机。 */
bool applyStandardView(double dDirectionX,
double dDirectionY,
double dDirectionZ,
double dViewUpX,
double dViewUpY,
double dViewUpZ,
bool bParallelProjection);
/** @brief 按给定倍率调整透视距离或正交投影比例。 */
bool zoom(double dFactor);
vtkRenderer* m_pRenderer; ///< 非所有权指针,由渲染容器持有。
};
#endif // NMVTKCAMERACONTROLLER_H