|
|
#ifndef NMVOLUMEDATA_H
|
|
|
#define NMVOLUMEDATA_H
|
|
|
|
|
|
#include "nmData_global.h"
|
|
|
#include <QSharedPointer>
|
|
|
#include <QStringList>
|
|
|
#include <QVector>
|
|
|
#include <vtkSmartPointer.h>
|
|
|
#include <vtkType.h>
|
|
|
|
|
|
class vtkUnstructuredGrid;
|
|
|
class nmVolumeDataBuilder;
|
|
|
class nmVolumeDataRenderAdapter;
|
|
|
|
|
|
/** @brief 三维属性的存储关联;不包含任何求解器或 PEBI 业务约定。 */
|
|
|
enum NM_VOLUME_PROPERTY_ASSOCIATION
|
|
|
{
|
|
|
NM_VolumeProperty_CellData = 0,
|
|
|
NM_VolumeProperty_PointData
|
|
|
};
|
|
|
|
|
|
/** @brief 已校验的单分量属性描述;范围只统计有限值,名称不推断单位。 */
|
|
|
struct NM_DATA_EXPORT nmVolumePropertyDescriptor
|
|
|
{
|
|
|
QString m_sPropertyId; ///< 关联类型与原数组名组成的稳定身份。
|
|
|
QString m_sArrayName; ///< 文件中的原始名称,以 UTF-8 交给 VTK。
|
|
|
NM_VOLUME_PROPERTY_ASSOCIATION m_eAssociation; ///< 数组关联到单元或节点。
|
|
|
double m_dMinimum; ///< 全模型范围内的最小有限属性值。
|
|
|
double m_dMaximum; ///< 全模型范围内的最大有限属性值,常量时等于最小值。
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* @brief 与数据来源无关的只读三维体网格。
|
|
|
* Builder 独立复制并校验后才发布;UI 只能查询元数据,渲染适配器可以共享
|
|
|
* 已冻结的数组,但任何下游均不得修改共享几何和数组。
|
|
|
*/
|
|
|
class NM_DATA_EXPORT nmVolumeData
|
|
|
{
|
|
|
public:
|
|
|
/** @brief 释放当前数据对象独占的网格容器及冻结数组引用。 */
|
|
|
~nmVolumeData();
|
|
|
/** @brief 返回本次发布的唯一数据 ID;重复导入同一文件也生成新身份。 */
|
|
|
QString getDataId() const;
|
|
|
/** @brief 返回可选来源名称;文件导入使用文件名,求解器可提供业务名称。 */
|
|
|
QString getSourceName() const;
|
|
|
/** @brief 返回已校验三维网格的节点数量。 */
|
|
|
vtkIdType getPointCount() const;
|
|
|
/** @brief 返回已校验三维网格的体单元数量。 */
|
|
|
vtkIdType getCellCount() const;
|
|
|
/** @brief 复制 X/Y/Z 最小、最大边界;空输出指针不执行操作。 */
|
|
|
void getBounds(double dBounds[6]) const;
|
|
|
/** @brief 返回只读属性目录,顺序为单元属性在前、节点属性在后。 */
|
|
|
const QVector<nmVolumePropertyDescriptor>& getProperties() const;
|
|
|
/** @brief 按稳定 ID 查找只读描述;不存在时返回 nullptr。 */
|
|
|
const nmVolumePropertyDescriptor* findProperty(const QString& sPropertyId) const;
|
|
|
/** @brief 返回默认着色属性 ID;没有合法标量时返回空字符串。 */
|
|
|
QString getInitialPropertyId() const;
|
|
|
/** @brief 返回被跳过属性等非致命诊断,不影响合法几何发布。 */
|
|
|
QStringList getDiagnostics() const;
|
|
|
|
|
|
private:
|
|
|
/** @brief 只允许 Builder 创建待校验对象,普通调用者不能发布半成品。 */
|
|
|
nmVolumeData();
|
|
|
Q_DISABLE_COPY(nmVolumeData)
|
|
|
friend class nmVolumeDataBuilder;
|
|
|
friend class nmVolumeDataRenderAdapter;
|
|
|
|
|
|
vtkSmartPointer<vtkUnstructuredGrid> m_pGrid; ///< 发布后不再写入。
|
|
|
QString m_sDataId; ///< 本次发布唯一 UUID,与路径及界面索引无关。
|
|
|
QString m_sSourceName; ///< 仅供显示的来源名称,不用于读取或身份比较。
|
|
|
QString m_sInitialPropertyId; ///< 构建时按活动标量优先级选定的默认属性。
|
|
|
QVector<nmVolumePropertyDescriptor> m_vecProperties; ///< 发布后不可修改的属性目录。
|
|
|
QStringList m_listDiagnostics; ///< 被跳过的数组等非致命诊断。
|
|
|
double m_dBounds[6]; ///< 有限且三轴非零跨度的原始网格边界。
|
|
|
};
|
|
|
|
|
|
/** @brief 导入过程的非所有权回调;实现必须允许工作线程调用。 */
|
|
|
class NM_DATA_EXPORT nmVolumeImportFeedback
|
|
|
{
|
|
|
public:
|
|
|
/** @brief 支持通过反馈接口销毁具体回调实现。 */
|
|
|
virtual ~nmVolumeImportFeedback() {}
|
|
|
/** @brief 返回线程安全的取消状态;读取、校验和复制循环均需检查。 */
|
|
|
virtual bool isCanceled() const = 0;
|
|
|
/** @brief 报告 0~100 的加载进度;不得在此直接操作界面对象。 */
|
|
|
virtual void reportProgress(int nPercent) = 0;
|
|
|
};
|
|
|
|
|
|
#endif // NMVOLUMEDATA_H
|