#pragma once #include #include #include #include "nmPlot_global.h" class nmDataAnalyzeManager; class nmDataFault; class nmObjLineFault; // 图元与数据绑定协调器,由 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); // 切换分析时更新绑定的 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); private: nmDataAnalyzeManager* m_pDataMgr; // 数据中心,不持有,外部注入 // 图元 → 数据 的映射表,供 sender() 反查使用 QMap m_mapFaultData; // 已建立信号连接的图元集合,断开时用于精确匹配 QSet m_setBoundGraphics; // 图元 ←→ 数据 双向信号连接(图元 emit → Binder slot → 数据 setter) void _connectFault(nmObjLineFault* pGraphic, nmDataFault* pData); // 断开指定图元与本 Binder 的四条信号连接 void _disconnectFault(nmObjLineFault* pGraphic); // 从数据对象读取值,写入图元本地副本(加载时用) void _pushFaultDataToGraphic(nmObjLineFault* pGraphic, nmDataFault* pData); };