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/iSubWndAnal.h

203 lines
6.2 KiB
C

#pragma once
#include "iSubWndBaseFit.h"
class ZxDataGaugeBase;
class ZxDataObject;
class iGuiPlotPF;
class ZxObjBase;
class ZxObjPoint;
class ZxObjCurve;
class iWxRateInsert;
class iWxOptionSmooth;
class iWxOptionThinning;
class iWxPointSelPreview;
class iWxSwapPF;
class ZxObjPointEx;
//class iSubWndBaseFit;
class iCurveDesc;
class iWxRunOptionStd;
class iWxRunOption;
class M_SUB_WND_EXPORT iSubWndAnal : public iSubWndBaseFit
{
Q_OBJECT
public:
explicit iSubWndAnal(QWidget *parent = 0, QString sExt = "");
~iSubWndAnal();
// 配置窗体
virtual void configWnd();
virtual void loadData(QString sWell = ""); //加载数据
virtual void runUpdate(); //刷新
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
virtual void onDeserialized();
// 保存加载
virtual bool loadRss();
virtual bool saveRss();
/// @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);
// 对于缓存已经保存的压力流量进行刷新处理
virtual void freshByTempSavedPFs();
// 对于流动段,在此处考虑模拟选中最后一个流动段
// 有判断条件的情况下TODO 20240819
virtual void simuHitLastSeg(); //模拟点击最后一个流动段
public:
// 拖拽实现,目前暂未起作用
void resetOneCurveByDrag(ZxDataGaugeBase* p);
// 获取两条线的数据点,从图形上取然后传递给SubWndFitting
// 20220324 TODO 修改逻辑:保留流量的第一个点,后续需要验证其他地方是否需要相应修改
bool getPlotCurveDataPF(QVector<QPointF>& vecP, \
QVector<QPointF>& vecF, \
QString* pStrCodeF = NULL);
void removeDupDataP(QVector<QPointF>& vecP, ZxSegmentInfo* pSegInfo = NULL); //压力数据去重
bool adjustMultiPhaseDataF(QVector<QPointF>& vecF, \
VVecDouble& vvecMp, \
ZxSegmentInfo* pSeg, \
iJobRun* pJobRun);
// 触发WndFitting
virtual bool runActionOf_ActivateFit(int nID);
// 取值
iGuiPlotPF* getPlotPF();
//自适应调整X轴压力数据不会占满显示范围
void autoZoomView();
signals:
// 申请主窗口创建一个新的窗体
void sigCreateNextSubWnd(iSubWndBaseAF*& p);
void sigActivateSubWnd(iSubWnd*& p);
// 一旦压力或流量保存之后,则触发其他窗口的刷新
void sigDataSavedPF(QString sCode);
protected:
// 加载获取到默认两条数据
virtual void loadDefaultCurves(QVector<iCurveDesc>& vecCurveData,
QString sWell = "");
// 对压力和流量进行标准零点校正
virtual void baseAdjustCurves(QVector<iCurveDesc>* pVec);
// 初始化UI
virtual QWidget* initUiMainWx();
virtual void initUiDockWxs();
virtual void initPlotPF();
// 执行命令:通常来自图形右侧/左侧的工具栏
virtual bool runActionOf(QString sAction);
bool runActionOf_EditPF(QString sAction);
// 刷新
virtual void updatePlots();
// 重新调整工具栏
virtual void reAdjustToolbar(QToolBar*);
// 由子窗体创建RunOption
virtual iWxRunOptionStd* buildWxRunOption();
// 在弹出对话框后判断是否试井设计,并进行相应处理
virtual void adjustByPossibleDn(iSubWndBaseFit* pWndFitting);
public slots:
// 调整主体布局
virtual void slotAdjustPlotPFUis(QSplitter* p);
// 双击弹出属性页
virtual void slotSetPtyVisible(bool b);
// 流动段改变
virtual void slotSegmentChanged(ZxSegmentInfo& o, bool bShowOptionWx);
// iWxRunOptionStd对话框OK后触发
// iJobRun当前的JobRun
// iSubWnd待应用的SubWnd
// bool如果为空则自动新建
// sNewWndName 新的窗体名称
virtual void slotJobOptionFinished(iJobRun* pJobRun,
iSubWnd* pSubWndAim,
bool bNewIfNull,
bool bJobRunAlreadyCurrent,
QString sNewWndName);
// 数据加载信号相应
virtual void slotPfObjSaved(ZxDataGaugeBase* p);
// Rate加点
void slotRateInsertPt(ZxObjBase* p);
// 当前窗体所有信息的保存,比如关闭时提问的保存
virtual bool slotSaveAll();
protected:
////////////////////////////////////////////////
// 增加拟合点的处理
// 获取另一个Plot
ZxPlot* getBrotherPlot(ZxPlot* pPlot);
// 查询x方向的点并存入Map
virtual bool findHitPoints(ZxPlot* pPlot, double& x, \
QMap<ZxObjCurve*, QPointF>& mapHits, \
bool bP, bool bConsiderBrother);
// 从map中的曲线获取屏幕坐标点x的范围
virtual void checkCurveXBounds(double& min, double& max, \
QMap<ZxObjCurve*, QPointF>& mapHits);
virtual void checkOneCurveXBound(ZxObjCurve* p, double& min, double& max);
// 添加到点
virtual QVector<ZxObjPointEx *> addHitPoints(double& min, double& max, \
QMap<ZxObjCurve*, QPointF>& mapHits);
////////////////////////////////////////////////
protected:
// 绘图相关
iGuiPlotPF* m_pWxPlotPF;
//轴标题(表头)、单位
// QStringList m_listTags;
// QStringList m_listUnits;
// 临时
//ZxObjPoint* m_pRateInsertPt;
iWxOptionSmooth* m_pWxSmooth;
iWxOptionThinning* m_pWxThinning;
iWxPointSelPreview* m_pWxPsPreview;
iWxRateInsert* m_pWxRateInsert;
iWxSwapPF* m_pWxSwapPF;
// 临时不需序列化为了区分ANal和AnalDn
bool m_bTableVisible;
};