#pragma once #include "Defines.h" #include "iXmlBaseItem.h" /// @brief 模型信息基础 class I_XMLMANAGER_EXPORT iModelInfoBase : public iXmlBaseItem { Q_OBJECT public: // 20260210 为了支撑干扰,以便后续扩展其它,所以改变原有的多层模式,为Flag // 注意:这个定义只有内部启用,对应的是Model模型XML定义文件之中 enum mibFlags { // 无标志 flagNone = 0, // 该模型选项是否:支持多层(默认不支持) // 对应的是 多层模型(数字Flag+1) flagMultiLayer = 0x00000001, // 该模型选项是否:支持干扰(默认不支持) // 对应的是 干扰模型(数字Flag+2) flagInterfere = 0x00000002, // 该模型选项是否:带边界中的顶底属性(默认不支持) // 对应的是 自动在解释参数中,增加 顶边界、底边界(数字Flag+4) flagBdyNeeded = 0x00000004, // 该模型选项是否支持:启动压力梯度(默认不支持) // 对应的是 模型选项对话框左下角是否可以勾选(数字Flag+8) flagPressGrad = 0x00000008, // 该模型选项是否支持:动态渗透率(默认不支持) // 对应的是 模型选项对话框左下角是否可以勾选(数字Flag+16) flagDynamicK = 0x00000010, // 该模型选项是否支持:小信号(默认不支持) // 对应的是 模型选项对话框左下角是否可以勾选(数字Flag+32) flagSmallSignal = 0x00000020, // 该模型选项是否支持:应力敏感(默认不支持) // 对应的是 模型选项对话框左下角是否可以勾选(数字Flag+64) flagStressSensitive = 0x00000040, // 该模型选项是否支持:吸附(默认不支持) // 对应的是 模型选项对话框左下角是否可以勾选(数字Flag+128) flagAdsorption = 0x00000080, // 该模型选项是否是:产能模式(默认不支持) // 对应的是 是否产能试井,注意,与其它所有标识互斥(数字Flag+256) // 该方案放在此处只是一种权宜之计 flagWDT = 0x00000100, //(数字Flag+256) // 该模型选项是否支持:扩展1~6(默认不支持) flagExt2 = 0x00000200, //(数字Flag+512) flagExt3 = 0x00000400, //(数字Flag+1024) flagExt4 = 0x00000800, //(数字Flag+2048) flagExt5 = 0x00001000, //(数字Flag+4096) flagExt6 = 0x00002000, //(数字Flag+8192) // 待定 flagUnknown = 0x00000200 }; public: iModelInfoBase(QObject* parent = 0); ~iModelInfoBase(); // 把List分配到成员变量 // 输入开始的m_listValues中index,并且返回下一个index virtual int allocateInfo(int nIndex); // 备份恢复 virtual bool saveBk(); virtual bool restoreBk(); // 序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); // Super其实就是Parent,只是QObject本身有了Parent接口 // 没有直接用QObject的parent接口原因是,其child接口不太友好,不方便应用 //virtual iModelInfoBase* getSuper(); //virtual void setSuper(iModelInfoBase* p); // 标识开启(对应界面上√) bool isFlagOpen(mibFlags flags) const; void setFlagOpen(mibFlags flags, bool bOpen); protected: virtual void initXmlTags(); public: QString m_sAlias; //中文名称 QString m_sFullAlias;//比如:直井·部分打开·有限导流 QString m_sIcon; //图标 QString m_sFig; //图片 QString m_sTips; //备注 // 20171120添加 // m_listTags << "NotFitted" << "UseMode" << "ExtInfos"; bool m_bNotFitted; //不参与拟合,界面上灰色显示 ParaUseMode m_oUseMode;// 应用场合:ParaUseMode QStringList m_listExtInfos;//下拉内容 // 如: "封闭;气顶" "封闭;底水" // 请注意 半角;分割 // 目前仅仅针对聚合物有效, // 即聚合物中增加了 常规模型 的油藏类型 // 即 常规模型 对于 聚合物来讲,属于Brother bool m_bBrother; // 与其它参数的关系验证,如 Alias="二区半径" ValidateStr="GT:R1" QString m_sValidateStr; // 20240814增加层级支持,临时,不涉及序列化 //QVector m_vecChildren; //iModelInfoBase* m_pParent; // 20240930新增,暂时不涉及xml文件节点的解析 QVariant m_oValue; //数值(支持类型不限,后续需要完善) bool m_bValid; //是否有效 bool m_bVisible; //是否可见 //新增码对外接口例如Wel010001西安 QString m_sExiID; //新增节点 是否带边界中的顶底属性 //bool m_bAddBdy;// 20260210 合并 // 新增属性,是否支持多层模型 //bool m_bSupportedML; // 20260210 为了支撑干扰,以便后续扩展其它,所以改变原有的多层模式,为Flag mibFlags m_oFlags; }; typedef QVector vecModelInfoBasesPtr;