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/nmSubWxs/nmVolumeSceneController.h

52 lines
2.6 KiB
C

#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<const nmVolumeData>& 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