-
软件版本:20260720
+
软件版本:20260819
+
+- 优化:气相拟压力换算问题,解决压力史锯齿问题
+- 优化:不再启用两条实际压力导数,模型统一进行处理
+- 调整:流动段选择压力曲线改为点模式
+- 修复:表皮系数输入负值,在切换不同模型之后,保持红色的问题
+- 修复:所有水平井模型下井储系数单位不显示
+- 修复:PVT拟压力表格在加载成果模式下无法查看
+- 修复:PVT拟压力表格单位不对
+- 修复:属性表下拉组件扩充int类型支持(产能)
+- 修复:产量单位换算有误
+- 修复:Miug计算Lee方法算法问题
+- 修复:当反序列化时,需要重置左侧表格,否则会重复添加,导致两个压力两个流量
+
+
+
软件版本:20260731
+
+- 修复:PVT高级按钮刷新无效问题
+- 修复:单位配置的数据项与原先不一致,导致老工区加载出问题
+- 修复:非bj的Serie加载文件无效问题
+- 修复:打开wtf工区如果工区名称与路径不一致会导致无法加载
+- 新增:产能模块流程集成代码基本完成,有待进行算法挂接
+- 优化:异常崩溃dmp文件支持定位文件目录,方便发送给技术人员
+- 优化:产能基础模型视图增加y轴上下颠倒
+
+
+
软件版本:20260726
+
+- 修复:PVT参数序列化(ParaCtrl)问题修复
+- 修复:表格水平滚动后,个别单位下拉无法激活
+- 修复:基础数据等表格表头显示不了
+- 优化:UnitBinder统一序列化接口,含序列化+克隆接口
+- 优化:理论压力导数样式优化(黑/粗一些)
+- 优化:特征线显示样式优化(水平部分比45°粗一些)
+
+
+
软件版本:20260723
+
+- 修复:修改参数后直接点击解析解,修改无效(焦点问题,信号关联不一致,由单位下拉功能引起)
+- 修复:粘贴式加载数据有时候导致卡顿的情形(由单位下拉功能引起)
+- 修复:时间格式数据的起始行判断规则优化
+- 修复:井储单位换算弄反
+
+
+
软件版本:20260720
- 优化:调整优化直井平行、交叉、矩形边界等北京模型相关内容
- 优化:规范水平井支持的边界类型,不支持变灰
@@ -92,16 +136,20 @@ div.block_latest
- 优化:表格粘贴时自动匹配标题信息
- 新增:新增 SubGroupTag:显示的子项分组的名称
- 新增:温度数据加载
-- 新增:多相产量数据加载,改变原先在选择PVT界面加载的方式
+- 新增:多相产量数据加载,改变原先在选择PVT界面加载的方式
- 新增:数据加载,自动解析行列名称及单位(模糊关联)
- 新增:单位允许下拉调整,保存时自动转换为系统内部数据单位
- 新增:自动判断起始行
- 新增:增加tryparse接口,方便快速解析基础信息
- 新增:注册构建智能试井相关模块接口及对象
-- 修复:地层压力参与自动拟合的逻辑修复(上几个版本总是需要好多次拟合)
+- 修复:地层压力参与自动拟合的逻辑修复(上几个版本总是需要好多次拟合)
+- 修复:数据加载时间列单位未进行转换
- 修复:双对数图 滚动放大缩小时候,刻度显示不出来问题
- 修复:Excel如果左侧或上侧为空的话,其初始是从 m_nRowStart和m_nColStart开始的,已经修复
- 修复:单位转换出现负值问题
+- 修复:数据加载时间列单位无法自动切换(新版本已经自动规避该问题)
+- 修复:自动拟合引起的Pit问题
+- 调整:敏感性分析图形的y轴名称更改与双对数保持一致
软件版本:20260703
diff --git a/Bin/Res/Icon/WdtAnal.png b/Bin/Res/Icon/WdtAnal.png
new file mode 100644
index 00000000..5e866d3c
Binary files /dev/null and b/Bin/Res/Icon/WdtAnal.png differ
diff --git a/Bin/Res/Icon/WdtBore.png b/Bin/Res/Icon/WdtBore.png
new file mode 100644
index 00000000..898f8202
Binary files /dev/null and b/Bin/Res/Icon/WdtBore.png differ
diff --git a/Bin/Res/Icon/WdtCal.png b/Bin/Res/Icon/WdtCal.png
new file mode 100644
index 00000000..8e72cdee
Binary files /dev/null and b/Bin/Res/Icon/WdtCal.png differ
diff --git a/Bin/Res/Icon/WdtChoke.png b/Bin/Res/Icon/WdtChoke.png
new file mode 100644
index 00000000..898f8202
Binary files /dev/null and b/Bin/Res/Icon/WdtChoke.png differ
diff --git a/Bin/Res/Icon/WdtExt.png b/Bin/Res/Icon/WdtExt.png
new file mode 100644
index 00000000..898f8202
Binary files /dev/null and b/Bin/Res/Icon/WdtExt.png differ
diff --git a/Bin/Res/Icon/WdtGwlcc.png b/Bin/Res/Icon/WdtGwlcc.png
new file mode 100644
index 00000000..54509015
Binary files /dev/null and b/Bin/Res/Icon/WdtGwlcc.png differ
diff --git a/Bin/Res/Icon/WdtMF.png b/Bin/Res/Icon/WdtMF.png
new file mode 100644
index 00000000..898f8202
Binary files /dev/null and b/Bin/Res/Icon/WdtMF.png differ
diff --git a/Bin/Res/Icon/WdtModel.png b/Bin/Res/Icon/WdtModel.png
new file mode 100644
index 00000000..10c6b4d5
Binary files /dev/null and b/Bin/Res/Icon/WdtModel.png differ
diff --git a/Bin/Res/Icon/WdtPVT.png b/Bin/Res/Icon/WdtPVT.png
new file mode 100644
index 00000000..898f8202
Binary files /dev/null and b/Bin/Res/Icon/WdtPVT.png differ
diff --git a/Bin/Res/Icon/WdtPdp.png b/Bin/Res/Icon/WdtPdp.png
new file mode 100644
index 00000000..121d66d5
Binary files /dev/null and b/Bin/Res/Icon/WdtPdp.png differ
diff --git a/Bin/Res/Icon/WdtRpc.png b/Bin/Res/Icon/WdtRpc.png
new file mode 100644
index 00000000..898f8202
Binary files /dev/null and b/Bin/Res/Icon/WdtRpc.png differ
diff --git a/Bin/Res/Icon/WdtTipc.png b/Bin/Res/Icon/WdtTipc.png
new file mode 100644
index 00000000..875e2e4c
Binary files /dev/null and b/Bin/Res/Icon/WdtTipc.png differ
diff --git a/Bin/XmlFiles/BtnCmds_cn.xml b/Bin/XmlFiles/BtnCmds_cn.xml
index 692ea864..66be851f 100644
--- a/Bin/XmlFiles/BtnCmds_cn.xml
+++ b/Bin/XmlFiles/BtnCmds_cn.xml
@@ -83,6 +83,7 @@
+
diff --git a/Bin/XmlFiles/MenuDefines_Ribbon_cn.xml b/Bin/XmlFiles/MenuDefines_Ribbon_cn.xml
index 83d77318..4a01dc1b 100644
--- a/Bin/XmlFiles/MenuDefines_Ribbon_cn.xml
+++ b/Bin/XmlFiles/MenuDefines_Ribbon_cn.xml
@@ -92,11 +92,12 @@
-
+
+
@@ -106,6 +107,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -193,12 +204,13 @@
+
@@ -330,9 +342,9 @@
-
+
-
+
@@ -342,23 +354,32 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -391,7 +412,7 @@
-
+
@@ -411,7 +432,7 @@
-
+
@@ -430,7 +451,7 @@
-
+
diff --git a/Bin/XmlFiles/ModelParaDefinesLP_cn.xml b/Bin/XmlFiles/ModelParaDefinesLP_cn.xml
index 1dcfff19..9d20ebb1 100644
--- a/Bin/XmlFiles/ModelParaDefinesLP_cn.xml
+++ b/Bin/XmlFiles/ModelParaDefinesLP_cn.xml
@@ -202,6 +202,8 @@
+
+
@@ -277,6 +279,8 @@
+
+
@@ -518,6 +522,7 @@
+
diff --git a/Bin/XmlFiles/UnitDefault_cn.xml b/Bin/XmlFiles/UnitDefault_cn.xml
index fa19649e..5be9a918 100644
--- a/Bin/XmlFiles/UnitDefault_cn.xml
+++ b/Bin/XmlFiles/UnitDefault_cn.xml
@@ -1,6 +1,7 @@
+
@@ -166,7 +167,7 @@
-
+
@@ -204,8 +205,8 @@
-
-
+
+
@@ -331,14 +332,18 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/Bin/XmlFiles/UnitDefault_en.xml b/Bin/XmlFiles/UnitDefault_en.xml
index 3c4111b4..b6fa1198 100644
--- a/Bin/XmlFiles/UnitDefault_en.xml
+++ b/Bin/XmlFiles/UnitDefault_en.xml
@@ -46,7 +46,7 @@
-
+
diff --git a/Bin/XmlFiles/WTAI_Attributes_cn.xml b/Bin/XmlFiles/WTAI_Attributes_cn.xml
index 192ef080..5e7d85fe 100644
--- a/Bin/XmlFiles/WTAI_Attributes_cn.xml
+++ b/Bin/XmlFiles/WTAI_Attributes_cn.xml
@@ -1,4 +1,4 @@
-
+
@@ -9,14 +9,14 @@
-
-
+
+
-
-
+
+
diff --git a/Include/iAlg/iAlgMath/zxBessel.h b/Include/iAlg/iAlgMath/zxBessel.h
index adf848fe..fb92690a 100644
--- a/Include/iAlg/iAlgMath/zxBessel.h
+++ b/Include/iAlg/iAlgMath/zxBessel.h
@@ -11,27 +11,6 @@ public:
zxBessel();
~zxBessel();
-public:
-
- // 202604 由殷维基于PF需要进行贝塞尔函数扩充,不限于0和1,而是改为传递double分数
- // 在此基础上,解航提出,解析模型采用该方法,可以规避震荡问题(但是目前只用到novel_besselk)
-
- // 第一类修正贝塞尔函数 I_nu(z)
- // 注:该函数目前只被yinw算法应用
- // 1.算法由yinw提供,后来因为震荡,经xieh针对溢出进行修改
- // 2.但后来随着yinw算法调整,调用该函数发现,xieh修改不妥
- // 只好再次倒回去
- // 幸亏xieh本身没有用到该函数
- // 后续还是需要进一步完善优化该函数的
- static double novel_besseli(double nu, double z);
-
- // 第二类修正贝塞尔函数 K_nu(z)
- // 注:该函数目前被yinw算法+xieh算法中均有应用
- static double novel_besselk(double nu, double z);
-
- // 纯手工实现伽马函数 Gamma(z)
- static double bessel_gamma(double z);
-
public:
// 贝塞尔函数(基础函数部分)
diff --git a/Include/iAlg/iAlgMath/zxBesselScaler.h b/Include/iAlg/iAlgMath/zxBesselScaler.h
new file mode 100644
index 00000000..35a38ab2
--- /dev/null
+++ b/Include/iAlg/iAlgMath/zxBesselScaler.h
@@ -0,0 +1,58 @@
+#pragma once
+
+#include "math.h"
+#include "zxHugeNum.h"
+
+// 贝塞尔函数(支持缩放)
+// 202604 由殷维基于PF需要进行贝塞尔函数扩充,不限于0和1,而是改为传递double分数
+// 在此基础上,解航提出,解析模型采用该方法,可以规避震荡问题(但是目前只用到novel_besselk)
+
+
+// 10点Gauss-Legendre求积的节点和权重
+
+namespace GaussLegendre {
+
+ static const int GL_Size = 10;
+
+ static const double GL_X[GL_Size] = {
+ 0.076526521133497, 0.227785851141645, 0.373706088715419,
+ 0.510867001950827, 0.636053680726515, 0.746331906460150,
+ 0.839116971822218, 0.912234428251325, 0.963971927277913,
+ 0.993128599185094
+ };
+
+ static const double GL_W[GL_Size] = {
+ 0.152753387130725, 0.149172986472603, 0.142096109318382,
+ 0.131688638449176, 0.118194531961518, 0.101930119817240,
+ 0.083276741576704, 0.062672048334109, 0.040601429800386,
+ 0.017614007139152
+ };
+}
+
+class I_ALGMATH_EXPORT zxBesselScaler
+{
+public:
+
+ zxBesselScaler();
+ ~zxBesselScaler();
+
+public:
+
+ // 第一类修正贝塞尔函数 I_nu(z)
+ // 注:该函数目前只被yinw算法应用
+ // 1.算法由yinw提供,后来因为震荡,经xieh针对溢出进行修改
+ // 2.但后来随着yinw算法调整,调用该函数发现,xieh修改不妥
+ // 只好再次倒回去
+ // 幸亏xieh本身没有用到该函数
+ // 后续还是需要进一步完善优化该函数的
+ static double besseli(double nu, double z);
+
+ // 第二类修正贝塞尔函数 K_nu(z)
+ // 注:该函数目前被yinw算法+xieh算法中均有应用
+ static double besselk(double nu, double z);
+
+ // 伽马函数 Gamma(z)
+ static double gamma(double z);
+
+};
+
diff --git a/Include/iAlg/iAlgMath/zxMathBase.h b/Include/iAlg/iAlgMath/zxMathBase.h
index d8de7cc1..9084b43c 100644
--- a/Include/iAlg/iAlgMath/zxMathBase.h
+++ b/Include/iAlg/iAlgMath/zxMathBase.h
@@ -50,4 +50,8 @@ public:
/// 查找幂
static double findDevision(double dValue);
+
+ // 该函数不具有可扩展性,放在此处只是后续借鉴及进一步扩展
+ // 高斯消元求解 6x6 线性方程组
+ static bool solveLinear6x6(double A[6][6], double b[6], double x[6]);
};
diff --git a/Include/iBase/iPlugin/ZxSplitterWx.h b/Include/iBase/iPlugin/ZxSplitterWx.h
index 052145b6..31df343c 100644
--- a/Include/iBase/iPlugin/ZxSplitterWx.h
+++ b/Include/iBase/iPlugin/ZxSplitterWx.h
@@ -42,18 +42,18 @@ public:
void setCellWidget(int row, int col, QWidget* pWx);
/// @brief É趨´óС±ÈÀýÒò×ӣ¨ÕûÊý£©
- /// @param vecHs ˮƽ·½Ïò
- /// @param vecVs Êúֱ·½Ïò
+ /// @param vecHs ˮƽ·½ÏÖ
+ /// @param vecVs Êúֱ·½ÏÖ
/// @note £¨1£©ÇëÔÚWidgetȫ²¿ÉèÖã¨setCellWidget£©Íê±Ϻóµ÷Óñ¾º¯Êý
/// £¨2£©Èç¹ûij·½Ïò²»ÐèÉèÖã¬Ôò´«ÈëVecIntΪ¿ռ´¿É
void setSpStrenchSizes(const QList& vecHs, const QList& vecVs);
- /// @brief É趨Ö÷·ָîÆ÷(´¹ֱ²¼¾Ö)´óС±ÈÀýÒò×ӣ¨ÕûÊý£©
+ /// @brief É趨Ö÷·ָîÆ÷(Êúֱ·½ÏÖ)´óС±ÈÀýÒò×ӣ¨ÕûÊý£©
/// @param vecSizes
/// @note ÇëÔÚWidgetȫ²¿ÉèÖã¨setCellWidget£©Íê±Ϻóµ÷Óñ¾º¯Êý
void setSpMainSizes(const QList& vecSizes);
- /// @brief É趨Ö÷·ָîÆ÷(´¹ֱ²¼¾Ö)´óС±ÈÀýÒò×ӣ¨ÕûÊý£©
+ /// @brief É趨´ηָîÆ÷(ˮƽ·½ÏÖ)´óС±ÈÀýÒò×ӣ¨ÕûÊý£©
/// @param vecSizes
/// @note ÇëÔÚWidgetȫ²¿ÉèÖã¨setCellWidget£©Íê±Ϻóµ÷Óñ¾º¯Êý
void setSpSubSizes(int r, const QList& vecSizes);
diff --git a/Include/iBase/iPlugin/ZxTableView.h b/Include/iBase/iPlugin/ZxTableView.h
index 3c1858a0..aad8324d 100644
--- a/Include/iBase/iPlugin/ZxTableView.h
+++ b/Include/iBase/iPlugin/ZxTableView.h
@@ -208,6 +208,13 @@ signals:
void sigParseContents(const QString& s, VVecVariant& vvec, \
const int& left, const int& top);
+ /// @brief 粘贴完毕,触发一个信号
+ /// @param nRowFrom 粘贴位置,起始行号,从0开始
+ /// @param nColFrom 粘贴位置,起始列号,从0开始
+ /// @param nRowTo 粘贴位置,结束行号,从0开始
+ /// @param nColTo 粘贴位置,结束列号,从0开始
+ void sigPasteFinished(int nRowFrom, int nColFrom, int nRowTo, int nColTo);
+
protected:
// 右键
diff --git a/Include/iData/iFileEngine/iCsvFileHelper.h b/Include/iData/iFileEngine/iCsvFileHelper.h
new file mode 100644
index 00000000..27dcb3b6
--- /dev/null
+++ b/Include/iData/iFileEngine/iCsvFileHelper.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include
+#include "Defines.h"
+
+#include "iFileEngine_global.h"
+
+class I_FILE_ENGINE_EXPORT iCsvFileHelper
+{
+public:
+
+ iCsvFileHelper();
+ ~iCsvFileHelper();
+
+public:
+
+ // 获取最后一次错误信息
+ QString getLastError() const { return m_sError; }
+
+ // 清除错误信息
+ void clearError() { m_sError.clear(); }
+
+ // 保存QPointF向量到CSV (每行一个点,x和y作为两列)
+ bool saveToCsv(const VecPointF& vecPts, const QStringList& listTitles, const QString& sFile);
+
+ // 保存二维double向量到CSV (每个子向量为一行)
+ bool saveToCsv(const VVecDouble& vvec, const QStringList& listTitles, const QString& sFile);
+
+ // 保存键值对映射到CSV (键作为表头,值作为数据行)
+ bool saveToCsv(const QMap& map, const QStringList& listTitles, const QString& sFile);
+
+ // 保存QStringList到CSV,每个字符串为一行,使用指定的分隔符分割
+ // delimiter: 分隔符字符串,可以包含多个字符,如 ":\t" 表示按 : 或 \t 分割
+ bool saveToCsv(const QStringList& lines, const QStringList& listTitles, const QString& sFile,
+ const QString& seps = ":");
+
+ // 核心保存函数:将二维QVariant向量写入CSV文件
+ bool _saveToCsv(const VVecVariant& vvec, const QStringList& listTitles, const QString& sFile);
+
+private:
+
+ // 辅助函数:将QVariant转换为字符串
+ QString variantToString(const QVariant& value);
+
+ // 设置错误信息
+ void setError(const QString& error) { m_sError = error; }
+
+private:
+ QString
+ m_sError; // 存储最后一次错误信息
+};
diff --git a/Include/iGui/iGuiBase/iDlgBase.h b/Include/iGui/iGuiBase/iDlgBase.h
index 8d7eff3b..3bca4b86 100644
--- a/Include/iGui/iGuiBase/iDlgBase.h
+++ b/Include/iGui/iGuiBase/iDlgBase.h
@@ -28,6 +28,9 @@ public:
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
+ virtual void copyFrom(ZxUiBase* p);
+ virtual void copyOneSubCtrol(QWidget*& pFrom, QWidget*& pTo);
+
// 权宜之计
// 在pCtrl InitUI之前允许部分调整,如参数跟着模型走的调整
virtual void adjustParaInfos(iParameter* pParameter);
diff --git a/Include/iGui/iGuiBase/iParaItemCtrl.h b/Include/iGui/iGuiBase/iParaItemCtrl.h
index 75f80ac4..4ded4cea 100644
--- a/Include/iGui/iGuiBase/iParaItemCtrl.h
+++ b/Include/iGui/iGuiBase/iParaItemCtrl.h
@@ -43,6 +43,15 @@ public:
// 一旦启用该方式,原先的setVisible要改为setChildVisible
void setChildVisible(bool bVisible);
+ // 反人类的函数,本身没有序列化,但借用一下序列化理念
+ void onDeserialized(const quint32& nVer);
+
+ // 临时设置
+ void setUnableSP(bool b); //临时变量
+ bool isUnableSP();
+
+ // 只在copyFrom中用到
+ iUnitWxBinder* getUnitBinder() { return m_pUnitBinder; }
public:
@@ -123,7 +132,9 @@ private slots:
void slotTextChanged(QString s);
void slotCbxIndexChanged(int index);
+#ifdef _SCAN_OLD_CODES_
void slotTextStrChanged();
+#endif
protected slots:
@@ -166,4 +177,6 @@ private:
iUnitWxBinder* m_pUnitBinder;
QString m_sParaSrcTag;
+
+ bool m_bUnableSP; //临时变量
};
diff --git a/Include/iGui/iGuiBase/iUnitWxBinder.h b/Include/iGui/iGuiBase/iUnitWxBinder.h
index d4c1f7b5..706947c7 100644
--- a/Include/iGui/iGuiBase/iUnitWxBinder.h
+++ b/Include/iGui/iGuiBase/iUnitWxBinder.h
@@ -132,6 +132,18 @@ public:
bool bCheckOnly = true, \
double* ptrBaseValue = nullptr);
+ // 序列化之后,理解重置基准数值
+ // 如果pTbx为空,则重置所有的Pair
+ bool onDeserialized(const quint32& nVer, QLineEdit* pTbx = nullptr);
+
+ // 这是在窗体Copy的时候,单独把内部绑定的UnitBinder的基准值改一下
+ // 只是修改基准值
+ bool copyFrom(iUnitWxBinder* p);
+
+ // 临时设置
+ void setUnableSP(bool b); //临时变量
+ bool isUnableSP();
+
signals:
// 触发信号,由外部控制,是否输入OK,比如参数ValidStr校验
@@ -141,6 +153,7 @@ private slots:
void onUnitChanged(int index);
void onEditingFinished();
+ void slotTbxValueChanged(QString s);
void onWidgetDestroyed(QObject* obj);
private:
@@ -160,4 +173,5 @@ private:
// Error
QString m_sError;
+ bool m_bUnableSP; //临时变量
};
diff --git a/Include/iGui/iGuiBase/zxBindWxPair.h b/Include/iGui/iGuiBase/zxBindWxPair.h
index 29b467ad..b8aeaad8 100644
--- a/Include/iGui/iGuiBase/zxBindWxPair.h
+++ b/Include/iGui/iGuiBase/zxBindWxPair.h
@@ -21,6 +21,14 @@ public:
bool isValid() const;
int getLineEditIndex(QLineEdit* pTbx) const;
+ // 序列化之后,理解重置基准数值
+ // 如果pTbx为空,则重置所有的Pair
+ bool onDeserialized(const quint32& nVer, QLineEdit* pTbx = nullptr);
+
+ // 这是在窗体Copy的时候,单独把内部绑定的UnitBinder的基准值改一下
+ // 只是修改基准值
+ bool copyFrom(zxBindWxPair* p);
+
public:
QList > listTbxValues;
diff --git a/Include/iGui/iGuiGridPty/iGridRowItem.h b/Include/iGui/iGuiGridPty/iGridRowItem.h
index 3a490ac8..fb9b09ea 100644
--- a/Include/iGui/iGuiGridPty/iGridRowItem.h
+++ b/Include/iGui/iGuiGridPty/iGridRowItem.h
@@ -151,6 +151,9 @@ public:
QString getTagEx(); //左侧标识,增加一级处理
QString getTips();
+ // 增加新接口(这是左侧显示/绘制用的内容)
+ QString getLeftTag();
+
QString getName(); //Name
QString getNameInner();
virtual void setNameInner(QString s);
diff --git a/Include/iGui/iGuiGridPty/iGridRowUtils.h b/Include/iGui/iGuiGridPty/iGridRowUtils.h
index 39b05859..1c55486c 100644
--- a/Include/iGui/iGuiGridPty/iGridRowUtils.h
+++ b/Include/iGui/iGuiGridPty/iGridRowUtils.h
@@ -383,12 +383,12 @@ public:
virtual bool getParaValue(QString sPara, QVariant& o);
// 返回所有参数,Key为英文ID
- virtual bool getAllParaValues(QMap& map,
- bool bOnlyFitted = false,
+ virtual bool getAllParaValues(QMap& map, \
+ bool bOnlyFitted = false, \
bool bClearMap = true);
- virtual bool getAllParaUnits(QMap& map,
- bool bOnlyFitted = false,
+ virtual bool getAllParaUnits(QMap& map, \
+ bool bOnlyFitted = false, \
bool bClearMap = true);
// 返回所有的跟模型相关的边界参数的类型,封闭或定压
diff --git a/Include/mAlg/mAlgDefines/iParaManager.h b/Include/mAlg/mAlgDefines/iParaManager.h
index bc3e2759..59bc7587 100644
--- a/Include/mAlg/mAlgDefines/iParaManager.h
+++ b/Include/mAlg/mAlgDefines/iParaManager.h
@@ -29,8 +29,10 @@ public:
// 参数传递
void setParaMap(QMap& map);
+#ifdef _SCAN_OLD_CODES_
void setParamUnitMap(QMap& map);
bool getParamValueUnit(QString sPara, QString& sUnit);
+#endif
void setParaValue(QString sPara, double d);
bool getParaValue(QString sPara , double& d);
@@ -141,8 +143,8 @@ public:
public:
// 是否启用混合黏度
- void setEnableMux(bool b);
- bool getEnableMux();
+ void setEnableMiux(bool b);
+ bool isEnableMiux();
// 允许在计算之后,对结果进行个别计算或调整
virtual void adjustParaResults();
@@ -167,7 +169,10 @@ public:
// 单个参数map
QMap m_mapParas;
- QMap m_mapParasUnit;
+
+#ifdef _SCAN_OLD_CODES_
+ QMap m_mapParasUnit;
+#endif
// 参数对应数组
QMap m_mapArrParas;
diff --git a/Include/mAlg/mAlgDefines/mAlgDefines.h b/Include/mAlg/mAlgDefines/mAlgDefines.h
index 7c96b83a..4a1f0cae 100644
--- a/Include/mAlg/mAlgDefines/mAlgDefines.h
+++ b/Include/mAlg/mAlgDefines/mAlgDefines.h
@@ -185,7 +185,8 @@ enum m_Res_Type
// RT_COMP3 = 108, //三区复合
RT_SR_COMP = 350, //径向复合,就是双区
- RT_COMP = 351, //径向复合,20260720,xieh针对直井再次增加,部分流程模拟了 RT_SR_COMP
+ RT_VERT_COMP_2 = 351, //直井 径向复合(两区),20260720,xieh针对直井再次增加,部分流程模拟了 RT_SR_COMP
+ RT_VERT_COMP_3 = 352, //直井 径向复合(三区),20260721,yinw针对直井再次增加
// 其他废弃
@@ -215,6 +216,7 @@ enum m_Res_Type
RT_HMGE_NON_NT_ANAL = 410, //非牛顿
RT_COMP2_NON_NT_NT_ANAL = 411, //非牛顿-牛顿
RT_COMP2_NT_NON_NT_ANAL = 412, //牛顿-非牛顿
+ RT_COMP2_NON_NT_NON_NT_NT_ANAL = 413, //非牛顿-非牛顿-牛顿
//王晓东教授
RT_WXD_LINEPS = 600, //垂直裂缝线源解
diff --git a/Include/mAlg/mAlgPseudo/iAlgPseuConvertCommon.h b/Include/mAlg/mAlgPseudo/iAlgPseuConvertCommon.h
index 482fb8e5..0f04a24f 100644
--- a/Include/mAlg/mAlgPseudo/iAlgPseuConvertCommon.h
+++ b/Include/mAlg/mAlgPseudo/iAlgPseuConvertCommon.h
@@ -19,7 +19,12 @@ public:
/// VecDouble vecMug = vvec[3]
static bool initPs(VVecDouble vvec);
+#ifdef _SCAN_OLD_CODES_
// 系统内部自动选用不同的方法
+#else
+ // 分别于20260123和20260819把函数改为直接进行压力/拟压力查表+插值方法
+ // 更为实用+有效
+#endif
static bool calP(double ps, double &p, int which = -1);
static bool calPS(double p, double &ps, int which = -1);
@@ -33,6 +38,7 @@ private:
static bool fitPStoP(bool isZero = false);
///////////////////////////////////////////////////////////////////////////////////////////
+#ifdef _SCAN_OLD_CODES_
////////////////////////////////////////////////////////////////////////////////
// 回归曲线法
// 压力->拟压力,精度比湛江方法高
@@ -41,13 +47,15 @@ private:
static bool psToP_Cv(double ps, double &p);
////////////////////////////////////////////////////////////////////////////////
+
////////////////////////////////////////////////////////////////////////////////
// 湛江方法
// 压力->拟压力,精度不如回归曲线法,暂未调用
- //static bool pToPs_Zj(double p, double &ps);
+ static bool pToPs_Zj(double p, double &ps);
// 拟压力->压力,精度好于回归曲线法
static bool psToP_Zj(double ps, double &p);
////////////////////////////////////////////////////////////////////////////////
+#endif
private:
diff --git a/Include/mAlg/mAlgPseudo/iAlgPseuConvertTri.h b/Include/mAlg/mAlgPseudo/iAlgPseuConvertTri.h
index 62386065..61bc3dc6 100644
--- a/Include/mAlg/mAlgPseudo/iAlgPseuConvertTri.h
+++ b/Include/mAlg/mAlgPseudo/iAlgPseuConvertTri.h
@@ -41,11 +41,6 @@ private:
// 压力->拟压力,借助三区计算方法来计算(载体),但是这个速度太慢,而且异常太多,主要是积分/0,暂不启用
// static bool pToPs_Ps3Integral(double p, double &ps);
-// // 压力->拟压力,精度比湛江方法高,临时采用
-// static bool pToPs_Cv(double p, double &ps);
-// // 拟压力->压力,精度比湛江方法低,但对于三区来讲,没法反推,只能将就使用
- //static bool psToP_Cv(double ps, double &p);
-
// 20220317 增加新的方式,直接根据数据进行判断,看谁离得最近,则选取谁
static bool pToPs_Simple(double p, double &ps);
diff --git a/Include/mData/mModuleDefines/mModuleDefines.h b/Include/mData/mModuleDefines/mModuleDefines.h
index 941fa72c..87820626 100644
--- a/Include/mData/mModuleDefines/mModuleDefines.h
+++ b/Include/mData/mModuleDefines/mModuleDefines.h
@@ -240,7 +240,8 @@
#define s_Wdt_Wel QObject::tr("Wel")
#define s_Wdt_SubWel QObject::tr("SubWel")
#define s_Wdt_Method QObject::tr("Method")
-#define s_Wdt_AnalOption QObject::tr("AnalOption")
+#define s_Wdt_AnalOption1 QObject::tr("AnalOption")
+#define s_Wdt_AnalOption2 QObject::tr("AnalOptionEx")
#define s_Wdt_P_Pseu QObject::tr("P_Pseu")
#define s_Wdt_P_Square QObject::tr("P_Square")
diff --git a/Include/mData/mProjectManager/mProjectFile.h b/Include/mData/mProjectManager/mProjectFile.h
index dc7671fc..c89436b3 100644
--- a/Include/mData/mProjectManager/mProjectFile.h
+++ b/Include/mData/mProjectManager/mProjectFile.h
@@ -19,7 +19,18 @@ public:
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
- static bool parseProjUrl(QString s, QString& sDir, QString& sProjName);
+ /// @brief 根据wtf或db文件,解析出来工区名称、以及工区文件夹的上一级目录
+ /// @param sUrl:wtf或db文件,全路径
+ /// @param sDir: 工区文件夹的上一级目录
+ /// @param sProjName:工区名称
+ static bool parseProjUrl(const QString& sUrl, QString& sDir, QString& sProjName);
+
+ /// @brief 根据wtf或db文件,确认目录结构是否一致
+ /// @param sUrl:wtf或db文件,全路径
+ /// @note 如果Url文件名称,与其所在的目录名称,不一致,
+ /// 那么是无法正常打开的,需要重命名一下wtf或db文件
+ /// 由用户决定如何继续
+ static bool makesureProjUrl(QString& sUrl);
private:
diff --git a/Include/mData/mSysUtilsWDT.rar b/Include/mData/mSysUtilsWDT.rar
new file mode 100644
index 00000000..4e6e6d41
Binary files /dev/null and b/Include/mData/mSysUtilsWDT.rar differ
diff --git a/Include/mData/mSysUtilsWDT/wdtAlgItem.h b/Include/mData/mSysUtilsWDT/wdtAlgItem.h
index 2feed007..b8f8f928 100644
--- a/Include/mData/mSysUtilsWDT/wdtAlgItem.h
+++ b/Include/mData/mSysUtilsWDT/wdtAlgItem.h
@@ -45,6 +45,7 @@ public:
double m_dB;
QStringList m_listSrcTableCols;
+ int m_nDefaultRows; //默认显示多少行
};
typedef QVector vecWdtAlgItemsPtr;
diff --git a/Include/mData/mSysUtilsWDT/wdtDefineAnal.h b/Include/mData/mSysUtilsWDT/wdtDefineAnal.h
index 8fa8b697..2ee802ab 100644
--- a/Include/mData/mSysUtilsWDT/wdtDefineAnal.h
+++ b/Include/mData/mSysUtilsWDT/wdtDefineAnal.h
@@ -5,7 +5,10 @@
class wdtAlgItem;
+// 该类废弃
+
// 产能方法定义(某井型-井别-Method 之下 的AnalOption)
+// 该类废弃
class M_SYSUTILS_WDT_EXPORT wdtDefineAnal : public wdtDefineBase
{
public:
diff --git a/Include/mData/mSysUtilsWDT/wdtDefineBase.h b/Include/mData/mSysUtilsWDT/wdtDefineBase.h
index 8cc1346d..1e9f61b1 100644
--- a/Include/mData/mSysUtilsWDT/wdtDefineBase.h
+++ b/Include/mData/mSysUtilsWDT/wdtDefineBase.h
@@ -16,12 +16,32 @@ public:
// 输入开始的m_listValues中index,并且返回下一个index
virtual int allocateInfo(int nIndex);
+ // 支持组模式
+ static void adjustParasByGroupTag(QStringList& listParas);
+
protected:
- virtual void initXmlTags();
+ virtual void initXmlTags();
+
+ // 把父级的options赋值到孩子
+ virtual void makesureOptionsOfChildren();
public:
QString m_sSerie; //从属序列,默认:WDT
+
QStringList m_listParas; //涉及参数列表
+
+ QStringList m_listOptionAlias1;
+ QStringList m_listOptionAlias2;
+ QStringList m_listOptionNames1;
+ QStringList m_listOptionNames2;
+
+public:
+
+ QVector m_vecWdtSubDefines;
+
};
+
+
+typedef QVector vecWdtSubDefinePtr;
diff --git a/Include/mData/mSysUtilsWDT/wdtDefineMethod.h b/Include/mData/mSysUtilsWDT/wdtDefineMethod.h
index b3a39c92..987ea0e7 100644
--- a/Include/mData/mSysUtilsWDT/wdtDefineMethod.h
+++ b/Include/mData/mSysUtilsWDT/wdtDefineMethod.h
@@ -29,9 +29,4 @@ public:
// 绑定的AlgItem
wdtAlgItem* m_pAlgItem;
-
- vecWdtAnalDefinesPtr m_vecWdtAnalDefines;
};
-
-
-typedef QVector vecWdtMethodDefinesPtr;
diff --git a/Include/mData/mSysUtilsWDT/wdtDefineSubWel.h b/Include/mData/mSysUtilsWDT/wdtDefineSubWel.h
index 5e416620..aca9eec8 100644
--- a/Include/mData/mSysUtilsWDT/wdtDefineSubWel.h
+++ b/Include/mData/mSysUtilsWDT/wdtDefineSubWel.h
@@ -24,10 +24,4 @@ public:
protected:
virtual void initXmlTags();
-public:
-
- vecWdtMethodDefinesPtr m_vecWdtMethodDefines;
-
};
-
-typedef QVector vecWdtSubWelDefinesPtr;
diff --git a/Include/mData/mSysUtilsWDT/wdtDefineWel.h b/Include/mData/mSysUtilsWDT/wdtDefineWel.h
index 371766b0..96e277f8 100644
--- a/Include/mData/mSysUtilsWDT/wdtDefineWel.h
+++ b/Include/mData/mSysUtilsWDT/wdtDefineWel.h
@@ -25,8 +25,4 @@ protected:
virtual void initXmlTags();
public:
-
- vecWdtSubWelDefinesPtr m_vecSubWelDefines;
};
-
-typedef QVector vecWdtWelDefinesPtr;
diff --git a/Include/mData/mSysUtilsWDT/wdtDefineXmlUtils.h b/Include/mData/mSysUtilsWDT/wdtDefineXmlUtils.h
index 1caaa327..f8584867 100644
--- a/Include/mData/mSysUtilsWDT/wdtDefineXmlUtils.h
+++ b/Include/mData/mSysUtilsWDT/wdtDefineXmlUtils.h
@@ -8,6 +8,12 @@ class M_SYSUTILS_WDT_EXPORT wdtDefineXmlUtils : public iXmlUtilBase
{
public:
- static bool loadStructs(vecWdtWelDefinesPtr* pVec, QString sFile);
+ static bool loadStructs(QVector* pVec, \
+ QMap& mapCommonInputs, \
+ QString sFile);
+
+private:
+ static bool parseCommonInputs(const QDomElement& e, \
+ QMap& mapCommonInputs);
};
diff --git a/Include/mData/mSysUtilsWDT/wdtSysUtilsHelper.h b/Include/mData/mSysUtilsWDT/wdtSysUtilsHelper.h
index b96a751b..1e0db1f1 100644
--- a/Include/mData/mSysUtilsWDT/wdtSysUtilsHelper.h
+++ b/Include/mData/mSysUtilsWDT/wdtSysUtilsHelper.h
@@ -8,7 +8,7 @@ class iParameter;
class wdtDefineWel;
class wdtDefineSubWel;
class wdtDefineMethod;
-class wdtDefineAnal;
+//class wdtDefineAnal;
class wdtAlgItem;
class wdtAlgItemGroup;
@@ -25,12 +25,21 @@ public:
// Wdt defines
bool loadWdtAlgDefines(QString sFileDefine = "", QString sFileAlg = "");
+ // 获取模型定义相关的内容,对应的是ModelDescsWDT_cn文件
QVector* getWdtWelPtrs();
wdtDefineWel* getWdtWelDefine(QString sNameOrId);
wdtDefineSubWel* getWdtSubWelDefine(QString sNameOrId, QString sNameOrIdWel);
wdtDefineMethod* getWdtMethodDefine(QString sNameOrId, QString sNameOrIdWel, QString sNameOrIdSubWel);
- wdtDefineAnal* getWdtAnalDefine(QString sNameOrId, wdtDefineMethod* p);
-
+ // wdtDefineAnal* getWdtAnalDefine(QString sNameOrId, wdtDefineMethod* p);
+ /// @brief 获取定义的CommonParas节点的内容
+ /// @param sSubWndTag 具体的窗体(其实也就是功能)
+ /// @param sNameOrIdSubWel 井别(对应 油井 还是 气井)
+ /// @param sNameOrIdWel 井型(对应直井/定向井,还是 水平井)
+ QStringList getCommonParaInputs(QString sSubWndTag, \
+ QString sNameOrIdSubWel, \
+ QString sNameOrIdWel);
+
+ // 获取算法相关的定义,对应的是WdtAlgDefines_cn文件
QVector* getWdtAlgGroupPtrs();
wdtAlgItemGroup* getWdtAlgGroup(QString sNameOrId);
wdtAlgItem* getWdtAlgItem(QString sNameOrId, QString sNameOrIdGroup = "");
@@ -54,6 +63,9 @@ private:
// 系统统一的命名载体
QVector m_vecWdtWelPtrs;
QVector m_vecWdtAlgGroupPtrs;
+
+ // Common输入参数
+ QMap m_mapCommonInputs;
};
#define _wdtHelper wdtSysUtilsHelper::getInstance()
diff --git a/Include/mGui/mGuiAnal/iWxAnalWizard.h b/Include/mGui/mGuiAnal/iWxAnalWizard.h
index 70d6167f..b9fad601 100644
--- a/Include/mGui/mGuiAnal/iWxAnalWizard.h
+++ b/Include/mGui/mGuiAnal/iWxAnalWizard.h
@@ -42,6 +42,10 @@ public:
void resetSubWx(iWxBase* p = nullptr);
+#ifdef _SCAN_OLD_CODES_
+ void setSubWxVisible(int nAWI, bool bVisible = true);
+#endif
+
signals:
void sigWizardOptionOk();
@@ -86,7 +90,7 @@ private slots:
private:
- iWxBase* getSubWxOf(int nAWI);
+ iWxBase* getSubWxOf(int nAWI, bool bOnlyCurrentIndex = true);
QString getSubWxExtOf(int nAWI);
ZxDataObject* getSubWxTempObjOf(int nAWI);
diff --git a/Include/mGui/mGuiDataLoad/iWxDataLoad.h b/Include/mGui/mGuiDataLoad/iWxDataLoad.h
index d0bd3a41..77a87c28 100644
--- a/Include/mGui/mGuiDataLoad/iWxDataLoad.h
+++ b/Include/mGui/mGuiDataLoad/iWxDataLoad.h
@@ -264,6 +264,13 @@ private slots:
// 这是允许外界对粘贴板内容进行解析,解析为二维表格数据
void slotParseContents(const QString& s, VVecVariant& vvec, \
const int& left, const int& top);
+ /// @brief 表格粘贴完毕,响应
+ /// @param nRowFrom 粘贴位置,起始行号,从0开始
+ /// @param nColFrom 粘贴位置,起始列号,从0开始
+ /// @param nRowTo 粘贴位置,结束行号,从0开始
+ /// @param nColTo 粘贴位置,结束列号,从0开始
+ void slotTablePasteFinished(int nRowFrom, int nColFrom, int nRowTo, int nColTo);
+
void on_cbxAutoThinning_clicked();
diff --git a/Include/mGui/mGuiPlot/iGuiPlotPF.h b/Include/mGui/mGuiPlot/iGuiPlotPF.h
index 4b160f9b..d8fbc4fb 100644
--- a/Include/mGui/mGuiPlot/iGuiPlotPF.h
+++ b/Include/mGui/mGuiPlot/iGuiPlotPF.h
@@ -66,6 +66,9 @@ public:
// 信号关联
void bindTwoPlots();
+ // 当反序列化时,需要重置左侧表格,否则会重复添加,导致两个压力两个流量
+ void resetTableHelpers();
+
// 建议流动段上下对比调整过程时,随时保存入库
// 建议采取折中方案,每次流动段弹窗前保存一下
// 20211216 Added 数据 编辑 也用该函数
diff --git a/Include/mGui/mGuiPlot/iGuiPlotTableHelper.h b/Include/mGui/mGuiPlot/iGuiPlotTableHelper.h
index bd5e4ad6..3fec889c 100644
--- a/Include/mGui/mGuiPlot/iGuiPlotTableHelper.h
+++ b/Include/mGui/mGuiPlot/iGuiPlotTableHelper.h
@@ -50,7 +50,11 @@ public:
// 设置表格只读,主要是右键及双击
void setTableReadonly(QString sTag = "", bool bReadonly = true);
+ // 当反序列化时,需要重置左侧表格,否则会重复添加,导致两个压力两个流量
+ void resetTableHelpers();
+
public slots:
+
// Toolbar按钮消息响应
virtual void slotBtnTriggered();
virtual void slotSaveDatabase();
diff --git a/Include/mGui/mSubWnd/SubWxs/iWxRunOptionStd.h b/Include/mGui/mSubWnd/SubWxs/iWxRunOptionStd.h
index 31243f19..2ba4b07f 100644
--- a/Include/mGui/mSubWnd/SubWxs/iWxRunOptionStd.h
+++ b/Include/mGui/mSubWnd/SubWxs/iWxRunOptionStd.h
@@ -60,6 +60,7 @@ private slots:
void on_btnApply_clicked();
virtual void slotAnalRunselectionChanged();
+ virtual void slotSmoothFactorChanged(double );
//protected:
// 设置MpData
diff --git a/Include/mGui/mSubWndAna/iSubWndFitting.h b/Include/mGui/mSubWndAna/iSubWndFitting.h
index 2a62492a..34ea1130 100644
--- a/Include/mGui/mSubWndAna/iSubWndFitting.h
+++ b/Include/mGui/mSubWndAna/iSubWndFitting.h
@@ -38,8 +38,8 @@ class iWxSketchSaveAs;
class iAlgModelBase;
class iAlgFitBase;
-class cmAlgFitBase;
-class cmAlgModelBase;
+//class cmAlgFitBase;
+//class cmAlgModelBase;
class zxDataOtherItem;
class ZxObjLineSlr;
@@ -50,6 +50,9 @@ class iAxisTickInfo;
class iWxDeConv;
class iWxModelClassify;
+class iWxNmBridge;
+
+class iWxMixVis;
class iDynSkinInfo;
@@ -371,6 +374,31 @@ public:
// bFromNm: true 获取数值相关的参数,false 获取解析相关的参数
void getBrotherDockParas(QMap& mapParas, bool bFromNm);
+protected:
+
+ // 另外一种方式的数值处理机制,额外的处理
+ bool runNmBridge();
+ bool setNmBridgeInfos(iWxNmBridge& dlg);
+
+ // 监控初始化
+ void initNmFileWatcher();
+
+ // 刷新结果
+ bool checkAndFreshNmRstCurves(const QString& sOutputDir);
+ bool checkAndFreshNmRst3Ds(const QString& sOutputDir);
+
+ bool freshRst3DToLabel(QLabel* pLbl, const QString& sOutputDir, const int& nIndex);
+
+protected slots:
+
+ //void onMenuStartCalc();
+ void onNmMatlRstChanged(const QString &path);
+
+ void onNmMatlRstRenderItemChanged(int nIndex);
+
+ // 为了方便测试模式
+ void slotNmBridgeRsts();
+
public slots:
// 拟合线程结束,统一调用
@@ -736,6 +764,10 @@ private:
iWxDeConv* m_pWxDeconv; //反褶积相关,涉及序列化
iWxModelClassify* m_pWxModelClassify; //智能试井,模型分类
+ iWxNmBridge* m_pWxNmBridge; //数值Nm桥接器
+
+ iWxMixVis* m_pWxMixVis;//混合黏度计算
+
VVecDouble m_vvecTempFitP; //反序列化获取的P拟合,临时
QString m_sTempAnalRunID; //反序列化获取的AnalRunID,临时
@@ -750,4 +782,8 @@ private:
// TODO 20250228 对于多个流动段分析成果情况下,加载成果,右侧空白,权益之际的处理
bool m_bRelayouted;//临时,不涉及序列化
+ // 这是Nm相关的进程控制部分
+ QFileSystemWatcher* m_pNmFileWatcher;
+ QString m_sNmOutputDir;
+ bool m_bNmMatlRunning;
};
diff --git a/Include/mTool/mToolPseu/iWxPseuMain.h b/Include/mTool/mToolPseu/iWxPseuMain.h
index cc9be203..b51282cf 100644
--- a/Include/mTool/mToolPseu/iWxPseuMain.h
+++ b/Include/mTool/mToolPseu/iWxPseuMain.h
@@ -53,6 +53,11 @@ public:
// 返回名称标识
virtual QString getAwiName();
+#ifdef _SCAN_OLD_CODES_
+ // 在单模式向导弹出时,允许对界面做一些调整,比如按钮状态,以拟压力为主
+ virtual void adjustUiBeforeShow();
+#endif
+
public:
// 类似clone
diff --git a/Include/mTool/mToolPvt/iWxBase.h b/Include/mTool/mToolPvt/iWxBase.h
index b6257e8a..05892173 100644
--- a/Include/mTool/mToolPvt/iWxBase.h
+++ b/Include/mTool/mToolPvt/iWxBase.h
@@ -13,6 +13,7 @@ class M_TOOL_PVT_EXPORT iWxBase : public iDlgBase
Q_OBJECT
public:
+
explicit iWxBase(QWidget *parent = 0);
~iWxBase();
@@ -44,11 +45,18 @@ public:
int getAwi() { return m_nAwi; }
virtual QString getAwiName() { return ""; }
+#ifdef _SCAN_OLD_CODES_
+ // 在单模式向导弹出时,允许对界面做一些调整,比如按钮状态,以拟压力为主
+ virtual void adjustUiBeforeShow();
+#endif''
public:
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
+ virtual void copyFrom(ZxUiBase* p);
+ virtual void copyOneSubCtrol(QWidget*& pFrom, QWidget*& pTo);
+
// 建立某参数的Layout,考虑单位控件
virtual iParaItemCtrl* createParaCtrl(QString sPara,
bool bUnitEditable = true,
diff --git a/Include/mTool/mToolPvt/iWxPvtSubHeader.h b/Include/mTool/mToolPvt/iWxPvtSubHeader.h
index c79a8253..3f001a77 100644
--- a/Include/mTool/mToolPvt/iWxPvtSubHeader.h
+++ b/Include/mTool/mToolPvt/iWxPvtSubHeader.h
@@ -23,6 +23,9 @@ public:
//void initPhaseInfos(int nMain, VecInt& vecSubs);
void refreshByPhases(QStringList& listPhases, int n = -1);
+ /// @brief 根据当前的相态listPhases、以及pft来决定,当前显示哪些物性参数
+ QStringList getNeededParas(const QStringList& listPhases, PvtFluidType pft);
+
// 根据当前是解析还是数值进行简单调整(该函数在initUI之前)
void adjustUI(bool bAnalMode);
@@ -78,9 +81,14 @@ private:
// 流体参数项
void initFluidParas(bool bInit);
+
void initAdvCtrls();
void freshAdvCtrls();
+ // 因为配置的原因,尤其是多相情形下,很难保证综合压缩系数的顺序,这是最麻烦的
+ // 为了兼容原先版本,采取的方式是,在已经构建完成布局的基础上,把Ct移动到最后一行位置去
+ void moveCtRowToLast(QGridLayout* pLayoutG, int nRowIndexCt);
+
// 默认值填入
void initDefault();