|
|
#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
|