Compare commits

..

5 Commits

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLlj4LmlbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAg5Y+C5pWw6IyD5Zu077yaaOOAgVBp44CBS+OAgXBoaeOAgUN0aeOAgUNm44CBU29p44CBU3dpDQogICAg5a+55bqUIEhYX05XVE1fTU9ERUxfSU5QVVQ6OkJhc2Ug57uT5p6E5L2T5a2X5q61DQogICAg6YCa6L+HIF9wYXJhSGVscGVyLT5sb2FkUGFyYURlZmluZXMoKSDliqDovb3vvIxzS2V5IOagh+ivhuS4uiBzX05tX1NlcmllDQotLT4NCg0KPFJvb3Q+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlgqjlsYLlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSLlgqjlsYLljprluqYiICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IuWIneWni+WOi+WKmyIgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9Iua4l+mAj+eOhyIgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMSIgICAgIE1heD0iMTAwMDAiICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9InBoaSIgQWxpYXM9IuWtlOmameW6piIgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgIE1heD0iMSIgICAgICBNaW49IjFlLTA1IiAgRGlnaXQ9IjQiICBEZXNjPSJwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ3RpIiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ2YiICBBbGlhcz0i5bKp55+z5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMDEiIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJvY2sgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTb2kiIEFsaWFzPSLliJ3lp4vlkKvmsrnppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjgiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgb2lsIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlN3aSIgQWxpYXM9IuWIneWni+WQq+awtOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K

@ -0,0 +1 @@
77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSBQRUJJIHNvbHZlciByZXNlcnZvaXIgcGFyYW1ldGVycyBhcmUgaW5jbHVkZWQuICAtLT4NCjwhLS0gICAgQXV0aG9yKHMpOiBhdXRvLWdlbmVyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiBoLCBQaSwgSywgcGhpLCBDdGksIENmLCBTb2ksIFN3aQ0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQ6OkJhc2Ugc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSJUb3RhbCBDb21wcmVzc2liaWxpdHkiICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ2YiICBBbGlhcz0iUm9jayBDb21wcmVzc2liaWxpdHkiICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0iSW5pdGlhbCBPaWwgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCjwvUm9vdD4NCg==

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--****************************************************************-->
<!-- 本文档的目的是建立WTAI数值解(NM)模块的参数定义 -->
<!-- 仅包含PEBI求解器所需的储层参数 -->
<!-- Date: 20260615 -->
<!--****************************************************************-->
<!--
参数范围h、Pi、K、phi、Cti、Cf、Soi、Swi
对应 HX_NWTM_MODEL_INPUT::Base 结构体字段
通过 _paraHelper->loadParaDefines() 加载sKey 标识为 s_Nm_Serie
-->
<Root>
<ParaGroup Name="" Alias="储层参数">
<ParaItem Name="h" Alias="储层厚度" Unit="m" Default="10" Max="10000" Min="1e-05" Digit="6" Desc="reservoir thickness" />
<ParaItem Name="Pi" Alias="初始压力" Unit="MPa" Default="40" Max="500" Min="0.1" Digit="6" Desc="initial formation pressure" />
<ParaItem Name="K" Alias="渗透率" Unit="mD" Default="1" Max="10000" Min="0" Digit="6" Desc="permeability" />
<ParaItem Name="phi" Alias="孔隙度" Unit="" Default="0.1" Max="1" Min="1e-05" Digit="6" Desc="porosity" />
<ParaItem Name="Cti" Alias="综合压缩系数" Unit="1/MPa" Default="0.001" Max="10" Min="1e-30" Digit="10" Scientific="1" Desc="total compressibility" />
<ParaItem Name="Cf" Alias="岩石压缩系数" Unit="1/MPa" Default="0.0001" Max="10" Min="1e-30" Digit="10" Scientific="1" Desc="rock compressibility" />
<ParaItem Name="Soi" Alias="初始含油饱和度" Unit="" Default="0.8" Max="1" Min="0" Digit="6" Desc="initial oil saturation" />
<ParaItem Name="Swi" Alias="初始含水饱和度" Unit="" Default="0.2" Max="1" Min="0" Digit="6" Desc="initial water saturation" />
</ParaGroup>
</Root>

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--****************************************************************-->
<!-- This file defines parameters for the WTAI Numerical (NM) -->
<!-- module. Only PEBI solver reservoir parameters are included. -->
<!-- Date: 20260615 -->
<!--****************************************************************-->
<!--
Parameter scope: h, Pi, K, phi, Cti, Cf, Soi, Swi
Corresponds to HX_NWTM_MODEL_INPUT::Base struct fields
Loaded via _paraHelper->loadParaDefines(), sKey = s_Nm_Serie
-->
<Root>
<ParaGroup Name="" Alias="Reservoir Parameters">
<ParaItem Name="h" Alias="Reservoir Thickness" Unit="m" Default="10" Max="10000" Min="1e-05" Digit="3" Desc="reservoir thickness" />
<ParaItem Name="Pi" Alias="Initial Pressure" Unit="MPa" Default="40" Max="500" Min="0.1" Digit="5" Desc="initial formation pressure" />
<ParaItem Name="K" Alias="Permeability" Unit="mD" Default="1" Max="10000" Min="0" Digit="6" Desc="permeability" />
<ParaItem Name="phi" Alias="Porosity" Unit="" Default="0.1" Max="1" Min="1e-05" Digit="4" Desc="porosity" />
<ParaItem Name="Cti" Alias="Total Compressibility" Unit="1/MPa" Default="0.001" Max="10" Min="1e-30" Digit="10" Scientific="1" Desc="total compressibility" />
<ParaItem Name="Cf" Alias="Rock Compressibility" Unit="1/MPa" Default="0.0001" Max="10" Min="1e-30" Digit="10" Scientific="1" Desc="rock compressibility" />
<ParaItem Name="Soi" Alias="Initial Oil Saturation" Unit="" Default="0.8" Max="1" Min="0" Digit="6" Desc="initial oil saturation" />
<ParaItem Name="Swi" Alias="Initial Water Saturation" Unit="" Default="0.2" Max="1" Min="0" Digit="6" Desc="initial water saturation" />
</ParaGroup>
</Root>

