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/nmNum/nmPlot/nmGuiPlot.h

219 lines
6.5 KiB
C

#pragma once
#include "iGuiPlot.h"
#include "nmDefines.h"
#include "nmPlot_global.h"
#include <QPointF>
class nmObjBase;
class nmObjPointWell;
class ZxDataWell;
class nmDataVerticalFracturedWell;
class nmDataHorizontalFracturedWell;
class nmDataAnalyzeManager;
class nmDataWellBase;
class QWidget;
// 数值试井绘图载体的样例
class NM_PLOT_EXPORT nmGuiPlot : public iGuiPlot {
Q_OBJECT
public:
explicit nmGuiPlot(bool bUseBtn = true, QWidget *parent = 0);
~nmGuiPlot();
// 初始化UI
virtual void initUI(QString sTitle, QSize szDefault = QSize(265, 203)) override;
// 初始化Sheet
void initSheets();
// 初始化布局
virtual void initMainLayout() override;
virtual QWidget* initChartLayout(QString sTitle, QSize szDefault) override;
virtual void initChartView(QString sTitle, QSize szDefault) override;
virtual void connectSignals() override;
// 刷新图形
virtual void runUpdate() override;
// Action命令执行
virtual bool runAction(QString sAction) override;
// 创建添加一个Obj
nmObjBase* appendOneObj(NM_Obj_Type o, QString& sName, QVector<QPointF>& vec);
nmObjBase* _createOneObj(NM_Obj_Type o, QString& sName);
// 绑定绘图对象的信号
void bindObjSignals(ZxObjBase* pObj);
// ============================== 可见性设置接口 ==============================
// 边界相关
void setContourVisibility(bool bIsVisible);
// 位图相关
void setImagesVisibility(bool bIsVisible);
// 井相关
void setAllWellsVisible(bool bIsVisible);
void setWellVisible(QString sObjName, bool bIsVisible);
// 断层相关
void setAllFaultsVisible(bool bIsVisible);
void setFaultVisible(QString sObjName, bool bIsVisible);
// 裂缝相关
void setAllFracturesVisible(bool bIsVisible);
void setFractureVisible(QString sObjName, bool bIsVisible);
// 区域相关
void setAllRegionsVisible(bool bIsVisible);
void setRegionVisible(QString sObjName, bool bIsVisible);
// 区域标记相关
void setAllRegionMarksVisible(bool bIsVisible);
void setRegionMarkVisible(QString sObjName, bool bIsVisible);
#ifdef QT_DEBUG
/// @brief 刷新指定的绘图对象
/// @param sName 绘图对象名称
/// @param vecX 数据点
/// @param vecY 绘图对象名称
/// @param bPressureLike 压力模式还是流量模式,通常都是压力模式
/// @param bUseY2 是否启用第二y轴右侧
/// @param bClearAll 刷新指定绘图对象时,是否把原有所有绘图对象清除
ZxObjBase* updatePlotObjBy(QString sName, \
VecDouble& vecX, VecDouble& vecY, \
bool bPressureLike = true, \
bool bUseY2 = false, \
bool bClearAll = false);
#endif
public slots:
// Obj选择状态改变
void slotObjSelChanged(bool);
// Obj数据发生了改变
void slotObjPtsChanged();
// 删除井对象
void slotDeleteWell(QString wellID);
// 设置比例尺
void slotMeasuringScale(QPointF pStart, QPointF pEnd, void* obj);
// 删除图元对象
void slotDeleteOneObj(QString sName, void* obj);
// 删除测量对象
void deleteMeasureObjects();
// 清除当前测量对象
void clearPreviousMeasure();
// 结束测量
void finishMeasure();
// 更改坐标轴范围
void onRangeXChanged(double dMin, double dMax, \
bool bRecalTicks, \
bool bAdjustRectZoomRatio);
void onRangeYChanged(double dMin, double dMax, \
bool bRecalTicks, \
bool bAdjustRectZoomRatio);
signals:
// 绘图对象选择状态发生改变
void sigObjSelChanged(ZxObjBase*, bool);
// 绘图对象数据点发生改变
void sigObjPtsChanged(ZxObjBase*);
// 开始一次测量
void sigMeasureStarted();
public:
// 序列化
virtual void onSerialize(ZxSerializer* ser) override;
virtual void onDeserialize(ZxSerializer* ser) override;
// 反序列化后把数据重新加入m_mapCurveData与m_mapCurveType
virtual void resetAfterDeserialized() override;
// 获取边界的点信息
QVector<ZxObjBase*> getObjsByTag(QString objTag);
ZxObjBase* getWellObjById(QString id);
// 获取边界的信息
QVector<QPointF> getOutlinePoints();
// 获取所有井的信息,包括点和半径
QVector<QVector<double >> getWellsInformation();
// 获取所有裂缝点信息
QVector<QVector<QPointF >> getCracksInformation();
// 获取所有断层点信息
QVector<QVector<QPointF >> getFaultsInformation();
// 获取所有复合区(区域)的信息
QVector<QVector<QPointF >> getRegionsInformation();
// 获取所有井的图元
QVector<nmObjPointWell*> getWellPlots();
// 获取所有井的数据指针
QVector<ZxDataWell*> getWellDatas();
// 获取所有井的名称
QStringList getWellNames();
// 初始化默认几何对象
void initDefultGeoObj();
// 从数据中心初始化坐标轴相关信息
void initAxisFromData(nmDataAnalyzeManager* pDataManager);
// 从数据中心初始化边界对象
void initBoundaryObjFromData(nmDataAnalyzeManager* pDataManager);
// 从数据中心初始化井对象
void initWellObjsFromData(nmDataAnalyzeManager* pDataManager);
// 从数据中心初始化断层对象
void initFaultObjsFromData(nmDataAnalyzeManager* pDataManager);
// 从数据中心初始化裂缝对象
void initFractureObjsFromData(nmDataAnalyzeManager* pDataManager);
// 从数据中心初始化区域对象
void initRegionObjsFromData(nmDataAnalyzeManager* pDataManager);
// 从数据中心初始化区域标记对象
void initRegionMarkObjsFromData(nmDataAnalyzeManager* pDataManager);
// 清空所有图元对象
void deleteAllPlotObjs();
// 获取所有图元
QVector<nmObjBase*> getAllPlots();
// 清除图元的选中状态
void clearPlotsSelectStates();
// 删除DFN生成的图元及其数据
void deleteAllDFNPlots();
// 设置所有图元是否可编辑
void setAllPlotObjectsEditable(bool editable);
// 绑定由业务窗口创建的模型点对话框
void bindPointerPosDialog(QWidget* pointerPosDlg);
// 根据数据中心的数据设置目前图元、刻度相关信息
bool setPlotsByDataManger(nmDataAnalyzeManager* pDataManager);
// 移除井图元,通过井数据
void removeWellPlotByData(nmDataWellBase* pData);
// 清空井图元
void removeAllWellPlot();
protected:
// 绘制Painter函数重载
virtual void paintEvent(QPaintEvent*) override;
int m_iRegionMarkCount; //记录创建了多少个标记区域对象
};