#ifndef NMVOLUMESCENECONTROLLER_H #define NMVOLUMESCENECONTROLLER_H #include "nmSubWxs_global.h" #include "nmVolumeData.h" class nmWxVTKRenderContainerWidget; class nmVolumeSceneControllerPrivate; /** * @brief 外部三维模型的独立场景控制器。 * setData 只准备隐藏候选,不移动相机、不 Render;窗口完成数据源事务时再调用 * activate。控制器清理仅移除自身图层,不清空容器的其他业务图层。 */ class NM_SUB_WXS_EXPORT nmVolumeSceneController { public: /** @param pContainer 非所有权容器,必须比本控制器存活更久且位于 GUI 线程。 */ explicit nmVolumeSceneController(nmWxVTKRenderContainerWidget* pContainer); /** @brief 仅删除仍归本控制器所有的图层,然后释放数据和适配器。 */ ~nmVolumeSceneController(); /** @brief 事务式准备隐藏场景;失败保留旧数据、相机和图层,成功后需 activate。 */ bool setData(const QSharedPointer& pData, QString* pError = nullptr); /** @brief 显示已准备模型,设置边界和拾取目标;是否适配相机由调用者决定。 */ void activate(bool bFitCamera); /** @brief 只隐藏本控制器图层,保留数据及显示设置,不主动渲染。 */ void hide(); /** @brief 解除当前模型引用并移除自有图层,不主动 Render。 */ void clear(); /** @brief 数据及所有已注册图层均有效时返回 true。 */ bool hasData() const; /** @brief 按稳定 ID 原子切换着色属性;失败保留原属性,成功至多 Render 一次。 */ bool applyProperty(const QString& sPropertyId, QString* pError = nullptr); /** @brief 更新色标响应式布局,不触发渲染,供容器 Resize 通知使用。 */ void setViewportSize(int nWidth, int nHeight); /** @brief 保存色标显隐偏好;无标量时始终隐藏,重复设置不渲染。 */ void setScalarBarVisible(bool bVisible); /** @brief 保存三维坐标框显隐偏好;重复设置不渲染。 */ void setScaleGridVisible(bool bVisible); /** @brief 返回色标显隐偏好,供 QAction 同步勾选状态。 */ bool isScalarBarVisible() const; /** @brief 返回三维坐标框显隐偏好,供 QAction 同步勾选状态。 */ bool isScaleGridVisible() const; /** @brief 返回当前模型是否选中了可用于着色的合法属性。 */ bool hasScalarProperty() const; private: Q_DISABLE_COPY(nmVolumeSceneController) nmVolumeSceneControllerPrivate* m_pPrivate; ///< 独占的场景状态,仅 GUI 线程访问。 }; #endif // NMVOLUMESCENECONTROLLER_H