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

107 lines
3.4 KiB
C

#pragma once
#include <QObject>
#include <QMap>
#include <QSet>
#include "nmPlot_global.h"
class nmDataAnalyzeManager;
class nmDataFault;
class nmObjLineFault;
class nmDataFracture;
class nmObjLineCrack;
// 图元与数据绑定协调器,由 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);
// 切换分析时更新绑定的 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);
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);
};