#ifndef NMVTKROTATIONCENTERMARKERLAYER_H #define NMVTKROTATIONCENTERMARKERLAYER_H #include "nmVTKRenderLayer.h" class nmVTKRotationCenterMarkerLayerPrivate; class vtkRenderer; /** * @brief 以固定屏幕尺度显示当前相机旋转中心的三轴标记图层。 * * 标记只包含 X/Y/Z 三条世界坐标轴线。逻辑中心由调用方显式设置, * 不读取或修改 vtkCamera::FocalPoint。显示几何会沿观察方向轻微前移 * 以避免共面闪烁。图层不主动渲染,所有 * 接口只能在 Qt GUI 线程调用。 */ class NM_RENDER_EXPORT nmVTKRotationCenterMarkerLayer : public nmVTKRenderLayer { public: /** @brief 创建初始隐藏的旋转中心标记图层。 */ explicit nmVTKRotationCenterMarkerLayer(const QString& sLayerId); /** @brief 先解除相机观察关系,再释放标记渲染管线。 */ virtual ~nmVTKRotationCenterMarkerLayer(); /** * @brief 绑定 Scene 已挂载的主 Renderer,不增加其引用计数。 * @return Renderer 与当前图层挂载对象一致且相机观察关系建立成功时返回 true。 */ bool bindRenderer(vtkRenderer* pRenderer); /** @brief 幂等移除 Renderer/Camera 观察关系及其非所有权引用。 */ void unbindRenderer(); /** * @brief 按已保存世界中心、当前相机方向和视口像素尺度更新标记几何。 * @note 本函数只更新 PolyData,不主动触发 Render。 */ bool synchronize(); /** @brief 保存独立世界坐标中心并更新已有几何,不主动渲染。 */ bool setWorldCenter(double dX, double dY, double dZ); /** @brief 返回是否已经保存有效的独立世界坐标中心。 */ bool hasWorldCenter() const; /** @brief 修改标记显隐;无有效中心时不会显示,也不主动渲染。 */ void setMarkerVisible(bool bVisible); /** @brief 返回调用方最后设置的标记显隐状态。 */ bool isMarkerVisible() const; private: Q_DISABLE_COPY(nmVTKRotationCenterMarkerLayer) nmVTKRotationCenterMarkerLayerPrivate* m_pPrivate; ///< 独占实现对象。 }; #endif // NMVTKROTATIONCENTERMARKERLAYER_H