You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/mTool/mToolPvt/iWxPvtMain.h

224 lines
7.1 KiB
C

#pragma once
#include "iWxPvtBase.h"
#include "mAlgDefines.h"
#include "mToolPvt_global.h"
class iWxToolBar;
class iRibbonXmlCmd;
class iRibbonXmlTab;
class TreeWxConfig;
class iAlgPseuMethodTriInfo;
class iAlgPseuMethodCompInfo;
class iWxPvtUtilItemPseudo;
class M_TOOL_PVT_EXPORT iWxPvtMain : public iWxPvtBase
{
Q_OBJECT
public:
iWxPvtMain(QWidget* parent = 0);
~iWxPvtMain();
/// @brief 设置PVT流体相态
/// @param listPhases所有相英文标识
/// @param sBasePhase基准相/主相,英文标识
/// @note:规定如果传入sBasePhase基准相/主相,则默认为解析,否则认为是数值
void setPhaseInfos(QStringList listPhases, \
QString sBasePhase = QString());
// 是否向导模式
void setWizardMode(bool b);
// 初始化
virtual void initUI();
virtual bool savePvt();
virtual bool loadPvt();
// 文件标识
virtual QString getFilePvtTag();
// 新增接口(与一个数据对象体进行绑定式关联)
virtual bool saveAsDataObj(ZxDataObject*& pDataObj);
virtual bool loadFromDataObj(ZxDataObject*& pDataObj);
/// @brief 获取 Pvt页面中油气水项某个参数的计算结果
/// @param pft,油气水,请根据需要传入 WFT_Oil 或 WFT_Gas 或 WFT_Water
/// @param sPara,参数,英文标识而且大小写敏感,如"Pb"/"Rs"/"Co"等
/// @param vecX,返回之x列通常是压力或温度参数
/// @param vecY,返回之y列即sPara对应的参数数值列与vecX一一对应
/// @param ptrPtResult,结果选用的点即PVT曲线上方块点
/// @param ptrPtReferPb,对应的pb相应的参考点
bool getPvtParaRstOf(PvtFluidType pft, QString sPara, \
VecDouble& vecX, VecDouble& vecY, \
QPointF* ptrPtResult = nullptr, \
QPointF* ptrPtReferPb = nullptr);
/// @brief 获取 Pvt页面中参数的值比如Zg、Bg等即选用的参数数值
/// @param listParas,参数列表,通常以英文标识为准
/// @param map 返回结果
/// @note 这些参数值通常存于Header之中
bool getPvtParaValues(QStringList listParas, QMap<QString, double>& map);
/// @brief 根据 Pvt页面中各自的算法进行重新计算目前暂时用于CO2模块之中
/// @param sPara,参数,通常以英文标识为准
/// @param mapInputs 该算法涉及的输入参数
/// @param dOut 计算结果
bool calPvtRstOf(QString sPara, QMap<QString, double>& mapInputs, double& dOut);
// 返回所有参数Key为英文ID
virtual bool getAllParaValues(QMap<QString, double>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
virtual bool getAllParaValuesUnit(QMap<QString, QString>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
// 组织结果数据,注vec不进行clear由调用方自行clear
virtual bool organizeResults(QVector<iResultInfo>& vec, QString sType);
// 返回名称标识
virtual QString getAwiName();
public:
// 类似clone
virtual void copyFrom(ZxUiBase* p);
private:
//
void init();
//
// 初始化
void initUI_MainLayout();
void initUI_Tops();
void initUI_StackedWx();
void initUI_Bottoms();
// 具体的内容填充
void initStatckedWxs();
void makesureSubWxOf(QString sName);
iWxPvtBase* createSubHeader(); //Header
iWxPvtBase* createSubOGW(QString sName); //油气水
// 20241122移除拟压力部分,但暂时为了解析试井正常运行,暂时保留了一个常规的拟压力计算
iWxPvtBase* createSubPseuP(); //常规拟压力
void calAndFreshPseu(bool bCreateIfFirst = true);
// 该Action是否必须执行
bool isActionMust(QString sAction, bool bApplyMode);
// 刷新
void refresh();
//
void runAction(QString sAction);
void refreshActionStates(PvtFluidType pft = WFT_Unknown);
bool isActionEnable(QString sAction, PvtFluidType pft);
void changeRibbonItemState(QWidget* pWxItem, bool bEnable);
void refreshCurrentSubWx(PvtFluidType pft = WFT_Unknown);
// 是否解析模式
bool isAnalMode();
// 是否包含相态
bool isPhaseIncluded(QString sPhase);
// 收集当前条件下所有的结果参数
bool sumAllParaValues(QMap<QString, double>& map);
protected:
virtual void paintEvent(QPaintEvent*);
virtual void resizeEvent(QResizeEvent*);
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
public:
// 在导航模式下,点击下一步时,先判断本步是否正确
//virtual bool verifyCurInfos(QString& sLog);
// 在导航模式下,点击下一步时,先判断本步是否正确
virtual bool checkCurWxInputs();
// 在每次设定时,从上一步获取数值,并且刷新至本窗体
virtual bool getAndFreshByPrevWx();
public slots:
// 与sigPrevWxValueOf对应
virtual void slotValueToNextWx(QStringList& listParas, QMap<QString, QVariant>& map);
signals:
void sigPvtResultsChanged(QMap<QString, double>& map);
void sigPseudoResults(VVecDouble& vvec);
void sigPseudoResults3(const VVecDouble&, const QMap<QString, iAlgPseuMethodTriInfo*>&, const QMap<QString, double>&);
void sigPseudoResultsC(const VVecDouble&, const QMap<QString, iAlgPseuMethodCompInfo*>&, const QMap<QString, double>&);
private slots:
void slotBtnTriggered();
void slotBtnHelp();
void slotBtnApply();
void slotBtnOK();
void slotBtnCancel();
// 某项参数计算结果数据更改
void slotParaRstDataChanged(QString sPara);
void slotActionByRibbon(QWidget* pCtrl,
iRibbonXmlCmd* pInfo,
QVariant o);
void slotRibbonTabActivated(iRibbonXmlTab* pTab);
/// @brief 响应当Heade中流体选项发生改变时
/// @param nMain 大类,常规/特殊/状态方程
/// @param vecSubs 子类,油/气/水/凝析
// void slotHeaderOptionFluidChanged(int nMain, VecInt& vecSubs);
// 当前面窗体参数改变时,本窗体响应
virtual void slotParasObtained(QMap<QString, QVariant>& map);
// 返回某个参数的PVT数据比如Zg
// vvec为两列
// vvec[0]: p1 Zg1
// vvec[1]: p2 Zg2
// vvec[2]: p3 Zg3virtual
void slotGetPvtDataOf(QString sPara,VVecVariant& vvec);
// 返回所有的参数数据
void slotGetAllParaValues(QMap<QString,double>& map);
private:
// 规定如果m_sBasePhase非空则默认为解析否则认为是数值
// 对于解析:区分是否主相
QString m_sBasePhase;
// 对于解析:包括哪些相
// 对于数值:包括哪些相
QStringList m_listPhases;
// Ribbon
iWxToolBar* m_pWxToolBar;
// 子窗体与Cmd的ID一一对应
QMap<QString, iWxPvtBase*> m_mapSubWxs;
// 布局相关
QVBoxLayout* m_pMainLayout;
QStackedWidget* m_pStackedWx;
// 是否向导模式
bool m_bWizardMode;
};