|
|
#ifndef NMVOLUMESCENECONTROLLER_H
|
|
|
#define NMVOLUMESCENECONTROLLER_H
|
|
|
|
|
|
#include "nmSubWxs_global.h"
|
|
|
#include "nmVolumeData.h"
|
|
|
#include "nmVolumeSliceSettings.h"
|
|
|
#include "nmPebiResultDisplaySettings.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 返回当前着色属性的稳定 ID;无合法属性时返回空字符串。 */
|
|
|
QString getCurrentPropertyId() const;
|
|
|
/** @brief 读取当前属性的全模型有限值范围,常量属性允许两端相等。 */
|
|
|
bool getCurrentPropertyRange(double dRange[2]) const;
|
|
|
/** @brief 读取当前手工或自动显示范围,不包含常量渲染所需的内部微量扩展。 */
|
|
|
bool getCurrentDisplayRange(double dRange[2]) const;
|
|
|
/** @brief 读取当前属性独立记忆的颜色设置,未编辑时返回默认彩虹和自动范围。 */
|
|
|
bool getCurrentDisplaySettings(nmPebiResultDisplaySettings& oSettings) const;
|
|
|
/**
|
|
|
* @brief 核对数据及属性身份后事务式更新颜色;失败保留全部旧绑定,不重算截面。
|
|
|
* @note 当前仅接受线性映射及端点越界颜色,成功至多渲染一次。
|
|
|
*/
|
|
|
bool applyCurrentDisplaySettings(const QString& sExpectedDataId,
|
|
|
const QString& sExpectedPropertyId,
|
|
|
const nmPebiResultDisplaySettings& oSettings, 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
|