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.
nmWTAI-Platform/Include/mGui/mSubWndAna/iSubWndFitting.h

747 lines
26 KiB
C

#pragma once
#include "iSubWndBaseFit.h"
#include "iModelCurveDesc.h"
#include "mSubWndAna_global.h"
class iSpeciPt;
class iSpeciFun;
class zxAlgThread;
class iPlotCurveWxT;
class iGuiPlot;
class iDlgBase;
class iWxModelOption;
class iWxModelParameter;
class ZxObjBase;
class ZxObjLine;
class ZxObjPointSlr;
class iCurveDesc;
class iWxAutoFit;
class iWxPlateFit;
class iWxResult;
class iModelOption;
class iSpeciLine;
class iSpeciCrossLine;
class ZxObjCurveBase;
class ZxObjCurve;
class iWxCharact;
class iWxTime;
class ZxRstCurveData;
class iInterfereWell;
class iAxisTickInfo;
class ZxObjSketch;
class ZxMdiArea;
class iWxSketchSaveAs;
class iAlgModelBase;
class iAlgFitBase;
class cmAlgFitBase;
class cmAlgModelBase;
class zxDataOtherItem;
class ZxObjLineSlr;
class ZxObjLineSpecial;
class iWxRunOption;
class iWxRunOptionStd;
class iAxisTickInfo;
class iWxDeConv;
class iWxModelClassify;
class iDynSkinInfo;
class M_SUB_WND_ANA_EXPORT iSubWndFitting : public iSubWndBaseFit
{
Q_OBJECT
public:
explicit iSubWndFitting(QWidget *parent = 0, QString sExt = "");
~iSubWndFitting();
// 初始化入口
virtual void initUI();
// 配置窗体
virtual void configWnd(QString sPrevInfo);
virtual void setAnalRun(iAnalRun* pAnalRun, bool bFuzzyPit = false);
// 设置两条线的数据点
bool setDataPF(QVector<QPointF>& vecP, //Pressure Data
QVector<QPointF>& vecF);
// 返回数据点
bool getDataPF(QVector<QPointF>& vecP, //Pressure Data
QVector<QPointF>& vecF);
void calDerivCurves(bool bFitModelAfterAuto = false);
// 添加特殊的图
void appendSpecialCharts(QString sType);
// 根据标签获取Plot,对于历史曲线增加为上下bEx为true则是下
iGuiPlot* getPlotByTag(QString sTag, bool bEx = false);
// 试井设计模式
virtual void copyModelOptionDn(iModelOption* p);
virtual void setDnMode(bool b);
// 把部分解释结果保存到试井之星的Access
void saveParaToAccess();
// 解释成果导出Excel
void saveParaToExcel();
// 数据模式切换及备份
void backupSwapDataPF(QVector<QPointF>& vecP, \
QVector<QPointF>& vecF, \
bool bAllMode);
// 右键弹窗然后激活Fitting窗口
virtual bool firstRunByDataPF(iWxRunOption *pWxRunOption, \
ZxSegmentInfo* pSegInfo);
// 创建完毕之后的尾处理
virtual void finalDeals();
// 构建算法载体
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);
// 当前窗体激活时被调用
virtual void onActivated();
protected:
// 整体的双对数图等
void initMultiPlots(); //Mdi
// 初始化双对数半对数等图
iGuiPlot* initDoubleLogPlot(bool bExtMode = false); //是否第二个双对数图(反褶积)
iGuiPlot* initSemiLogPlot();
QWidget* initHistCurvePlot();
//特殊的图t Sqrt(t) , 1/4Sqrt(t) -1/2Sqrt(t)
iGuiPlot* initCoordPlot(QString sTag);
// 初始化结果窗体
QWidget* initWxResult();
//ZXF202409 敏感性分析图
iGuiPlot* initSensitivityPlot();
// 初始化UI
virtual void initUiDockWxs();
protected:
virtual void showEvent(QShowEvent *event);
virtual void resizeEvent(QResizeEvent *);
virtual void closeEvent(QCloseEvent *);
public:
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
virtual void onDeserialized();
// 保存加载
virtual bool loadRsts();
virtual bool saveRsts();
virtual bool prepareSavePureResult(ZxRstCurveData*& pResult);
virtual bool loadRstWithSwapMode(bool bOldVersion);
// 20260518 权宜之计,各个窗体提供,各自前置的需保存的信息
// 比如SubFitting中的 使用 分析 的ID
// 该信息在加载时,非常关键,在创建窗体时,就需要知晓
virtual QString _getPrevInfos4Save();
protected:
// loadRsts/saveRsts具体实现相关
// 分析相关
virtual bool saveRstAnalInfos(ZxRstWnd* pRstWnd);
virtual bool loadRstAnalInfos(ZxRstWnd* pRstWnd);
// 流动段相关
virtual bool saveRstSegInfos(ZxRstWnd* pRstWnd);
virtual bool loadRstSegInfos(ZxRstWnd* pRstWnd);
// 图件相关
virtual bool saveRstPlotInfos(ZxRstWnd* pRstWnd);
virtual bool loadRstPlotInfos(ZxRstWnd* pRstWnd);
public:
// 模型和参数窗口
virtual void showOrHideModels();
virtual void showOrHideParameters();
// 布局
virtual void layoutSubWnds(WndLayoutMode oWlm);
// 获取当前的双对数曲线(原始和拟合结果)
bool getDbLogCurves(QVector<ZxObjCurve*>& vecRaws, \
QVector<ZxObjCurve*>& vecFittings);
// 执行命令通常来自Ribbon
virtual bool runCmdBy(QString sName, QString sID);
/// @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);
// 当前是否启用混合黏度
bool canMixVis();
// 时间/流量变表皮
bool canToS(bool bFromTime);
// 暂不启用
//bool calAndGetDataS(VecDouble& vecX, VecDouble& vecY, bool bFromTime);
// 状态 TODO 暂时不起作用
virtual void saveUiStates();
virtual void restoreUiStates();
// 返回所有参数Key为英文ID
virtual bool getAllParaValues(QMap<QString, double>& map,
bool bOnlyFitted);
//返回所有的模型参数
virtual bool getAllParaValuesUnit(QMap<QString, QString>& map,
bool bOnlyFitted);
protected:
// 权宜之计的临时接口主要是对m_vvecAllDataP/m_vvecAllDataF的临时处理
QVector<QPointF> dataToVecPts(bool bAll, bool bP);
bool vecPtsToData(QVector<QPointF>& vec, bool bAll, bool bP);
VVecDouble* _checkDataVVecPtr(bool bAll, bool bP);
QVector<QPointF> _dataToVecPts(VVecDouble* pVvec);
bool _vecPtsToData(VVecDouble* pVvec, QVector<QPointF>& vec);
// 设置流动段模型参数信息
void configFitInfos(bool bFittedOnly = false);
void objWms2InterfereWells(QVector<ZxObjInfPoint*> vecWms, \
QVector<iInterfereWell*>& vecWells);
void calOtherInfos();
void calOtherInfoKoKg();
void freshKH();//处理地层系数
double calKH(QMap<QString, double>* pMap);
// bActivatedByUi 是否由于人机交互触发,比如拖动特征线、拖动理论线等
// listParaChangeds 当前已经改了哪些参数
void setParamByCal(bool bActivatedByUi, \
QStringList listParaChangeds = QStringList());
void getSpeciPtByPointSlr(QVector<ZxObjBase*> vecPoint, \
QStringList listType, \
QVector<iSpeciPt*>& vecPt);
void getFunFindPt(QMap<QString, QString> mapParamFunName, \
QMap<QString, QStringList> mapFunPt, \
QVector<iSpeciPt*> vecPt, QVector< QVector<iSpeciFun*> >&vvecFun, \
QStringList& listParas);
// 重新调整工具栏
virtual void reAdjustToolbar(QToolBar*);
void calParaByFunName(QVector<iSpeciFun*> vecFun, QString sPara);
// 对于坐标轴范围等属性的处理
QStringList getPlotTagsOf(int nIndex);
void cachePlotAxisRanges(int nIndex);
void resetPlotAxisRanges(int nIndex);
// 根据实际时间查找时间范围
bool getTimeSteps(double& dMin, double& dMax);
// 备份或其他刷新当前FitModel所用的Option
void dealwithCurFitOption();
// Fitmodel后刷新布局
void dealwithLayouts();
// 对于MdiArea中的窗体进行重新布局
void _layoutSubWnds();
// 算法类关联信号
virtual void buildAlgSignals();
// 是否正确支持的模型
virtual bool isModelSupported(iModelOption* p);
// 重置FitBase载体
bool resetFitObj(Fit_Type o, \
iModelOption* pModelOption, \
Fit_Method m = FM_Unknown);
// 设置变表皮
void configDynSkin(AlgCalMode oAcm);
// 线程结束
virtual void dealThreadFinished_m(); //FitModel
virtual void dealThreadFinished_a(); //FitAuto
virtual void dealThreadFinished_p(); //FitPlate
// 对特征曲线进行更新
void freshSpecCurves(bool bDeserMode = false);
// 移除特征线/特征点等,TODO 暂未启用
//void removeSpecCurves();
// 双对数特征线
bool getSpecCurves(QMap<ZxObjLineSlr*, double>& mapLines, \
bool bCreateIfNotExists, \
QMap<double, bool>* pMapCreateds = nullptr);
bool resetSpecCurves(QMap<ZxObjLineSlr*, double>& mapLines, \
QMap<double, bool>* pMapCreateds = nullptr);
// ZXF20240625对组合0和1特征线更新
void freshSpecialCurves(bool bDeserMode = false);
// ZXF20240625双对数特征线
ZxObjLineSpecial* getSpecialCurve(bool bCreateIfNotExists, bool& bCreateds);
bool resetSpecialCurve(ZxObjLineSpecial* pSpecialLine, bool& bCreateds);
// 初始添加两条特征线一条为斜率为0一条为斜率为1分别计算k和c
void addSpeciCurves();
bool getSourceCurvePt(QPointF& pt, bool bLast = false);
bool getDerivCurvePt(QPointF& pt); //初始情况下水平线的Y
void setSpeciCurve(QPointF pt, double dRatio);
// ZXF2024特性线优化pt1是斜率为1的点pt0是斜率为0的点通过这两点构造新的线
// xMin,xMax分别是图元的最小X值和最大X值
void setSpecialCurve(QPointF pt1, QPointF pt0);
// 根据斜率找特征线
ZxObjLineSlr* findObjLineSlrBySlope(iGuiPlot* pPlot, double dSlope);
// 从特征线中收集信息
void getInfoFromSpeciLine(ZxObjBase* pObj, \
QVector<iSpeciLine*> &vecLine);
void getInfoFromSpeciCrossLine(QVector<ZxObjBase*> vecObj, QStringList listType, \
QVector<iSpeciCrossLine*>& vecCrossLine);
// 在拟合前检测是否线程仍在执行
bool canNewFitThread();
public:
// 解析解、数值解的切换
// 显示与隐藏:解析解、数值解的切换
// bToNm: true 切换为数值模式false 切换为解析模式
void swapAnaNmDocks(bool bToNm);
// 创建
void createNmDockWxs();
// 返回数值涉及到的Docks
// nIndex: 0第一个m_pWxDockNm1 1第二个m_pWxDockNm2
iDockBaseWx* getNmDockWx(int nIndex);
// 从 数值或解析 获取参数内容以便更新至 解析或数值
// bFromNm: true 获取数值相关的参数false 获取解析相关的参数
void getBrotherDockParas(QMap<QString, QVariant>& mapParas, bool bFromNm);
public slots:
// 拟合线程结束,统一调用
virtual void slotThreadFinished();
// 对应流动段参数改变,如移动水平线,刷新结果视图
virtual void slotSegmentParamsChanged(ZxSegmentInfo& o);
// 拟合
void slotFitModel(AlgCalMode o = ACM_UNKNOWN);//常规
void slotFitAuto(); //自动
void slotFitPlate(); //图版
void refitModelAfterAuto();//这是在自动拟合之后再一次调用FitModel对结果进行处理
//void slotFitModelNm();//数值解入口函数
////////////////////////////////////////
// 特征点或特征线方面的响应
void slotObjSlrAdded(ZxObjBase*); //线或点Added
void slotLineSlrChanged(); //线发生改变
void slotPointSlrChanged(); //点发生改变
void slotPointSlrDbClicked(QPointF pt);//点双击
void slotLineSlrDbClicked(QPointF pt); //线双击
// 特征点和需要两条线计算的模型这些函数并非slots放在此处只是为了方便对照代码
void runCalByCurSlr(eCharactType eType, ZxObjBase* pObj);
void calBySlrLine(QVector<ZxObjBase*> vecObj,
QStringList listType);
void calBySlrPoint(QVector<ZxObjBase*> vecObj, \
QStringList listType, \
QMap<QString, QString> mapParamFunName, \
QMap<QString, QStringList> mapFunPt);
////////////////////////////////////////
//模型时间划分
void slotTimeScales();
//计算混合黏度
void slotCalMixViscosity();
// 表皮
void slotToS(bool bFromTime);
// 运行对半对数图工具栏进行调整
void slotToolbarSemi(QToolBar* pToolBar);
// 理论曲线变化对KSC等参数进行重新计算
void slotChangedTheoryCurve(QVector<QPointF>& vecOlds, \
QVector<QPointF>& vecNews);
//绑定图元信号断开与连接
void slotBindObjChangedStart();
void slotBindObjChangedEnd();
// 小信号是否显示多一条线接口
void slotUseSsCbxChanged(bool bChecked);
#ifdef _SCAN_OLD_CODES_
// 聚合物和直井切换
void slotUsePfCbxChanged(bool IsCheck);
#endif
#ifdef _SCAN_OLD_CODES_
// 左侧模型变化后,刷新双对数图形中的示意图(暂未启用)
void slotFreshSketchImg(QMap<QString,QVariant>&, int);
#endif
// (刷新绘图)拟合过程中信号处理
void slotFreshCharts();
void slotFreshChartsP(QStringList, int); //图版拟合比较特殊
//刷新自动拟合过程中曲线
void slotFreshChartsA();
// (刷新结果)拟合后拟合误差及拟合次数展示
void slotFreshResults_t(QStringList listInfo);
void slotFreshResults_m();
// 基础参数对话框流体类型发生改变
virtual void slotFluidTypeChanged(QString s);
// 左侧模型参数发生改变
virtual void slotOptionParasChanged(iModelOption* pOption);
// 当前窗体所有信息的保存,比如关闭时提问的保存
virtual bool slotSaveAll();
// 在布局前对窗体顺序进行调整
void slotAdjustMdiAreaWnds(QList<QMdiSubWindow*>& listSubWnds);
// 双对数曲线框选改变的响应信号
void slotOpRectChanged(const QRectF& rtBoundV, \
PlotOperationMode o);
// 鼠标移动探测半径以Tip显示仅限于双对数
void slotGetTipsExOfPos(QString& sTip, double dX, double dY);
// 关闭某个字窗体的Confirm
virtual void slotConfirmCloseSubWxs(bool& bClosable);
// 关闭某个子窗体后触发的响应,刷新布局
virtual void slotSubWxClosed();
protected slots:
// 成果上传至GX6
void slotUploadRstParas();
///////////////////////////////////////////////////////
// 右键调整后的菜单响应
protected slots:
// 调整右键,比如优化坐标轴、去除末端效应等
// 通常是插入,默认是在 Redo/Undo 与保存图片 之间
void slotAdjustSubContextMenu(QMenu* pMenu);
// 双对数曲线末端效应
virtual void slotOptDbLogTailer();
// 优化坐标轴
virtual void slotOptAxisXY();
virtual void slotOptAxisX();
virtual void slotOptAxisY();
protected:
virtual void optMainAxisScale(bool bX);
virtual void optDbLogTailer();
bool getDeriveCurveData(VecDouble& vecDtm, \
VecDouble& vecDpwm, \
VecDouble& vecDpwmNoOv);
bool dealEndEffect(const VecDouble& vecX, \
const VecDouble& vecY1, \
const VecDouble& vecY2, \
VecDouble& vecNewY1, \
VecDouble& vecNewY2);
bool updateDeriveCurves(VecDouble& vecDtm, \
VecDouble& vecDpwm, \
VecDouble& vecDpwmNoOv);
// end 右键调整后的菜单响应
///////////////////////////////////////////////////////
public:
virtual zxAlgThread* getSubThread(zxAlgThread* p);
//ZXF202409 获得窗口已经新建过的窗口名称
bool getAllSubWndNames(QStringList& listSubWnds, QVector<bool>& vecShows);
//设置子窗口的状态
void setSubWndState(QString sWndName);
//设置窗口显示ZXF202409
void setSubWndShow(QString sWndName);
// 根据图形标识复制坐标轴相关信息比如敏感性分析图与双对数一致ZXF202409
// 注sTagFrom通常是双对数图如果是其他请咨询wangzg/ZXF进行慎重调用
void copyPlotAxisRanges(QString sTagFrom, QString sTagTo);
//设置敏感性分析数据
void setSensitivityPlotData(QStringList listTagCurve, QStringList& listFitCurve, QVector<iCurveDesc>& vecData);
private:
// VecDouble
void reOrgaCurData(VecDouble& vecValueF, VecDouble& vecTimeF, \
VecDouble& vecTimeP, VecDouble& vecValueP);
// 得到曲线的数据
void setCurveDataBySerialize();
bool getCurveData(QString sPlot, QString sCurveName, VecDouble& vecX, VecDouble& vecY);
bool getCurveData(QString sPlot, QString sCurveName, QVector<QPointF>& vecPts);
// 计算出结果后设置数据显示设置结果dock
void setExistCurveDesc(QString s, QString sTagPlot);
void setPlateData(QStringList listFitCurve, int nNdex, QVector<iCurveDesc> &vecData);//ZXF202409
//这里绑定曲线增加参数敏感性分析不需要信号ZXF202409
void bindCurve(QStringList list, QString sTagPlot, bool bChanged = true);
bool getDataOfTag(QString sTag, VVecDouble& vvec);
// 设置特殊根号1/4根号图的数据
void setSpeciPlot(QString sTag); //特殊的图
void setDistributePlot(QString sTag);//分布图
// 添加数据到图上
void getSubPlotsDataOf(QStringList list, QString sPlotTag, QVector<iCurveDesc> &vecData);
void setSubPlotsOf(QStringList list, QString sTagPlot, bool IsAdd = false);
void updateSubPlotsOf(QString sPlotTag, QVector<iCurveDesc> vecData, bool isAdd = false);
void _updatePlotEx(QString sPlotTag, \
QVector<iCurveDesc> vecDescs, \
bool isAdd = false);
//自动拟合后根据图名和曲线名获得曲线数据体(是否断开信号(因为双对数图中理论线移动会修改参数))
void updateSubPlotCurve(QStringList list, QString sTagPlot, bool isDis = false);
// ZXF2024增加空白页面参数展示
void updateResultParam();
void finalDealHist(QString sTagPlot);
void changeCurveAttributes(iGuiPlot* pWxPlot, QString sTag);
#ifdef _SCAN_OLD_CODES_
void freshSketchImg(iGuiPlot* pWxPlot, QString sTag);
VecPointF getSketchBound(iGuiPlot* pWxPlot);
#endif
VVecDouble getAutoFitPt();
// 把设计结果存为示意图
void saveAsModelSketch();
// 根据试井之星参数对比对需要保存的参数赋值
bool setDataOtherItem(zxDataOtherItem* pItem);
// 确认算法模式
bool makesureSwapAbouts(AlgCalMode acm, bool bForceAll);
void swapDataToMode(bool bAllMode);
// 准备干扰相关
bool prepareInterferes();
// 准备边界相关
bool prepareBdys();
// 为西安等准备PVT相关需要添加则添加不需要则清除
bool fuzzyCmParaAbouts(QMap<QString, double>& mapParas/*, bool bAppend*/);
//返回所有的跟模型相关的参数(参与拟合的参数)
virtual bool getFitParaAbouts(QMap<QString, double>& mapValues, \
QMap<QString, QString>& mapUnits);
//模型测试调用所有的模型ZXF20241127
void calAllModel();
//
public: //20250121 为外部(如数值试井)增加接口
/// @brief 允许外部比如数值试井对当前子窗口Plot进行曲线添加/更改
/// @param o 具体哪一个,此处应该为 FSRT_DoubleLog、FSRT_SemiLog、FSRT_Hist 三者之一
/// @param vecDescs 具体曲线定义参见iCurveDesc
/// @param bOverwrite 如果已有,是否覆盖
/// @param ptrError 错误描述之指针
/// @note 曲线名称,请参见 mAlgDefines.h文件中的定义进行比如 s_Souce_Curve ,不能随便填写
virtual bool adjustFitSubPlotBy(FitSubRstTag o, \
QVector<iCurveDesc>& vecDescs, \
bool bOverwrite = true,
QString* ptrError = nullptr);
/// @brief 允许外部(比如数值试井)对当前结果子窗口进行填写
/// @param o 具体哪一个,此处通常 应该为 FSRT_NmRst
/// @param vecResults 具体结果定义参见iResultInfo
/// @param bOverwrite 如果已有,是否覆盖
/// @param ptrError 错误描述之指针
/// @note 具体调用时请与wzg协商
virtual bool adjustFitSubRstBy(FitSubRstTag o, \
QVector<iResultInfo>& vecResults, \
bool bOverwrite = true,
QString* ptrError = nullptr);
/// @brief 获取当前分析SunbWnd的子窗口
/// @param o 具体哪一个
/// @param bCreateIfNotExists 如果不存在是否强制创建为true 创建/否则不创建
/// @param ptrError 错误描述之指针
/// @note 具体返回的窗体实体类型请参见FitSubRstTag定义中的说明
virtual QWidget* getFitSubRstWxOf(FitSubRstTag o, \
bool bCreateIfNotExists = false,
QString* ptrError = nullptr);
public:
// 反褶积相关部分
bool runDeconvolv();
bool setDeconvInfos();
// 根据反褶积要求调整双对数的个数,并重新布局
bool relayoutDblPlotAbouts(bool bOneDblLog);
protected slots:
// 反褶积结果部分
void slotDeconvRsts(QMap<QString,VecDouble>& mapRsts, bool bOneDblLog);
public:
// 智能试井相关部分
bool runAiModelClassify();
bool setModelClassifyInfos();
protected slots:
// 智能试井结果部分
void slotAiModelRsts(QString sModelCodes, QMap<QString, double>& mapParas);
protected:
// 根据类型检索Plot窗口标识
QString _getSubPlotTagOf(FitSubRstTag o, QString& sError);
// 更改图形
bool _changeFitSubPlotOf(iGuiPlot* pWxPlot, \
QVector<iCurveDesc>& vecDescs, \
bool bOverwrite, \
QString& sError);
private:
ZxMdiArea* m_pMdiArea; //MDI
iWxResult* m_pWxResult; //结果显示载体
QVector<QWidget*> m_vecSubPlots; //子绘图窗体
QStringList m_listTags; //图标签
QStringList m_listCoord; //特殊图的标签T根号T1/4根号T
VVecDouble m_vvecDataF; //流量数据
VVecDouble m_vvecDataP; //压力数据
// 备份原始,方便调用,当然也可以用到结果中,比如流量变表皮
VVecDouble m_vvecAllDataF; //流量数据
VVecDouble m_vvecAllDataP; //压力数据
VVecDouble m_vvecTrimDataF; //流量数据
VVecDouble m_vvecTrimDataP; //压力数据
// 新加
iDockBaseWx* m_pWxDockModelOption; //模型选择
iDockBaseWx* m_pWxDockModelParameter; //模型参数
iWxModelOption* m_pWxModelOption; //
iWxModelParameter* m_pWxModelParameter;
// 数值解涉及到的Dock由于不知道具体内容暂时以1,2命名
iDockBaseWx* m_pWxDockNm1;
iDockBaseWx* m_pWxDockNm2;
iWxCharact* m_pWxChartPt;
iWxTime* m_pWxTimeScales;
// 拟合处理类
iAlgFitBase* m_pFit;
// cmAlgFitBase* m_pFitCm;
Fit_Type m_oFitType; //大的拟合类
iModelOption* m_pModelOption;
double m_dQ;//初始流量值
// 试井设计选用的Option
iModelOption* m_pModelOptionDn;
bool m_bDnMode;
iWxSketchSaveAs* m_pWxSketchSaveAs;
// 示意图,不涉及序列化
ZxObjSketch* m_pObjSketch;
QString m_sImgPath;//不涉及序列化
iModelCurveDesc* m_pModelCurveDesc;
AlgCalMode m_oLastCalMode;
bool m_bSwapMode; //是否应用Swap模式TODO20220322 是否涉及序列化
ZxSegmentInfo* m_pSegInfoAll;//备份,非裁剪
ZxSegmentInfo* m_pSegInfoTrim;//备份,裁剪
iAxisTickInfo* m_pAtiLogX; //双对数的属性
iAxisTickInfo* m_pAtiLogY;
iWxDeConv* m_pWxDeconv; //反褶积相关,涉及序列化
iWxModelClassify* m_pWxModelClassify; //智能试井,模型分类
VVecDouble m_vvecTempFitP; //反序列化获取的P拟合临时
QString m_sTempAnalRunID; //反序列化获取的AnalRunID临时
iDynSkinInfo* m_pDynSkinInfo;//需要序列化
// 3图+1结果窗体是否改用新的布局
bool m_bNewLayoutMode; //临时,不涉及序列化
bool m_bAutoReverse;//临时,不涉及序列化
// TODO 20250228 对于多个流动段分析成果情况下,加载成果,右侧空白,权益之际的处理
bool m_bRelayouted;//临时,不涉及序列化
};