#pragma once #include "iGuiPlot.h" #include "nmDefines.h" #include "nmPlot_global.h" #include 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& 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 getObjsByTag(QString objTag); ZxObjBase* getWellObjById(QString id); // 获取边界的信息 QVector getOutlinePoints(); // 获取所有井的信息,包括点和半径 QVector> getWellsInformation(); // 获取所有裂缝点信息 QVector> getCracksInformation(); // 获取所有断层点信息 QVector> getFaultsInformation(); // 获取所有复合区(区域)的信息 QVector> getRegionsInformation(); // 获取所有井的图元 QVector getWellPlots(); // 获取所有井的数据指针 QVector 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 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; //记录创建了多少个标记区域对象 };