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

#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