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

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