#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),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); // 右键弹窗,然后激活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); // 从各个Wx(m_vecWxDatas)中遍历查找 bool setParaValue(QString sPara, double d); bool getParaValue(QString sPara, double& d); // 返回所有参数,Key为英文ID bool getAllParaValues(QMap& map, bool bOnlyFitted); //返回所有的模型参数 bool getAllParaValuesUnit(QMap& map, bool bOnlyFitted); //返回所有的跟模型相关的参数 bool getModelParaValues(QMap& map); bool getModelParaUnit(QMap& map); // 返回所有的跟模型相关的边界参数的类型,不渗透或定压 // 不渗透:0 // 定压:1 bool getBdyInfos(QMap& map); // 返回当前模型相关的参数,包括ModelOption、以及井型等信息 iModelOption* getModelOption(); // 构建算法载体 bool buildAlgModel(iModelOption* pModelOption, \ bool bReset = true, \ bool bSetParas = true); // 具体的创建算法载体 virtual void createAlgModel(ModelSeriesType o, AlgModelSrc ams, \ iModelOption* pModelOption); // 返回所有窗体的指针 QVector* getAllWxPtr(); // 根据多相单相对右侧参数进行调整 void adjustParaUIsBy(bool bMultiPhase); // 配置算法载体 bool configAlgModel(); protected: // 重新调整工具栏 virtual void reAdjustToolbar(QToolBar*); // 显示iInput的信息 // 0:Basic 1:Fluid 2:GasConst 3:PF other:All 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& vecWms); protected: // 分别为 Basic、Fluid、(GasConst)、PF、ModelOption、ModelParameter; QVector m_vecWxDatas; // 输入参数部分,为了统一,此处用Wizard把iWxBase包裹 // 每个WiZard包括四个,但是只显示一个 QVector m_vecWxWizards; //只有前四个 // 常规拟合算法类 // 由于Fitting和AnalDn都用到,故放在该类 iAlgModelBase* m_pAlgModel; iParaManager* m_pParaManager; // 是否序列化,由子类确定 QPointF m_ptFlowFirst; #ifdef QT_DEBUG bool m_bXcmBrother; #endif };