@ -232,6 +232,9 @@
#define s_Wdt_P_Pseu QObject::tr("P_Pseu")
#define s_Wdt_P_Square QObject::tr("P_Square")
// 数值相关
#define s_Nm_Serie "NM"
/////////////////////////////////////////
// enums

@ -0,0 +1,154 @@
#pragma once
#include "nmGUI_global.h"
#include "iGridRowUtils.h"
/// @brief NM模块专用的参数区渲染工具类继承自 iGridRowUtils
/// @note 设立此子类的主要目的是作为 NM 模块与基类之间的适配层:
/// - 隔离基类接口变更对 NM 模块的影响,基类改动只需修改本文件
/// - NM 模块后续如需定制参数区行为(如特殊的参数联动、自定义渲染等),
/// 只需在此类中 override 相应虚函数,无需触碰基类代码
/// - 当前实现以直接转发基类接口为主,按需逐步扩展
class NM_GUI_EXPORT nmGridRowUtils : public iGridRowUtils
{
Q_OBJECT
public:
/// @brief 构造函数,接口与基类保持一致
/// @param bSimple 是否为简单模式(不涉及序列化),默认 false
/// @param parent 父窗口
explicit nmGridRowUtils(bool bSimple = false, QWidget* parent = nullptr);
~nmGridRowUtils();
// ================================================================
// 初始化与构建
// ================================================================
/// @brief 初始化界面,基类实现负责创建基础布局
virtual void initUI() override;
/// @brief 根据参数列表构建参数区
/// @param listParas 参数英文名列表
/// @param bDnMode 是否为设计模式
/// @param pWxDlg 参数对话框载体
virtual bool buildRowUtils(QStringList listParas,
bool bDnMode,
QWidget* pWxDlg) override;
// ================================================================
// 参数读写
// ================================================================
/// @brief 设置指定参数的值
/// @param sPara 参数名称(英文标识)
/// @param o 参数值
virtual bool setParaValue(QString sPara, QVariant o) override;
/// @brief 获取指定参数的值
/// @param sPara 参数名称(英文标识)
/// @param o 输出的参数值
virtual bool getParaValue(QString sPara, QVariant& o) override;
/// @brief 批量获取所有参数值
/// @param map 输出结果Key为英文ID
/// @param bOnlyFitted 是否仅获取参与拟合的参数
/// @param bClearMap 是否先清空map
virtual bool getAllParaValues(QMap<QString, QVariant>& map,
bool bOnlyFitted = false,
bool bClearMap = true) override;
/// @brief 批量获取所有参数单位
/// @param map 输出结果Key为英文ID
/// @param bOnlyFitted 是否仅获取参与拟合的参数
/// @param bClearMap 是否先清空map
virtual bool getAllParaUnits(QMap<QString, QString>& map,
bool bOnlyFitted = false,
bool bClearMap = true) override;
// ================================================================
// 参数项查找
// ================================================================
/// @brief 根据参数名获取对应的行项目
/// @param sPara 参数名称
virtual iGridRowItem* getItemByPara(QString sPara) override;
/// @brief 根据参数名获取对应的值
/// @param sPara 参数名称
virtual QVariant getItemValueByPara(QString sPara) override;
// ================================================================
// 参数来源标识
// ================================================================
/// @brief 设置参数来源标识对应XML加载时的sKey
/// @param s 来源标识,如 "WDT" 等
void setParaSrcTag(QString s);
// ================================================================
// 序列化
// ================================================================
/// @brief 序列化(保存)
virtual void onSerialize(ZxSerializer* ser) override;
/// @brief 反序列化(加载)
virtual void onDeserialize(ZxSerializer* ser) override;
// ================================================================
// 结果组织
// ================================================================
/// @brief 组织结果数据,用于将参数区的值整理为结果信息
/// @param vec 输出结果列表(不清空,由调用方负责)
/// @param sType 结果类型
/// @param bMultiPhase 是否多相
virtual bool organizeResults(QVector<iResultInfo>& vec,
QString sType,
bool bMultiPhase) override;
protected:
// ================================================================
// 内部构建
// ================================================================
/// @brief 内部构建实现,递归创建参数项
/// @param listParas 参数列表
/// @param pItemParent 父级行项目
/// @param bDnMode 是否为设计模式
/// @param bProperOrder 是否保持正确顺序
virtual bool _buildRowUtils(QStringList listParas,
iGridRowItem* pItemParent,
bool bDnMode,
bool bProperOrder = true) override;
/// @brief 创建并添加一个参数项
/// @param pParent 父级行项目
/// @param p 参数对象
/// @param sPara 参数名称
virtual bool createAndAddItem(iGridRowItem* pParent,
iParameter* p,
QString sPara) override;
/// @brief 连接参数项的信号槽
/// @param p 需要连接的参数项
virtual void connectSignalsOf(iGridRowItem* p) override;
/// @brief 参数项创建完成后的绑定处理(如产液段与有效长度的关联)
virtual void bindItems() override;
public slots:
/// @brief 参数值改变前的预览回调
/// @param o1 主要数据m_oRawValue
/// @param o2 辅助数据(如下拉填充内容)
virtual void slotValuePrevChanged(QVariant& o1, QVariant& o2) override;
/// @brief 获取指定参数的当前值(供子项内部查询用)
/// @param sPara 参数名称
/// @param o 输出值
/// @param bOk 是否成功获取
virtual void slotGetValueOf(QString sPara, QVariant& o, bool& bOk) override;
};

