|
|
#pragma once
|
|
|
|
|
|
#include "iSubWndAnal.h"
|
|
|
#include "mSubWndAna_global.h"
|
|
|
|
|
|
class iWxModelOption;
|
|
|
class iWxModelParameter;
|
|
|
class iAlgModelBase;
|
|
|
class iParaManager;
|
|
|
class iWxWmDataPF;
|
|
|
class ZxTableModel;
|
|
|
class iWxTime;
|
|
|
class iWxSaveDnPF;
|
|
|
class iAlgFitBase;
|
|
|
|
|
|
class M_SUB_WND_ANA_EXPORT iSubWndAnalDn : public iSubWndAnal
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
|
|
explicit iSubWndAnalDn(QWidget *parent = 0, QString sExt = "");
|
|
|
~iSubWndAnalDn();
|
|
|
|
|
|
// 配置窗体
|
|
|
virtual void configWnd(QString sPrevInfo);
|
|
|
|
|
|
virtual void loadData(QString sWell = ""); //加载数据
|
|
|
|
|
|
// 序列化
|
|
|
virtual void onSerialize(ZxSerializer* ser);
|
|
|
virtual void onDeserialize(ZxSerializer* ser);
|
|
|
|
|
|
// 保存加载
|
|
|
virtual bool loadRsts();
|
|
|
virtual bool saveRsts();
|
|
|
|
|
|
// 由子窗体创建RunOption
|
|
|
virtual iWxRunOptionStd* buildWxRunOption();
|
|
|
|
|
|
// 模型和参数窗口
|
|
|
virtual void showOrHideModels();
|
|
|
virtual void showOrHideParameters();
|
|
|
|
|
|
// 执行命令:通常来自Ribbon
|
|
|
virtual bool runCmdBy(QString sName, QString sID);
|
|
|
|
|
|
/// @brief 命令是否Enabled的状态判断,通常来自Ribbon
|
|
|
/// @param b (out),true:Enabled false:disabled
|
|
|
/// @param sName (in),Cmd Name
|
|
|
/// @param nID (in),Cmd ID
|
|
|
/// @param bLicensed (in),当前是否有授权
|
|
|
/// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令)
|
|
|
virtual bool checkCmdEnable(bool &b, \
|
|
|
QString sName, int nID, \
|
|
|
bool bLicensed);
|
|
|
|
|
|
|
|
|
// 在弹出对话框后判断是否试井设计,并进行相应处理
|
|
|
virtual void adjustByPossibleDn(iSubWndBaseFit* pWndFitting);
|
|
|
|
|
|
|
|
|
// TODO 该函数有待进一步优化
|
|
|
virtual bool buildAlgModel(iModelOption* pModelOption, \
|
|
|
bool bReset = true, \
|
|
|
bool bSetParas = true);
|
|
|
// 具体的创建算法载体
|
|
|
virtual void createAlgModel(ModelSeriesType o, AlgModelSrc ams, \
|
|
|
iModelOption* pModelOption);
|
|
|
|
|
|
/// @brief 收集多层相关的一些乱七八糟的信息,包括模型选项、边界类型、每条边的定压还是封闭等等。
|
|
|
/// @param map 收集的结果
|
|
|
/// @param bClearOlds 是否清空
|
|
|
/// @note 对于通用的,直接用标识,对于层内的添加层标识
|
|
|
bool collectFuzzyMLs(QMap<QString, QVariant>& map, \
|
|
|
bool bClearOlds = false);
|
|
|
|
|
|
// 对于流动段,在此处考虑模拟选中最后一个流动段
|
|
|
// 有判断条件的情况下,TODO 20240819
|
|
|
virtual void simuHitLastSeg(); //模拟点击最后一个流动段
|
|
|
|
|
|
virtual void setAnalRun(iAnalRun* pAnalRun, bool bFuzzyPit = false);
|
|
|
|
|
|
signals:
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 初始化UI
|
|
|
virtual QWidget* initUiMainWx();
|
|
|
virtual void initUiDockWxs();
|
|
|
|
|
|
// 执行命令:通常来自图形右侧/左侧的工具栏
|
|
|
virtual bool runActionOf(QString sAction);
|
|
|
|
|
|
// 重新调整工具栏
|
|
|
virtual void reAdjustToolbar(QToolBar*);
|
|
|
|
|
|
// 刷新
|
|
|
void updatePlots();
|
|
|
|
|
|
// 切换方向后,刷新
|
|
|
void freshByRadioQP(bool bP2Q,
|
|
|
bool bByTableChange,
|
|
|
VVecDouble& vvec);
|
|
|
bool getCurveDescByName(QString s, iCurveDesc& o);
|
|
|
|
|
|
// 开始调用算法计算
|
|
|
bool runCalQP(bool bP2Q);
|
|
|
bool checkDataInputs(VecDouble &vecInputT,
|
|
|
VecDouble &vecInputV); //计算前的系列监测
|
|
|
bool checkOption();
|
|
|
bool checkAlgo();
|
|
|
bool checkParas();
|
|
|
bool checkTime();
|
|
|
bool dealwithResults(VecDouble &vecT,
|
|
|
VecDouble &vecV,
|
|
|
bool bP2Q); //结果处理
|
|
|
|
|
|
// 为西安等准备PVT相关(需要添加则添加,不需要,则清除)
|
|
|
bool fuzzyCmParaAbouts(QMap<QString, double>& mapParas/*, bool bAppend*/);
|
|
|
|
|
|
//设置时间步长
|
|
|
bool getTimeSteps(double &dMin,double &dMax);
|
|
|
|
|
|
// 算法类关联信号
|
|
|
virtual void buildAlgSignals();
|
|
|
|
|
|
// 是否正确支持的模型
|
|
|
virtual bool isModelSupported(iModelOption* p);
|
|
|
|
|
|
//设置刷新图
|
|
|
void freshCharts();
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
// 调整主体布局
|
|
|
virtual void slotAdjustPlotPFUis(QSplitter* p);
|
|
|
|
|
|
// 调整左侧表格工具栏
|
|
|
virtual void slotAdjustLeftTableToolBar(QToolBar*&);
|
|
|
|
|
|
// 左侧表格数据改变(输入)
|
|
|
void slotWxTableDataPfChanged(VVecDouble& vvec);
|
|
|
//
|
|
|
void slotClickedQP();
|
|
|
void slotRunQP();
|
|
|
void slotTime();
|
|
|
void slotResultSave();
|
|
|
|
|
|
virtual void slotThreadFinished();
|
|
|
|
|
|
public:
|
|
|
virtual zxAlgThread* getSubThread(zxAlgThread* p);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
QRadioButton* m_pRadioQ2P;
|
|
|
QRadioButton* m_pRadioP2Q;
|
|
|
|
|
|
QPushButton* m_pPbRunQP;
|
|
|
|
|
|
// 新加
|
|
|
iDockBaseWx* m_pWxDockModelOption; //模型选择
|
|
|
iDockBaseWx* m_pWxDockModelParameter; //模型参数
|
|
|
iWxModelOption* m_pWxModelOption; //
|
|
|
iWxModelParameter* m_pWxModelParameter;
|
|
|
|
|
|
iModelOption* m_pModelOption;
|
|
|
|
|
|
// 数据
|
|
|
QVector<iCurveDesc> m_vecCurveDesc;
|
|
|
|
|
|
iWxWmDataPF* m_pWxDataInput; //左侧表格
|
|
|
iWxWmDataPF* m_pWxDataOutputF;//结果表
|
|
|
iWxWmDataPF* m_pWxDataOutputP;
|
|
|
iDockBaseWx* m_pWxDockOutputF;
|
|
|
iDockBaseWx* m_pWxDockOutputP;
|
|
|
|
|
|
QString m_sInputGaugeCode; //输入部分,数据Code,如果有的话
|
|
|
|
|
|
iWxSaveDnPF* m_pWxSaveDnPF; //结果保存的选项
|
|
|
|
|
|
iWxTime* m_pWxTimeScales;
|
|
|
|
|
|
iAlgFitBase* m_pFit;
|
|
|
};
|