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.
nmWATI/Include/mGui/mSubWnd/iSubWndBaseFit.h

165 lines
5.1 KiB
C

#pragma once
#include "mAlgDefines.h"
#include "iSubWndBaseAF.h"
//#include "iAlgPseuCal.h"
class iParaManager;
//class cmParaManager;
class iAlgModelBase;
class cmAlgModelBase;
class iWxRunOptionStd;
class zxAlgThread;
class ZxObjWmPoint;
class M_SUB_WND_EXPORT iSubWndBaseFit : public iSubWndBaseAF
{
Q_OBJECT
public:
explicit iSubWndBaseFit(QWidget *parent = 0, QString sExt = "");
~iSubWndBaseFit();
// 配置窗体
virtual void configWnd();
// 初始化Jobs
virtual bool createJobWxs();
virtual bool initJobWxUIs();
virtual void setDataWell(ZxDataWell* p);
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
/// @brief 命令是否Enabled的状态判断通常来自Ribbon
/// @param b (out)trueEnabled falsedisabled
/// @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);
// 右键弹窗然后激活Fitting窗口
virtual bool firstRunByDataPF(iWxRunOptionStd *pWxJobRun, \
ZxSegmentInfo* pSegInfo);
// 试井设计模式
virtual void copyModelOptionDn(iModelOption* p);
virtual void setDnMode(bool b);
public:
virtual void setJobRun(iJobRun* p, bool bFuzzyPit = false);
// 从各个Wxm_vecWxDatas中遍历查找
bool setParaValue(QString sPara, double d);
bool getParaValue(QString sPara, double& d);
// 返回所有参数Key为英文ID
bool getAllParaValues(QMap<QString, double>& map,
bool bOnlyFitted);
//返回所有的模型参数
bool getAllParaValuesUnit(QMap<QString, QString>& map,
bool bOnlyFitted);
//返回所有的跟模型相关的参数
bool getModelParaValues(QMap<QString, double>& map);
bool getModelParaUnit(QMap<QString, QString>& map);
// 返回所有的跟模型相关的边界参数的类型,不渗透或定压
// 不渗透0
// 定压1
bool getBdyInfos(QMap<QString, int>& map);
// 返回当前模型相关的参数包括ModelOption、以及井型等信息
iModelOption* getModelOption();
// 构建算法载体
bool buildAlgModel(iModelOption* pModelOption, \
bool bReset = true, \
bool bSetParas = true);
// 具体的创建算法载体
virtual void createAlgModel(ModelSeriesType o, AlgModelSrc ams, \
iModelOption* pModelOption);
// 返回所有窗体的指针
QVector<iWxBase*>* getAllWxPtr();
// 根据多相单相对右侧参数进行调整
void adjustParaUIsBy(bool bMultiPhase);
// 配置算法载体
bool configAlgModel();
protected:
// 重新调整工具栏
virtual void reAdjustToolbar(QToolBar*);
// 显示iInput的信息
// 0:Basic 1:Fluid 2:GasConst 3:PF otherAll
virtual void showJobInfoInput(int n);
// 根据流体类型刷新 流体对话框
void changeFluidOption();
// 算法类关联信号
virtual void buildAlgSignals();
// 是否正确支持的模型
virtual bool isModelSupported(iModelOption* p);
public slots:
// 对应流动段参数改变,如移动水平线,刷新结果视图
virtual void slotSegmentParamsChanged(ZxSegmentInfo& o);
// 常规拟合线程结束
virtual void slotCommonFitThreadFinished();
// 基础参数对话框流体类型发生改变
virtual void slotFluidTypeChanged(QString s);
// 左侧模型参数发生改变
virtual void slotOptionParasChanged(iModelOption* pOption);
public:
// 线程管理被MainFrmWindow调用
// 当前窗体内部的线程如Fitting里面的算法线程
// 增加参数QThread* p的目的为了后续扩展多个线程管理使用
virtual bool pauseSubThread(zxAlgThread* p = NULL);
virtual bool continueSubThread(zxAlgThread* p = NULL);
virtual bool quitSubThread(zxAlgThread* p = NULL);
virtual zxAlgThread* getSubThread(zxAlgThread* p);
signals:
/// @brief 触发信号,获取当前的井位图井点信息
/// @return vecWms.count()>1时有效
/// @note 仅仅返回正确有效的井点,其中中心井默认放在第一个
/// 如果vecWms.count()<=1,则认为不考虑井位图
void sigGetWmInfos(QVector<ZxObjWmPoint*>& vecWms);
protected:
// 分别为 Basic、Fluid、GasConst、PF、ModelOption、ModelParameter;
QVector<iWxBase*> m_vecWxDatas;
// 输入参数部分为了统一此处用Wizard把iWxBase包裹
// 每个WiZard包括四个但是只显示一个
QVector<iWxWizard*> m_vecWxWizards; //只有前四个
// 常规拟合算法类
// 由于Fitting和AnalDn都用到故放在该类
iAlgModelBase* m_pAlgModel;
iParaManager* m_pParaManager;
// 是否序列化,由子类确定
QPointF m_ptFlowFirst;
#ifdef QT_DEBUG
bool m_bXcmBrother;
#endif
};