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/nmPebiResultAnimationExport...

95 lines
3.6 KiB
C

#ifndef NMPEBIRESULTANIMATIONEXPORTER_H
#define NMPEBIRESULTANIMATIONEXPORTER_H
#include "nmSubWxs_global.h"
#include "nmPebiResultAnimationExportSettings.h"
#include "nmPebiResultDisplaySettings.h"
#include <QObject>
#include <QSharedPointer>
#include <QString>
#include <vtkSmartPointer.h>
class nmPebiResultSnapshot;
class vtkCamera;
/** @brief 在独立VTK场景中同步渲染并编码PEBI结果动画。 */
class NM_SUB_WXS_EXPORT nmPebiResultAnimationExporter : public QObject
{
Q_OBJECT
public:
/** @brief 一次同步导出调用的终止状态。 */
enum ExportResult
{
/** 临时视频已成功发布到目标路径。 */
Export_Succeeded = 0,
/** 用户在完整帧边界请求取消,临时文件已清理。 */
Export_Cancelled,
/** 渲染、编码或文件发布失败,详细原因由pError返回。 */
Export_Failed
};
/** @brief 调用方在开始导出前冻结的全部输入。 */
struct Request
{
/** @brief 创建空请求,显隐和背景字段使用默认值。 */
Request();
/** @brief 导出期间持有的只读快照强引用。 */
QSharedPointer<const nmPebiResultSnapshot> m_pSnapshot;
/** @brief 待导出的稳定动态属性ID。 */
QString m_sPropertyId;
/** @brief 开始导出时冻结的颜色映射设置。 */
nmPebiResultDisplaySettings m_oDisplaySettings;
/** @brief 已规范化的帧范围、采样、帧率和输出尺寸。 */
nmPebiResultAnimationExportSettings m_oExportSettings;
/** @brief 最终视频目标路径,扩展名决定输出格式。 */
QString m_sTargetFilePath;
/** @brief 是否在视频中显示色标。 */
bool m_bScalarBarVisible;
/** @brief 是否在视频中显示比例网格。 */
bool m_bScaleGridVisible;
/** @brief 是否在视频中显示井名和引线。 */
bool m_bWellNamesVisible;
/** @brief Renderer第一背景色,三个分量均为0~1。 */
double m_dBackground[3];
/** @brief Renderer渐变背景的第二颜色,三个分量均为0~1。 */
double m_dBackground2[3];
/** @brief 是否启用Renderer渐变背景。 */
bool m_bGradientBackground;
/** @brief 当前屏幕相机的深拷贝,导出器不会修改屏幕相机。 */
vtkSmartPointer<vtkCamera> m_pCamera;
};
/** @param pParent Qt父对象,不参与VTK资源所有权。 */
explicit nmPebiResultAnimationExporter(QObject* pParent = nullptr);
/** @brief 释放导出器;实际导出在exportAnimation()返回前同步结束。 */
virtual ~nmPebiResultAnimationExporter();
/**
* @brief 同步执行离屏渲染、临时编码和最终文件发布事务。
* @param oRequest 调用期间保持不变的冻结请求。
* @param pError 可选错误输出;取消不写入错误文字。
* @return 成功、取消或失败状态。
*/
ExportResult exportAnimation(const Request& oRequest,
QString* pError = nullptr);
signals:
/** @brief 每完成一帧编码后报告进度,首次以0作为已完成帧数。 */
void progressChanged(int nCompletedFrames, int nTotalFrames);
public slots:
/** @brief 请求在当前完整帧写入后取消;不会中断正在编码的半帧。 */
void cancel();
private:
Q_DISABLE_COPY(nmPebiResultAnimationExporter)
/** @brief 在完整帧编码边界读取的取消请求标志。 */
bool m_bCancelRequested;
};
#endif // NMPEBIRESULTANIMATIONEXPORTER_H