From 9b36d2ad1df8756298e7bbe6b707e6ec705377c7 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Tue, 23 Jun 2026 10:27:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=AD=E5=B1=82=E5=92=8C=E8=A3=82=E7=BC=9D?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=9B=B4=E6=94=B9=E5=90=8E=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=88=B0data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Include/nmNum/nmPlot/nmPlotGraphicBinder.h | 6 ++++++ Src/nmNum/nmPlot/nmObjLineCrack.cpp | 6 ++++++ Src/nmNum/nmPlot/nmObjLineFault.cpp | 6 ++++++ Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp | 20 ++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/Include/nmNum/nmPlot/nmPlotGraphicBinder.h b/Include/nmNum/nmPlot/nmPlotGraphicBinder.h index 24b7aca..8ee9960 100644 --- a/Include/nmNum/nmPlot/nmPlotGraphicBinder.h +++ b/Include/nmNum/nmPlot/nmPlotGraphicBinder.h @@ -32,6 +32,9 @@ public: // 查找图元对应的数据指针 nmDataFault* getFaultDataFor(nmObjLineFault* pGraphic); + // 名称同步,由图元在 paintBack 中调用 + void syncFaultName(nmObjLineFault* pGraphic); + // 调用:用户画完裂缝后 void createCrackForGraphic(nmObjLineCrack* pGraphic); @@ -44,6 +47,9 @@ public: // 查找裂缝图元对应的数据指针 nmDataFracture* getCrackDataFor(nmObjLineCrack* pGraphic); + // 名称同步,由图元在 paintBack 中调用 + void syncCrackName(nmObjLineCrack* pGraphic); + // 切换分析时更新绑定的 DataManager,并清理旧图元的残留映射 void updateDataMgr(nmDataAnalyzeManager* pDataMgr); diff --git a/Src/nmNum/nmPlot/nmObjLineCrack.cpp b/Src/nmNum/nmPlot/nmObjLineCrack.cpp index 31bacc9..e4593f3 100644 --- a/Src/nmNum/nmPlot/nmObjLineCrack.cpp +++ b/Src/nmNum/nmPlot/nmObjLineCrack.cpp @@ -13,6 +13,7 @@ #include "nmObjLineCrack.h" #include "nmPlotGraphicBinder.h" +#include "nmDataFracture.h" #include "nmDataAnalyzeManager.h" ZX_DEFINE_DYNAMIC(nObjLineFracture, nmObjLineCrack) @@ -185,6 +186,11 @@ void nmObjLineCrack::paintBack(QPainter* painter, const ZxPaintParam& param) return; } + // 名称同步,在绘制时通过 Binder 同步到数据中心 + if (m_pGraphicBinder) { + m_pGraphicBinder->syncCrackName(this); + } + painter->save(); QVector pts = getPosOf(m_vecPoints); diff --git a/Src/nmNum/nmPlot/nmObjLineFault.cpp b/Src/nmNum/nmPlot/nmObjLineFault.cpp index b029fd8..438e431 100644 --- a/Src/nmNum/nmPlot/nmObjLineFault.cpp +++ b/Src/nmNum/nmPlot/nmObjLineFault.cpp @@ -13,6 +13,7 @@ #include "nmObjLineFault.h" #include "nmPlotGraphicBinder.h" +#include "nmDataFault.h" ZX_DEFINE_DYNAMIC(nObjLineFault, nmObjLineFault) @@ -192,6 +193,11 @@ void nmObjLineFault::paintBack(QPainter* painter, const ZxPaintParam& param) { return; } + // 名称同步,在绘制时通过 Binder 同步到数据中心 + if (m_pGraphicBinder) { + m_pGraphicBinder->syncFaultName(this); + } + painter->save(); QVector pts = getPosOf(m_vecPoints); diff --git a/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp b/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp index c37b2fa..68cdc17 100644 --- a/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp +++ b/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp @@ -73,6 +73,16 @@ nmDataFault* nmPlotGraphicBinder::getFaultDataFor(nmObjLineFault* pGraphic) return m_mapFaultData.value(pGraphic, nullptr); } +// 名称同步:检测图元名称与数据名称是否一致,不一致则同步 +void nmPlotGraphicBinder::syncFaultName(nmObjLineFault* pGraphic) +{ + if (!pGraphic) return; + nmDataFault* pData = m_mapFaultData.value(pGraphic, nullptr); + if (pData && pData->getFaultName() != pGraphic->getName()) { + pData->setFaultName(pGraphic->getName()); + } +} + // 切换分析时更新绑定的 DataManager // 旧图元已由 deleteAllPlotObjs 清除,清理残留映射避免悬空指针 void nmPlotGraphicBinder::updateDataMgr(nmDataAnalyzeManager* pDataMgr) @@ -265,6 +275,16 @@ nmDataFracture* nmPlotGraphicBinder::getCrackDataFor(nmObjLineCrack* pGraphic) return m_mapCrackData.value(pGraphic, nullptr); } +// 名称同步:检测图元名称与数据名称是否一致,不一致则同步 +void nmPlotGraphicBinder::syncCrackName(nmObjLineCrack* pGraphic) +{ + if (!pGraphic) return; + nmDataFracture* pData = m_mapCrackData.value(pGraphic, nullptr); + if (pData && pData->getFractureName() != pGraphic->getName()) { + pData->setFractureName(pGraphic->getName()); + } +} + // 将裂缝数据值推到图元本地副本 void nmPlotGraphicBinder::_pushCrackDataToGraphic(nmObjLineCrack* pGraphic, nmDataFracture* pData) {