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/mToolDiffusion/iWxDiffusionSub.h

262 lines
7.4 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 "qglobal.h"
#if (QT_VERSION >= 0x050000)
#include <QtWebEngineWidgets/QtWebEngineWidgets>
#define QWebView QWebEngineView
#else
#include <QtWebKit/QWebView>
#endif
#include "mAlgDefines.h"
#include "iWxDiffusionBase.h"
#include "mToolDiffusion_global.h"
class ZxTableView;
class ZxTableModel;
class iGridRowUtils;
class ZxPtyDock;
class IxPtySource;
class ZxRenderItem;
class ZxObjCurve;
class iCurveDesc;
class iGuiPlot;
class iWxDiffusionHeader;
class iAlgDiffusionBase;
class M_TOOL_DIFFUSION_EXPORT iWxDiffusionSub : public iWxDiffusionBase
{
Q_OBJECT
public:
explicit iWxDiffusionSub(QString sDiffusion, \
QWidget* parent /*= 0*/);
~iWxDiffusionSub();
// 设置关联
void setBindInfos(iWxDiffusionHeader* pSubHeader);
// 初始化
virtual void initUI();
// 导出导入
virtual bool importOrExport(bool bImport);
// 当主窗体相态发生改变时的处理(主+次,其中次为组合,需要解析)
virtual void freshOnPhaseChanged(QMap<QString, QVariant>& map);
void makesurePft();
/// @brief 获取 Diffusion页面中某个参数的具体数值
/// @param sPara,参数,英文标识而且大小写敏感
/// @param d,返回的结果
/// @note 主要是左侧属性页上的各项的数据参照xml定义进行读取
virtual bool getDiffParaOf(QString sPara, double& d);
/// @brief 获取 Diffusion页面中计算结果基本上就是右侧对应表格的数据
/// @param vvec,返回数据,即计算结果,与右侧表格对应
virtual bool getDiffRstOf(VVecDouble& vvec);
/// @brief 获取 Diffusion页面中所有参数数值
/// @param dso,参数,代表是相渗还是压敏还是吸附
/// @param map,返回的结果。
/// @param bOnlyFitted,是否只考虑拟合类参数,本处不涉及
/// @param bClearMap,是否清空。
/// @note 主要是左侧属性页上的各项的数据参照xml定义进行读取
virtual bool getDiffAllParaValues(QMap<QString, double>& map, \
bool bOnlyFitted = false, \
bool bClearMap = true);
iAlgDiffusionBase* getAlg(bool bCreateIfNotExists = false);
protected:
// 标识
virtual void configLabels();
virtual QStringList getTableTitles();
// 布局
virtual void initUI_Inputs();
virtual QWidget* initUI_Inputs_Up();
virtual void initUI_Inputs_Up_GridPty(QVBoxLayout*& pLayoutV);
virtual void initUI_Inputs_Up_Fuzzies(QVBoxLayout*& pLayoutV);
virtual QWidget* initUI_Inputs_Down();
virtual void initUI_Inputs_Down_TableView(QVBoxLayout*& pLayoutV);
virtual void initUI_Chart();
virtual void initUI_Chart_One(iGuiPlot* pWxPlot);
virtual void initUI_DockPty();
virtual void initUI_Outputs_TableView();
virtual void initUI_Others();
// 默认值
virtual void initDefault();
void fillTableViewWithDefault(ZxTableView* pTableView);
// 返回指定的绘图对象体
virtual iGuiPlot* getWxPlotOf(int n = 0);
protected:
void bindDockPty(IxPtySource* pPtyObj);
// 组织初始x数值
virtual VecDouble defaultInputs();
virtual double defaultScaleMax();
virtual double defaultScaleMin();
virtual int defaultInputCount();
protected:
// 算法相关
virtual void resetGridPty();
virtual bool makesureAlg();
virtual bool configAlg();
// 输入表格
virtual void freshChartByTableInputsChange();
virtual bool makesureTableInputs(VVecDouble& vvec);
virtual void refreshTableAbouts(VVecDouble& vvec);
// 算法算法
virtual void freshChartByGridPtyChange();
// 结果图+表
virtual void refreshRstAbouts(VVecDouble& vvec);
virtual void refreshRstCharts(VVecDouble& vvec);
virtual void refreshRstTables(VVecDouble& vvec);
virtual void clearChart(iGuiPlot* pWxPlot, bool bClearAll = true); //false时只清空曲线不清空点
// 调用算法
virtual bool calRstByGridPty(VVecDouble& vvec);
// 是否用户输入时更改相关界面布局
virtual void freshUiByTableInputs(bool bCustom);
protected:
virtual void paintEvent(QPaintEvent*);
virtual void resizeEvent(QResizeEvent*);
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
public:
// 类似clone
virtual void copyFrom(ZxUiBase* p);
public slots:
// 响应左侧GridPty数据的改变注意该函数为父类继承过来的函数不能进行名称更改
virtual void slotParaCtrlValueChanged(QString sPara, QVariant o);
// 表格
void slotTableDataChanged(const QModelIndex&, const QModelIndex&);
void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index);
// 窗体构建及图窗口构建过程中涉及的信号
virtual void slotToolbarBuilt(QToolBar* pToolBar);
virtual void slotGraphItemPoliciesInstalled(ZxRenderItem*);
virtual void slotCustomInputClicked();
virtual void slotPtCountChanged();
// 图上选中了某一条曲线
// virtual void slotCurveSelected(ZxObjCurve* pCurve, bool bSelected);
signals:
// 从主窗体获取当前的相态(主+次,其中次为组合,需要解析)
void sigGetCurPhaseOptions(QMap<QString, QVariant>&);
public:
// 从当前所有的信息中获取参数的值
virtual bool getParaValue(QString sPara,
double &dValue,
QString sUnitDest = "");
// 返回所有参数Key为英文ID
virtual bool getAllParaValues(QMap<QString, double>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
// 获取结果
virtual bool getAllResults(QMap<QString, double>& mapResults);
// 获取类似Zg、Cg的页面的原始数据
virtual bool getRawDataOf(QString sPara, VecDouble& x, VecDouble& y);
virtual bool getRawDataOf(QString sPara, VVecVariant& vvec);
virtual bool saveDiffusion();
// 文件标识
virtual QString getFileDiffusionTag();
protected:
// FluidType这是主类型
QString m_sDiffusion;
// SubHeader
iWxDiffusionHeader* m_pSubHeader;
// 布局(左侧)
QGroupBox* m_pWxInputs;
iGridRowUtils* m_pGridItemUtils;
ZxTableView* m_pTableViewInputs;
ZxTableModel* m_pTableModelInputs;
// 布局(中间)
iGuiPlot* m_pWxPlot;
// 布局(油藏)
ZxTableView* m_pTableViewOutputs;
ZxTableModel* m_pTableModelOutputs;
QTabWidget* m_pTabWx; //右侧显示区(多个)
QGroupBox* m_pGbxTop;
QGroupBox* m_pGbxBottom;
QSplitter* m_pSplitter;
QCheckBox* m_pCbxTableInputMode;
QLineEdit* m_pTbxPtCount;
// 左侧输入
QStringList m_listParas; //哪些参数,对应英文标识
// 属性框
ZxPtyDock* m_pDockPty;
QList<IxPtySource*> m_listProps;
// 坐标轴相关
QStringList m_listNames;
QStringList m_listUnits;
QString m_sTitle;
// 相态选择(从前面传递过来)
// map["MainOption"] = (int)opMain;
// map["SubOption"] = (int)fluidType;
QMap<QString, QVariant> m_mapPhaseInfos;
// 临时变量不涉及序列化
PvtFluidType m_oPft; //可以是单相,也可以是多相组合
// 调用的算法
iAlgDiffusionBase* m_pAlg;
// 参数列表(左侧)
QMap<QString, QVariant> m_mapParas;
};