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++

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 "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; //记录创建了多少个标记区域对象
};