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

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