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.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 "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, \
VVecFloat& 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, float& x, \
QMap<ZxObjCurve*, QPointF>& mapHits, \
bool bP, bool bConsiderBrother);
// 从map中的曲线获取屏幕坐标点x的范围
virtual void checkCurveXBounds(float& min, float& max, \
QMap<ZxObjCurve*, QPointF>& mapHits);
virtual void checkOneCurveXBound(ZxObjCurve* p, float& min, float& max);
// 添加到点
virtual QVector<ZxObjPointEx *> addHitPoints(float& min, float& 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;
};