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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
};