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

70 lines
4.0 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"
#include "nmVolumeSliceSettings.h"
#include "nmVTKMeshLayer.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 复用结果窗口的网格显示模式,立即生效,不重算截面或移动相机。 */
void setMeshDisplayMode(nmVTKMeshLayer::DisplayMode eMode);
/** @brief 返回完整模型与截面共用的显示模式,供底部工具栏同步。 */
nmVTKMeshLayer::DisplayMode getMeshDisplayMode() const;
/** @brief 更新色标响应式布局,不触发渲染,供容器 Resize 通知使用。 */
void setViewportSize(int nWidth, int nHeight);
/** @brief 保存色标显隐偏好;无标量时始终隐藏,重复设置不渲染。 */
void setScalarBarVisible(bool bVisible);
/** @brief 返回色标显隐偏好,供 QAction 同步勾选状态。 */
bool isScalarBarVisible() const;
/** @brief 返回当前模型是否选中了可用于着色的合法属性。 */
bool hasScalarProperty() const;
/** @brief 返回当前只读数据,用于参数目录及平面范围初始化。 */
QSharedPointer<const nmVolumeData> getData() const;
/** @brief 返回最后成功应用的切片参数;首次切片前返回模型中心默认参数。 */
nmVolumeSliceSettings getSliceSettings() const;
/** @brief 启用或停用切片;首次启用计算中心截面,后续复用已有截面。 */
bool setSliceEnabled(bool bEnabled, QString* pError = nullptr);
/** @brief 事务式应用参数,成功后启用切片;失败保留旧画面及参数。 */
bool applySliceSettings(const nmVolumeSliceSettings& oSettings, QString* pError = nullptr);
/** @brief 立即更新辅助平面及参照模型偏好,不执行切片计算。 */
void setSliceDisplayOptions(bool bShowPlane, bool bShowSource);
/** @brief 返回当前是否显示截面,供菜单同步勾选状态。 */
bool isSliceEnabled() const;
/** @brief 返回当前切片是否为合法的空截面,供界面显示无交集提示。 */
bool isSliceEmpty() const;
/** @brief 返回当前数据成功提交截面的次数,便于观察及验证预览不重算。 */
unsigned int getSliceRevision() const;
private:
Q_DISABLE_COPY(nmVolumeSceneController)
nmVolumeSceneControllerPrivate* m_pPrivate; ///< 独占的场景状态,仅 GUI 线程访问。
};
#endif // NMVOLUMESCENECONTROLLER_H