#ifndef NMDATALAYER_H #define NMDATALAYER_H #include "nmData_global.h" #include "nmDefines.h" #include "nmDataAttribute.h" #include // 工程持久化的单层几何数据,用于剖面展示和井深定位,不提供求解器的储层厚度 h。 // 顶深、底深和几何厚度均以米保存;对象由 DataManager 拥有。 // 界面编辑使用 nmLayerGeometry 值快照,不能直接修改这里的对象。 class NM_DATA_EXPORT nmDataLayer : public nmDataBase { Q_OBJECT public: // 默认对象尚未具备有效几何,创建方需完整设置顶深、底深和厚度。 nmDataLayer(); // 只复制业务字段;QObject 身份、父对象和信号连接不从源对象复制。 nmDataLayer(const nmDataLayer &other); virtual ~nmDataLayer(); // 替换业务字段但保留当前 QObject 身份,调用方仍负责几何一致性。 nmDataLayer &operator = (const nmDataLayer &other); // 按原始米制值序列化,名称以 UTF-8 写入;字符串内存由传入的 JSON 分配器持有。 virtual rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const override; // 兼容旧工程缺少 name 字段;读取时不重排边界,保留原始几何供后续检查。 virtual void FromJsonValue(const rapidjson::Value& jsonValue) override; virtual QString getTableName(); virtual QString type() const; // 层名称随工程保存;旧工程没有名称时保持空串,由显示端提供默认名称。 void setName(const QString& value); QString getName() const; // 几何访问器只读写各自字段,不联动其他边界,也不发出 Manager 的数据变化通知。 // 修改前应通过 nmLayerGeometry 校验,持久化时再整体设置这三个米制值。 void setTop(double value); double getTop() const; void setBottom(double value); double getBottom() const; void setThickness(double value); double getThickness() const; // 历史命名沿用旧格式:表示与下一层分离,不是当前表格的选中状态。 void setIsChecked(bool value); bool getIsChecked() const; // 颜色属于层的显示属性,与深度、厚度和求解物性无关。 void setColor(const QColor& value); QColor getColor() const; private: QString m_sName; // 持久化名称;旧工程未提供时保留空串。 double m_dTopDepth; // 层顶深,单位 m;保存原始值,不随界面显示单位变化。 double m_dBottomDepth; // 层底深,单位 m;有效几何中等于顶深加层自身厚度。 double m_dThickness; // 层自身几何厚度,单位 m;有效值大于零,不含间隙,与求解厚度 h 独立。 bool m_bLegacyGap; // 旧格式中与下一层分离的标志,保留用于读写兼容。 QColor m_clrLayer; // 层填充颜色,含透明度;随工程保存,不参与几何或求解物性计算。 }; #endif // NMDATALAYER_H