#pragma once #include "iDlgBase.h" #include "mAlgDefines.h" #include "mToolDeConv_global.h" namespace Ui { class iWxDeConv; } class IxPtySource; class ZxPtyDock; class ZxRenderItem; class iCurveDesc; class ZxTableView; class ZxTableModel; class iGuiPlot; class iGuiPlotPF; class ZxObjCurvePressure; class ZxObjCurveFlow; class ZxObjCurveBase; class ZxObjBase; class ZxSegmentInfo; class iGridRowUtils; class cmAlgDeConv; class M_TOOL_DECONV_EXPORT iWxDeConv : public iDlgBase { Q_OBJECT public: explicit iWxDeConv(QWidget* parent = 0); ~iWxDeConv(); /// @brief 设置数据及流动段信息 /// @param pCurveP 压力史曲线 /// @param pCurveF 流量史曲线 /// @param pSegmentInfo 流动段信息载体 /// @param wft 相态,油气水相(注:此处指的是主相) void setDvDataInfos(ZxObjCurvePressure* pCurveP, \ ZxObjCurveFlow* pCurveF, \ ZxSegmentInfo* pSegmentInfo, \ WellFluidType wft = WFT_Oil); /// @brief 设置数据:原始双对数中的压力和压力导数 /// @param pCurveRawSource 双对数图中的实际压力曲线 /// @param pCurveRawDeriv 双对数图中的实际压力导数 void setRawDblCurves(ZxObjBase* pCurveRawSource, \ ZxObjBase* pCurveRawDeriv); // 初始化 virtual void initUI(); protected: // 左侧输入参数初始化 virtual void initUI_Inputs(); void initUI_Inputs_Paras(); //更新输入参数(根据当前数据) // 中间图形部分初始化 virtual void initUI_Chart(); void initUI_Chart_Up(); void initUI_Chart_Down(); //右侧表格部分初始化 virtual void initUI_Outputs(); void initUI_Outputs_Default(ZxTableView* pTableView); #ifdef QT_DEBUG // 返回数据 virtual bool getParaValue(QString sPara, double &dValue, QString sUnitDest = ""); #endif 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); // 属性页 virtual void slotGraphItemPoliciesInstalled(ZxRenderItem*); // 曲线选择 void slotCurveSelChanged(bool bSelect); protected: // 属性绑定 void bindDockPty(IxPtySource* pPtyObj); // 模拟选择第一条曲线 void simuSelectCurve(); // 曲线选择后触发表个数据刷新 void changeWithCurve(ZxObjCurveBase* pCurve); // 表头控制(关联) QStringList getTableTitlesBy(ZxObjCurveBase* pCurve); protected: // 算法+刷新 virtual void calAndFreshRsts(); virtual bool calDeconvRsts(); virtual void freshDeconvRsts(); // Plot 相关 void updateSubPlotDbLog(); //双对数(数据:从反褶积结果中获取) void updateSubPlotDbLog_Raw(); //双对数(数据:原始双对数中的压力和压力导数) void updateSubPlotPF(); //压力+流量(数据:从原始绑定的压力流量数据曲线中获取) void updateSubPlotPF_BSPIN(); //BSPIN压力数据(数据:从反褶积结果中获取) // 内部更新图形接口 void _updateSubPlot(bool bHistPF, \ QVector& vecDescs, \ bool isAdd); void _changeCurveAttributes(iGuiPlot* pWxPlot); // false时,只清空曲线不清空点 void clearChart(iGuiPlot* pWxPlot, bool bClearAll = true); // 结果表 // void updateRstTables(); signals: void sigDeconvRsts(QMap&, bool); private slots: void on_btnCal_clicked(); void on_cbxAutoCal_clicked(); void on_cbxShowRawDblLogCurves_clicked(); void on_btnOK_clicked(); void on_btnCancel_clicked(); private: Ui::iWxDeConv *ui; protected: // 左侧输入 // 布局(左侧) iGridRowUtils* m_pGridItemUtils; QStringList m_listParas; //哪些参数,对应英文标识 // 中间绘图区 iGuiPlot* m_pWxPlot; iGuiPlotPF* m_pWxPlotPF; // 右侧属性框 ZxPtyDock* m_pDockPty; QList m_listProps; // 调用的算法 cmAlgDeConv* m_pAlg; // 参数列表(左侧) QMap m_mapParas; /////////////////////////////////////////////////// // 数据部分,从外部传入指针,此处不负责序列化 ZxObjCurvePressure* m_pBindCurveP; //压力史曲线 ZxObjCurveFlow* m_pBindCurveF; //流量史曲线 ZxSegmentInfo* m_pSegInfo; //流动段信息载体 WellFluidType m_oWft; //相态,油气水相(注:此处指的是主相) ZxObjBase* m_pCurveRawSource; //双对数图中的实际压力曲线 ZxObjBase* m_pCurveRawDeriv; //双对数图中的实际压力导数 /////////////////////////////////////////////////// };