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

213 lines
7.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 <QObject>
#include <QMap>
#include <QSet>
#include "nmPlot_global.h"
class nmDataAnalyzeManager;
class nmDataFault;
class nmObjLineFault;
class nmDataFracture;
class nmObjLineCrack;
class nmDataOutline;
class nmObjBase;
class nmObjRoundOutline;
class nmObjRectOutline;
class nmObjPolygonOutline;
class nmDataMeasure;
class nmObjLineMeasure;
class nmDataRegionMark;
class nmObjRegionMark;
// 图元与数据绑定协调器,由 nmGuiPlot 托管
class NM_PLOT_EXPORT nmPlotGraphicBinder : public QObject
{
Q_OBJECT
public:
explicit nmPlotGraphicBinder(nmDataAnalyzeManager* pDataMgr, QObject* parent = nullptr);
// 调用:用户画完断层后
void createFaultForGraphic(nmObjLineFault* pGraphic);
// 调用:从文件加载,绑定已有数据到已有图元
void bindFaultToGraphic(nmObjLineFault* pGraphic, nmDataFault* pData);
// 调用:删除图元前
void removeFaultBinding(nmObjLineFault* pGraphic);
// 查找图元对应的数据指针
nmDataFault* getFaultDataFor(nmObjLineFault* pGraphic);
// 名称同步,由图元在 paintBack 中调用
void syncFaultName(nmObjLineFault* pGraphic);
// 调用:用户画完裂缝后
void createCrackForGraphic(nmObjLineCrack* pGraphic);
// 调用:从文件加载,绑定已有裂缝数据到已有图元
void bindCrackToGraphic(nmObjLineCrack* pGraphic, nmDataFracture* pData);
// 调用:删除裂缝图元前
void removeCrackBinding(nmObjLineCrack* pGraphic);
// 查找裂缝图元对应的数据指针
nmDataFracture* getCrackDataFor(nmObjLineCrack* pGraphic);
// 名称同步,由图元在 paintBack 中调用
void syncCrackName(nmObjLineCrack* pGraphic);
// 调用:用户画完圆形边界后
void createOutlineForGraphic(nmObjRoundOutline* pGraphic);
// 调用:用户画完矩形边界后
void createOutlineForGraphic(nmObjRectOutline* pGraphic);
// 调用:用户画完多边形边界后
void createOutlineForGraphic(nmObjPolygonOutline* pGraphic);
// 调用:从文件加载,绑定已有边界数据到已有图元(三种类型通用)
void bindOutlineToGraphic(nmObjBase* pGraphic, nmDataOutline* pData);
// 调用:删除边界图元前(三种类型通用)
void removeOutlineBinding(nmObjBase* pGraphic);
// 查找边界图元对应的数据指针
nmDataOutline* getOutlineDataFor(nmObjBase* pGraphic);
// 名称同步,由边界图元在 paintBack 中调用
void syncOutlineName(nmObjBase* pGraphic);
// 视觉属性兜底同步(画笔宽度、填充色、透明度),由边界图元在 paintBack 中调用
void syncOutlineVisual(nmObjBase* pGraphic);
// 调用:用户画完测量线后
void createMeasureForGraphic(nmObjLineMeasure* pGraphic);
// 调用:删除测量线图元前
void removeMeasureBinding(nmObjLineMeasure* pGraphic);
// 坐标同步:从数据对象读取起点终点,写回图元(拟合功能修改数据后由 paintBack 调用)
void syncMeasurePoints(nmObjLineMeasure* pGraphic);
// ==================== 区域标记图元 ====================
// 调用:用户画完区域标记后
void createRegionMarkForGraphic(nmObjRegionMark* pGraphic);
// 调用:从文件加载,绑定已有区域标记数据到已有图元
void bindRegionMarkToGraphic(nmObjRegionMark* pGraphic, nmDataRegionMark* pData);
// 调用:删除区域标记图元前
void removeRegionMarkBinding(nmObjRegionMark* pGraphic);
// 兜底同步:名称、位置,由区域标记图元在 paintBack 中调用
void syncRegionMarkData(nmObjRegionMark* pGraphic);
// 查找区域标记图元对应的数据指针
nmDataRegionMark* getRegionMarkDataFor(nmObjRegionMark* pGraphic);
// 切换分析时更新绑定的 DataManager并清理旧图元的残留映射
void updateDataMgr(nmDataAnalyzeManager* pDataMgr);
// 供 dataChanged 信号连接
public slots:
void onDataChanged();
private slots:
// 断层图元信号 → 数据同步
void onGraphicFlowModelChanged(int model);
void onGraphicLeakageChanged(double leakage);
void onGraphicPointsChanged();
void onGraphicVisibleChanged(bool bVisible);
// 裂缝图元信号 → 数据同步
void onGraphicCrackFlowModelChanged(int model);
void onGraphicCrackDfcChanged(double dfc);
void onGraphicCrackDwChanged(double dw);
void onGraphicCrackPointsChanged();
void onGraphicCrackVisibleChanged(bool bVisible);
// 边界图元信号 → 数据同步
void onGraphicOutlinePointsChanged();
void onGraphicOutlineFlowTypeChanged();
void onGraphicOutlineVisibleChanged(bool bVisible);
// 区域标记图元信号 → 数据同步
void onGraphicRegionMarkReservoirTypeChanged(int type);
void onGraphicRegionMarkComKrChanged(double comKr);
void onGraphicRegionMarkComWChanged(double comW);
void onGraphicRegionMarkNetToGrossChanged(double netToGross);
void onGraphicRegionMarkVisibleChanged(bool bVisible);
private:
nmDataAnalyzeManager* m_pDataMgr; // 数据中心,不持有,外部注入
// 图元 → 数据 的映射表,供 sender() 反查使用
QMap<nmObjLineFault*, nmDataFault*> m_mapFaultData;
// 已建立信号连接的图元集合,断开时用于精确匹配
QSet<nmObjLineFault*> m_setBoundGraphics;
// 图元 ←→ 数据 双向信号连接(图元 emit → Binder slot → 数据 setter
void _connectFault(nmObjLineFault* pGraphic, nmDataFault* pData);
// 断开指定图元与本 Binder 的四条信号连接
void _disconnectFault(nmObjLineFault* pGraphic);
// 从数据对象读取值,写入图元本地副本(加载时用)
void _pushFaultDataToGraphic(nmObjLineFault* pGraphic, nmDataFault* pData);
// 裂缝图元 → 数据 的映射表
QMap<nmObjLineCrack*, nmDataFracture*> m_mapCrackData;
// 已建立信号连接的裂缝图元集合
QSet<nmObjLineCrack*> m_setBoundCrackGraphics;
// 裂缝图元 ←→ 数据 双向信号连接
void _connectCrack(nmObjLineCrack* pGraphic, nmDataFracture* pData);
// 断开指定裂缝图元与本 Binder 的五条信号连接
void _disconnectCrack(nmObjLineCrack* pGraphic);
// 从裂缝数据对象读取值,写入图元本地副本(加载时用)
void _pushCrackDataToGraphic(nmObjLineCrack* pGraphic, nmDataFracture* pData);
// 边界图元 → 数据 的映射表(三种边界类型共用)
QMap<nmObjBase*, nmDataOutline*> m_mapOutlineData;
// 已建立信号连接的边界图元集合
QSet<nmObjBase*> m_setBoundOutlineGraphics;
// 边界图元 ←→ 数据 信号连接(三条信号)
void _connectOutline(nmObjBase* pGraphic, nmDataOutline* pData);
// 断开指定边界图元与本 Binder 的信号连接
void _disconnectOutline(nmObjBase* pGraphic);
// 从边界数据对象读取值,写入图元本地副本(加载时用)
void _pushOutlineDataToGraphic(nmObjBase* pGraphic, nmDataOutline* pData);
// 测量线图元 → 数据 的映射表
QMap<nmObjLineMeasure*, nmDataMeasure*> m_mapMeasureData;
// ==================== 区域标记图元 ====================
// 区域标记图元 → 数据 的映射表
QMap<nmObjRegionMark*, nmDataRegionMark*> m_mapRegionMarkData;
// 已建立信号连接的区域标记图元集合
QSet<nmObjRegionMark*> m_setBoundRegionMarkGraphics;
// 区域标记图元 ←→ 数据 信号连接
void _connectRegionMark(nmObjRegionMark* pGraphic, nmDataRegionMark* pData);
// 断开指定区域标记图元与本 Binder 的信号连接
void _disconnectRegionMark(nmObjRegionMark* pGraphic);
// 从区域标记数据对象读取值,写入图元本地副本(加载时用)
void _pushRegionMarkDataToGraphic(nmObjRegionMark* pGraphic, nmDataRegionMark* pData);
};