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/nmPebiResultSceneController.h

101 lines
4.5 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 NMPEBIRESULTSCENECONTROLLER_H
#define NMPEBIRESULTSCENECONTROLLER_H
#include "nmSubWxs_global.h"
#include <QSharedPointer>
#include <QString>
#include <QStringList>
class nmPebiResultSceneControllerPrivate;
class nmPebiResultSnapshot;
class nmWxVTKRenderContainerWidget;
/**
* @brief 将不可变 PEBI 结果快照组合为独立的通用 VTK 场景。
*
* Scene 拥有 Mesh、ScalarBar 和平面比例网格图层;控制器独占活动
* RenderAdapter 和快照强引用,并通过稳定 ID 校验所观察的图层身份。
* 外部提前清空业务 Scene 时,控制器会丢弃活动结果而不会解引用旧图层。
*/
class NM_SUB_WXS_EXPORT nmPebiResultSceneController
{
public:
/**
* @param pContainer 非所有权指针,必须比控制器生命周期更长。
* @note 析构会从业务 Scene 移除本控制器创建的稳定 ID 图层。
*/
explicit nmPebiResultSceneController(
nmWxVTKRenderContainerWidget* pContainer);
/** @brief 断开活动管线并移除本控制器创建的稳定 ID 图层。 */
~nmPebiResultSceneController();
/**
* @brief 事务式绑定新快照,成功后恢复顶视图、适配网格并渲染一次。
* @note 候选初始化失败时保留当前 Adapter、画面、范围和相机状态;
* 若发现 Scene 已由外部清空,则采用一致的无快照状态。
*/
bool setSnapshot(
const QSharedPointer<const nmPebiResultSnapshot>& pSnapshot,
QString* pError = nullptr);
/** @brief 解除管线和快照引用并隐藏结果图层,不销毁 Scene。 */
void clear();
/**
* @brief 原子切换同一快照内的属性和帧,成功时仅渲染一次。
* @note 静态属性只接受帧 0;失败时恢复 Adapter、Mapper 和范围。
*/
bool applyPropertyFrame(const QString& sPropertyId,
int nFrameIndex,
QString* pError = nullptr);
/** @brief 设置结果网格显隐;偏好跨快照保留。 */
void setMeshVisible(bool bVisible);
/** @brief 设置色标显隐;阶段 5A 默认隐藏,偏好跨快照保留。 */
void setScalarBarVisible(bool bVisible);
/** @brief 设置平面比例网格显隐;偏好跨快照保留。 */
void setScaleGridVisible(bool bVisible);
/** @brief 设置单元边线显隐;偏好跨快照保留。 */
void setCellEdgesVisible(bool bVisible);
/** @brief 返回当前是否持有可用快照且稳定结果图层仍完整。 */
bool hasSnapshot() const;
/** @brief 返回当前快照稳定 ID;无可用快照时返回空字符串。 */
QString getCurrentSnapshotId() const;
/** @brief 按 Catalog 顺序返回当前快照真实存在的属性 ID。 */
QStringList getAvailablePropertyIds() const;
/** @brief 返回最后一次成功渲染的属性 ID。 */
QString getCurrentPropertyId() const;
/** @brief 返回最后一次成功渲染的零基帧;无快照时返回 -1。 */
int getCurrentFrameIndex() const;
/** @brief 判断当前快照中的指定属性是否为动态属性。 */
bool isPropertyTimeDependent(const QString& sPropertyId) const;
/** @brief 返回当前快照中指定属性的帧数,不可用时返回 0。 */
int getPropertyFrameCount(const QString& sPropertyId) const;
/**
* @brief 返回动态属性指定帧的求解时间,单位固定为小时。
* @note 查询失败时返回 false,且不修改 dTime。
*/
bool getPropertyTimeAt(const QString& sPropertyId,
int nFrameIndex,
double& dTime) const;
/** @brief 返回快照中的业务范围;常量属性保持 [c,c]。 */
bool getCurrentPropertyRange(double dRange[2]) const;
/** @brief 返回结果网格显示偏好,不要求当前存在快照。 */
bool isMeshVisible() const;
/** @brief 返回色标显示偏好,不要求当前存在快照。 */
bool isScalarBarVisible() const;
/** @brief 返回比例网格显示偏好,不要求当前存在快照。 */
bool isScaleGridVisible() const;
/** @brief 返回单元边线显示偏好,不要求当前存在快照。 */
bool areCellEdgesVisible() const;
private:
Q_DISABLE_COPY(nmPebiResultSceneController)
/** @brief 独占实现对象,保存快照、Adapter 及 Scene 图层观察指针。 */
nmPebiResultSceneControllerPrivate* m_pPrivate;
};
#endif // NMPEBIRESULTSCENECONTROLLER_H