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++

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.

#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