@ -0,0 +1,73 @@
#pragma once
#include "iDlgBase.h"
#include "nmSubWxs_global.h"
class nmGridRowUtils;
/// @brief PEBI求解器专用的参数输入/编辑属性对话框窗体
/// @note 与 nmWxParaProperty 结构一致,区别在于内部使用 nmGridRowUtilsNM子类
/// 而非基类 iGridRowUtils以隔离基类接口变更对NM模块的影响
class NM_SUB_WXS_EXPORT nmWxParaPropertyPebi : public iDlgBase
{
Q_OBJECT
public:
explicit nmWxParaPropertyPebi(QWidget* parent = 0);
~nmWxParaPropertyPebi();
// 初始化
virtual void initUI();
void initUI_HelpBox();
/// @brief 刷新参数属性载体的入口
/// @param listParas (in) 参数列表,可以是英文也可以是中文
/// @param bReserveOlds (in) 是否保留原来比如原先属性页已经有s和k这时候新的列表里面也包括s和k
/// @note 参数列表必须是在系统中配置的参数listParas已经包括了显示顺序
/// 但对于层级,由系统配置来决定
virtual void refreshUIs(QStringList& listParas, bool bReserveOlds = true);
// 允许备份/恢复原有的参数内容
virtual void backupOldParas(QMap<QString, QVariant>& map,
QStringList& listParas);
virtual void restoreOldParas(QMap<QString, QVariant>& map);
// 从各个Wx中遍历查找设置/获取参数值
virtual bool setParaValue(QString sPara, QVariant o);
virtual bool getParaValue(QString sPara, QVariant& o);
// 返回所有参数Key为英文ID
virtual bool getAllParaValues(QMap<QString, QVariant>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
virtual bool getAllParaUnits(QMap<QString, QString>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
public slots:
// help msg
virtual void slotHelpMsg(QString& s);
protected:
virtual void paintEvent(QPaintEvent*);
protected:
// 布局器
QVBoxLayout* m_pMainLayout;
// 属性参数列表及载体使用NM子类
QStringList m_listParas;
nmGridRowUtils* m_pGridItemUtils;
// Help
QTextEdit* m_pHelpBox;
};

@ -0,0 +1,152 @@
#include "nmGridRowUtils.h"
// ================================================================
// 构造与析构
// ================================================================
nmGridRowUtils::nmGridRowUtils(bool bSimple, QWidget* parent)
: iGridRowUtils(bSimple, parent)
{
}
nmGridRowUtils::~nmGridRowUtils()
{
}
// ================================================================
// 初始化与构建
// ================================================================
void nmGridRowUtils::initUI()
{
// 当前直接转发至基类后续可在此添加NM模块特有的初始化逻辑
iGridRowUtils::initUI();
}
bool nmGridRowUtils::buildRowUtils(QStringList listParas,
bool bDnMode,
QWidget* pWxDlg)
{
// 当前直接转发至基类,后续可在此拦截参数列表或做前置/后置处理
return iGridRowUtils::buildRowUtils(listParas, bDnMode, pWxDlg);
}
// ================================================================
// 参数读写
// ================================================================
bool nmGridRowUtils::setParaValue(QString sPara, QVariant o)
{
return iGridRowUtils::setParaValue(sPara, o);
}
bool nmGridRowUtils::getParaValue(QString sPara, QVariant& o)
{
return iGridRowUtils::getParaValue(sPara, o);
}
bool nmGridRowUtils::getAllParaValues(QMap<QString, QVariant>& map,
bool bOnlyFitted,
bool bClearMap)
{
return iGridRowUtils::getAllParaValues(map, bOnlyFitted, bClearMap);
}
bool nmGridRowUtils::getAllParaUnits(QMap<QString, QString>& map,
bool bOnlyFitted,
bool bClearMap)
{
return iGridRowUtils::getAllParaUnits(map, bOnlyFitted, bClearMap);
}
// ================================================================
// 参数项查找
// ================================================================
iGridRowItem* nmGridRowUtils::getItemByPara(QString sPara)
{
return iGridRowUtils::getItemByPara(sPara);
}
QVariant nmGridRowUtils::getItemValueByPara(QString sPara)
{
return iGridRowUtils::getItemValueByPara(sPara);
}
// ================================================================
// 参数来源标识
// ================================================================
void nmGridRowUtils::setParaSrcTag(QString s)
{
// 基类已有实现,直接转发
iGridRowUtils::setParaSrcTag(s);
}
// ================================================================
// 序列化
// ================================================================
void nmGridRowUtils::onSerialize(ZxSerializer* ser)
{
iGridRowUtils::onSerialize(ser);
}
void nmGridRowUtils::onDeserialize(ZxSerializer* ser)
{
iGridRowUtils::onDeserialize(ser);
}
// ================================================================
// 结果组织
// ================================================================
bool nmGridRowUtils::organizeResults(QVector<iResultInfo>& vec,
QString sType,
bool bMultiPhase)
{
return iGridRowUtils::organizeResults(vec, sType, bMultiPhase);
}
// ================================================================
// 内部构建protected
// ================================================================
bool nmGridRowUtils::_buildRowUtils(QStringList listParas,
iGridRowItem* pItemParent,
bool bDnMode,
bool bProperOrder)
{
return iGridRowUtils::_buildRowUtils(listParas, pItemParent, bDnMode, bProperOrder);
}
bool nmGridRowUtils::createAndAddItem(iGridRowItem* pParent,
iParameter* p,
QString sPara)
{
return iGridRowUtils::createAndAddItem(pParent, p, sPara);
}
void nmGridRowUtils::connectSignalsOf(iGridRowItem* p)
{
iGridRowUtils::connectSignalsOf(p);
}
void nmGridRowUtils::bindItems()
{
iGridRowUtils::bindItems();
}
// ================================================================
// 槽函数
// ================================================================
void nmGridRowUtils::slotValuePrevChanged(QVariant& o1, QVariant& o2)
{
iGridRowUtils::slotValuePrevChanged(o1, o2);
}
void nmGridRowUtils::slotGetValueOf(QString sPara, QVariant& o, bool& bOk)
{
iGridRowUtils::slotGetValueOf(sPara, o, bOk);
}

@ -41,9 +41,13 @@
#include "nmDataAnalyzeManager.h"
#include "iRibbonXmlTab.h"
#include "nmWxParameterProperty.h"
#include "nmWxParaPropertyPebi.h"
#include "nmWxNumericalDesign.h"
#include "nmDataOutline.h"
#include "iSysParaHelper.h"
#include "mModuleDefines.h"
#include "ZxRstWnd.h"
#include "nmWxChangeAnal.h"
@ -83,6 +87,16 @@ nmSubWndUtils::nmSubWndUtils()
{
m_pMainWnd = nullptr;
m_pTabWx = nullptr;
// 加载NM模块专用参数定义XMLBin/XmlFiles/ModelParaDefinesNM_cn.xml
{
QString sXmlDir = ZxBaseUtil::getDirOf(s_Dir_Config, zxAppID);
QString sFileNm = QString("%1ModelParaDefinesNM_cn.xml").arg(sXmlDir);
if (!_paraHelper->loadParaDefines(sFileNm, s_Nm_Serie))
{
zxLogInstance::getInstance()->writeLogF("Failed to load NM para defines: " + sFileNm);
}
}
}
nmSubWndUtils::~nmSubWndUtils() {}
@ -352,35 +366,6 @@ bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
return false;
}
// 如果当前分析没有对应相态的PVT相关参数提示并返回
//PvtFluidType eType = pSubWndF->getBasicPft();
//bool bHasPvtData = false;
//if(eType == WFT_Oil) {
// bHasPvtData = hasPvtCurve(pSubWndF, WFT_Oil, QStringList() << "Rs" << "Bo" << "Co" << "Rhoo" << "Miuo");
//} else if(eType == WFT_Gas) {
// bHasPvtData = hasPvtCurve(pSubWndF, WFT_Gas, QStringList() << "Rv" << "Bg" << "Cg" << "Miug" << "Rhog" << "Zg");
//} else if(eType == WFT_Water) {
// bHasPvtData = hasPvtCurve(pSubWndF, WFT_Water, QStringList() << "Rsw" << "Bw" << "Cw" << "Miuw" << "Rhow");
//} else if(eType == WFT_Oil_Water) {
// bHasPvtData = hasPvtCurve(pSubWndF, WFT_Oil, QStringList() << "Rs" << "Bo" << "Co" << "Rhoo" << "Miuo")
// || hasPvtCurve(pSubWndF, WFT_Water, QStringList() << "Rsw" << "Bw" << "Cw" << "Miuw" << "Rhow");
//}
//if(!bHasPvtData) {
// QString appDir = QCoreApplication::applicationDirPath();
// appDir = appDir.section('/', 0, -2); // 获取上一级目录
// QMessageBox msgBox;
// msgBox.setWindowTitle(tr("PVT Data Missing"));
// msgBox.setText(tr("Please check if PVT parameters have been calculated in the analysis."));
// msgBox.setIconPixmap(QPixmap(appDir + "/Res/Icon/NmPVTDataMissMessage.png")); // PVT 参数计算向导
// msgBox.setStandardButtons(QMessageBox::Ok);
// msgBox.exec();
// return false;
//}
iDockBaseWx* pWxDockNm1 = pSubWndF->getNmDockWx(0);
iDockBaseWx* pWxDockNm2 = pSubWndF->getNmDockWx(1);
Q_ASSERT (nullptr != pWxDockNm1);
@ -598,7 +583,13 @@ bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
//QTextEdit* pWx1 = new QTextEdit("This is demo for upper");
//QTextEdit* pWx2 = new QTextEdit("This is demo for lower");
nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign();
nmWxParameterProperty* pParaWx = new nmWxParameterProperty();
nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi();
pParaWx->initUI();
QStringList listParas;
listParas << "h" << "Pi" << "K" << "phi" << "Cti" << "Cf" << "Soi" << "Swi";
pParaWx->refreshUIs(listParas);
// 建立求解调用连接
connect(pAnalWx, SIGNAL(sigGenerateClicked()),

@ -0,0 +1,260 @@
#include "zxLogInstance.h"
#include "ZxResolutionHelper.h"
#include "zxSysUtils.h"
#include "mModuleDefines.h"
#include "iParaItemCtrl.h"
#include "iParameterUtils.h"
#include "iGridRowItem.h"
#include "nmGridRowUtils.h"
#include "nmWxParaPropertyPebi.h"
nmWxParaPropertyPebi::nmWxParaPropertyPebi(QWidget* parent) :
iDlgBase(parent)
{
m_pMainLayout = nullptr;
m_listParas.clear();
m_pGridItemUtils = nullptr;
m_pHelpBox = nullptr;
setWindowTitle(tr("Numerical para property"));
}
nmWxParaPropertyPebi::~nmWxParaPropertyPebi()
{
if (nullptr != m_pGridItemUtils)
{
delete m_pGridItemUtils;
m_pGridItemUtils = nullptr;
}
}
void nmWxParaPropertyPebi::initUI()
{
m_pMainLayout = new QVBoxLayout();
Q_ASSERT(nullptr != m_pMainLayout);
m_pMainLayout->setSpacing(0);
m_pMainLayout->setMargin(0);
m_pMainLayout->setSizeConstraint(QVBoxLayout::SetMinAndMaxSize);
// 以ScrollArea来显示出现滚动条
{
QWidget* pWxBk = new QWidget();
Q_ASSERT(nullptr != pWxBk);
pWxBk->setContextMenuPolicy(Qt::CustomContextMenu);
pWxBk->setAutoFillBackground(true);
pWxBk->setLayout(m_pMainLayout);
// Area, 设置Widget
QScrollArea* pArea = new QScrollArea();
pArea->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
pArea->setWidgetResizable(true);
pArea->setWidget(pWxBk);
pArea->setContextMenuPolicy(Qt::CustomContextMenu);
// Layout, 设置Area
QVBoxLayout* pLayoutBk = new QVBoxLayout();
pLayoutBk->setSpacing(0);
pLayoutBk->setMargin(0);
pLayoutBk->addWidget(pArea);
initUI_HelpBox();
if (nullptr != m_pHelpBox)
{
pLayoutBk->addWidget(m_pHelpBox);
}
setLayout(pLayoutBk);
}
}
void nmWxParaPropertyPebi::initUI_HelpBox()
{
// Sub: HelpBox
m_pHelpBox = new QTextEdit();
Q_ASSERT(nullptr != m_pHelpBox);
m_pHelpBox->setMaximumHeight(_resoSizeH(65));
m_pHelpBox->setReadOnly(true);
}
void nmWxParaPropertyPebi::refreshUIs(QStringList& listParas, bool bReserveOlds /*= true*/)
{
if (nullptr == m_pMainLayout)
{
return;
}
m_listParas = listParas;
// 备份原有的参数内容
QMap<QString, QVariant> mapOldParas;
mapOldParas.clear();
if (bReserveOlds)
{
backupOldParas(mapOldParas, listParas);
}
// Clear Old
QVBoxLayout* pLayout = m_pMainLayout;
clearChildrenOfLayout(pLayout, this);
// 创建PEBI求解器专用的GridRowUtils
m_pGridItemUtils = new nmGridRowUtils(true);
Q_ASSERT(nullptr != m_pGridItemUtils);
m_pGridItemUtils->setParent(this);
m_pGridItemUtils->setParaSrcTag(s_Nm_Serie);
connect(m_pGridItemUtils, SIGNAL(sigHelpMsg(QString&)),
this, SLOT(slotHelpMsg(QString&)));
m_pMainLayout->addWidget(m_pGridItemUtils);
m_pGridItemUtils->buildRowUtils(listParas, false, this);
// 恢复原有的参数内容
if (bReserveOlds && !mapOldParas.isEmpty())
{
restoreOldParas(mapOldParas);
}
}
void nmWxParaPropertyPebi::backupOldParas(QMap<QString, QVariant>& map,
QStringList& listParas)
{
map.clear();
if (nullptr != m_pGridItemUtils)
{
foreach (QString s, listParas)
{
map[s] = m_pGridItemUtils->getItemValueByPara(s);
}
}
}
void nmWxParaPropertyPebi::restoreOldParas(QMap<QString, QVariant>& map)
{
if (nullptr == m_pGridItemUtils)
return;
// 恢复先前备份的数据
QMap<QString, QVariant>::iterator iter = map.begin();
for (; iter != map.end(); iter++)
{
QString sPara = iter.key();
iParameter* p = _paraHelper->getPara(sPara, s_Nm_Serie);
if (nullptr == p || p->m_bReadonly)
{
continue;
}
QVariant o = iter.value();
if (!o.isValid())
{
continue;
}
m_pGridItemUtils->setParaValue(sPara, o);
}
}
bool nmWxParaPropertyPebi::setParaValue(QString sPara, QVariant o)
{
if (nullptr != m_pGridItemUtils &&
m_pGridItemUtils->setParaValue(sPara, o))
{
return true;
}
return false;
}
bool nmWxParaPropertyPebi::getParaValue(QString sPara, QVariant& o)
{
if (nullptr != m_pGridItemUtils)
{
if (m_pGridItemUtils->getParaValue(sPara, o))
{
return true;
}
}
return false;
}
bool nmWxParaPropertyPebi::getAllParaValues(QMap<QString, QVariant>& map,
bool bOnlyFitted/* = false*/,
bool bClearMap /*= true*/)
{
if (bClearMap)
{
map.clear();
}
if (nullptr != m_pGridItemUtils)
{
if (!m_pGridItemUtils->getAllParaValues(map, bOnlyFitted, false))
{
return false;
}
}
return true;
}
bool nmWxParaPropertyPebi::getAllParaUnits(QMap<QString, QString>& map,
bool bOnlyFitted/* = false*/,
bool bClearMap /*= true*/)
{
if (nullptr != m_pGridItemUtils &&
!m_pGridItemUtils->getAllParaUnits(map, bOnlyFitted, false))
{
return false;
}
return true;
}
void nmWxParaPropertyPebi::onSerialize(ZxSerializer* ser)
{
iDlgBase::onSerialize(ser);
ser->write("ParaLists", m_listParas);
if (nullptr != m_pGridItemUtils)
{
m_pGridItemUtils->onSerialize(ser);
}
}
void nmWxParaPropertyPebi::onDeserialize(ZxSerializer* ser)
{
iDlgBase::onDeserialize(ser);
m_bUnableSP = true;
m_listParas.clear();
ser->read("ParaLists", m_listParas);
refreshUIs(m_listParas);
if (nullptr != m_pGridItemUtils)
{
m_pGridItemUtils->onDeserialize(ser);
}
m_bUnableSP = false;
}
// help msg
void nmWxParaPropertyPebi::slotHelpMsg(QString& s)
{
if (nullptr == m_pHelpBox)
{
return;
}
m_pHelpBox->setHtml(s);
}
void nmWxParaPropertyPebi::paintEvent(QPaintEvent* e)
{
iDlgBase::paintEvent(e);
}

@ -18,7 +18,35 @@ HEADERS += $${wtInclude}/nmNum/nmGUI/*.h \
INCLUDEPATH += $${geoHome}/3rd/JSON/rapidjson-1.1.0/include/ \
INCLUDEPATH += $${wtInclude}/nmNum/nmGUI \
$${wtInclude}/nmNum/nmData
# iBase 基础层iDlgBase.h -> ZxUiBase.h / Defines.h / ZxBaseUtil.h 等)
INCLUDEPATH += $${wtInclude}/iBase
INCLUDEPATH += $${wtInclude}/iBase/iBase
INCLUDEPATH += $${wtInclude}/iBase/Interface
INCLUDEPATH += $${wtInclude}/iBase/iDefines
INCLUDEPATH += $${wtInclude}/iBase/iUtils
INCLUDEPATH += $${wtInclude}/iBase/iLogs
INCLUDEPATH += $${wtInclude}/iBase/iPlugin
INCLUDEPATH += $${wtInclude}/iBase/iProperty
INCLUDEPATH += $${wtInclude}/iBase/iUnit
INCLUDEPATH += $${wtInclude}/iBase/iXmlBase
# iGui 界面层
INCLUDEPATH += $${wtInclude}/iGui/iGuiBase
INCLUDEPATH += $${wtInclude}/iGui/iGuiGridPty
# iData 数据层
INCLUDEPATH += $${wtInclude}/iData
INCLUDEPATH += $${wtInclude}/iData/iDataPool
INCLUDEPATH += $${wtInclude}/iData/iDataEngine
INCLUDEPATH += $${wtInclude}/iData/iXmlManager
INCLUDEPATH += $${wtInclude}/iData/iXmlManager/Models
INCLUDEPATH += $${wtInclude}/iData/iSysUtils
# nmNum 数值解模块
INCLUDEPATH += $${wtInclude}/nmNum/nmGUI
INCLUDEPATH += $${wtInclude}/nmNum/nmData
LIBS += -lnmData
LIBS += -liBase -liUtils -liPlugin -liLogs -liProperty -liUnit -liXmlBase
LIBS += -liDataPool -liSysUtils -liDataEngine
LIBS += -liGuiBase -liGuiGridPty

Loading…
Cancel
Save