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

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