断层图元代码重构

feature/nm-para-property-20260615
lvjunjie 3 weeks ago
parent e65a8a47fb
commit eaa0f08242

@ -12,6 +12,7 @@ class nmDataVerticalFracturedWell;
class nmDataHorizontalFracturedWell;
class nmDataAnalyzeManager;
class nmDataWellBase;
class nmPlotGraphicBinder;
class QWidget;
// 数值试井绘图载体的样例
@ -208,6 +209,9 @@ class NM_PLOT_EXPORT nmGuiPlot : public iGuiPlot {
// 清空井图元
void removeAllWellPlot();
// 获取 Binder
nmPlotGraphicBinder* graphicBinder() const { return m_pGraphicBinder; }
protected:
// 绘制Painter函数重载
@ -215,4 +219,6 @@ class NM_PLOT_EXPORT nmGuiPlot : public iGuiPlot {
int m_iRegionMarkCount; //记录创建了多少个标记区域对象
nmPlotGraphicBinder* m_pGraphicBinder; // 图元-数据绑定协调器
};

@ -4,7 +4,8 @@
#include "nmDefines.h"
#include "nmPlot_global.h"
#include "nmDataFault.h"
class nmPlotGraphicBinder;
class nmDataFault;
// 数值试井绘图对象(断层)
class NM_PLOT_EXPORT nmObjLineFault : public nmObjBase
@ -69,15 +70,14 @@ public:
virtual void paintBack(QPainter* painter, \
const ZxPaintParam& param) override;
// 创建后调用,初始化复合区默认参数
virtual void afterCreated() override;
// 删除断层数据对象
virtual void removeData() override;
public slots:
// 图元状态改变
void onObjVisibleChanged(bool bIsVisible);
signals:
// 流动模型变更
void sigFlowModelChanged(int model);
// 渗漏率变更
void sigLeakageChanged(double leakage);
// 点坐标变更
void sigPointsChanged();
public:
@ -87,9 +87,6 @@ public:
double getFaultLeakage();
void setFaultLeakage(double newFaultLeakage);
void setFaultData(nmDataFault* newFaultData);
nmDataFault* getFaultData() const;
double getStartX();
void setStartX(double newValue);
double getStartY();
@ -98,7 +95,14 @@ public:
void setEndX(double newValue);
double getEndY();
void setEndY(double newValue);
private:
nmDataFault* m_faultData; // 断层数据对象
// 查找数据指针
nmDataFault* getFaultData() const;
void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; }
private:
QString m_sFlowModel;
double m_dLeakage;
nmPlotGraphicBinder* m_pGraphicBinder;
};

@ -0,0 +1,64 @@
#pragma once
#include <QObject>
#include <QMap>
#include <QSet>
#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<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);
};

@ -48,9 +48,12 @@
#include "nmObjDeleteTool.h"
#include "nmDataAnalyzeManager.h"
#include "nmDataFault.h"
#include "nmDataOutline.h"
#include "nmDataAxis.h"
#include "nmPlotGraphicBinder.h"
#include "ZxDataGaugeP.h"
#include "ZxDataGaugeF.h"
@ -77,6 +80,9 @@ nmGuiPlot::nmGuiPlot(bool bUseBtns, QWidget *parent) :
m_iRegionMarkCount = 0;
m_pGraphicBinder = new nmPlotGraphicBinder(
nmDataAnalyzeManager::getCurrentInstance(), this);
}
nmGuiPlot::~nmGuiPlot()
@ -608,8 +614,8 @@ void nmGuiPlot::initFaultObjsFromData(nmDataAnalyzeManager* pDataManager)
continue;
}
// 3.7 绑定裂缝数据到图元对象上
pFaultPlot->setFaultData(pDataFault);
// 3.7 通过 Binder 绑定数据(推值 + 建立信号连接)
m_pGraphicBinder->bindFaultToGraphic(pFaultPlot, pDataFault);
// TODO: 设置断层其他属性
}
@ -1369,8 +1375,13 @@ void nmGuiPlot::slotDeleteOneObj(QString sName, void* obj)
if(nmObj) {
m_pPlot->removeObjByName(sName);
// 删除数据对象
nmObj->removeData();
// 先通过 Binder 清理数据绑定(如果是断层等 Binder 管理的类型)
if (nmObjLineFault* pFault = dynamic_cast<nmObjLineFault*>(nmObj)) {
m_pGraphicBinder->removeFaultBinding(pFault);
} else {
// 其他类型回退到旧方式
nmObj->removeData();
}
}
}
} else {

@ -14,12 +14,14 @@
#include "nmObjPolygonOutlineTool.h"
#include "nmObjLineCrackTool.h"
#include "nmObjLineFaultTool.h"
#include "nmObjLineFault.h"
#include "nmObjLineMeasuringScaleTool.h"
#include "nmObjPointWellTool.h"
#include "nmObjLineMeasureTool.h"
#include "nmGuiPlot.h"
#include "nmGuiPlotCmdHelper.h"
#include "nmPlotGraphicBinder.h"
#include "nmDataLogFile.h"
@ -345,7 +347,15 @@ void nmGuiPlotCmdHelper::slotObjPtsFinished(QVector<QPointF>& vec) {
}
nmObjBase* pObj = pWxPlot->appendOneObj(pTool->getNOT(), sName, vec);
pObj->afterCreated();
// 断层创建逻辑已改由 Binder 负责(创建数据 + 建立信号连接)
if (pTool->getNOT() == NMOT_Line_Fault) {
nmObjLineFault* pFault = dynamic_cast<nmObjLineFault*>(pObj);
if (pFault && pWxPlot->graphicBinder()) {
pWxPlot->graphicBinder()->createFaultForGraphic(pFault);
}
} else {
pObj->afterCreated();
}
}
void nmGuiPlotCmdHelper::finishMeasure()

@ -12,7 +12,7 @@
#include "nmObjLineFault.h"
#include "nmDataAnalyzeManager.h"
#include "nmPlotGraphicBinder.h"
ZX_DEFINE_DYNAMIC(nObjLineFault, nmObjLineFault)
@ -29,8 +29,6 @@ nmObjLineFault::nmObjLineFault(const QString& sName, \
}
nmObjLineFault::~nmObjLineFault() {
// 断层数据由DataManager统一释放图元只保存引用。
m_faultData = nullptr;
}
void nmObjLineFault::fillPtyPano(IxPtyPano* sheet) {
@ -64,13 +62,13 @@ void nmObjLineFault::init(const QString& sName, \
nmObjLineFault::initFlags();
m_oPen = QPen(QBrush(Qt::green), \
0.3f, Qt::SolidLine);
m_faultData = nullptr;
loadTempl();
// 业务属性本地默认值
m_sFlowModel = tr("Leaky");
m_dLeakage = 1.0;
m_pGraphicBinder = nullptr;
// 连接图元可见性信号和槽
connect(this, SIGNAL(sigObjVisibleChanged(bool)),
this, SLOT(onObjVisibleChanged(bool)));
loadTempl();
}
void nmObjLineFault::initTools() {
@ -134,7 +132,8 @@ bool nmObjLineFault::_runHitTest(const QPointF& pt, int& nOption, int& nSubIndex
m_vecPoints = getValueOf(pts);
nOption = (int)OHO_Point;
nSubIndex = i + 1;
// 点集变更
emit sigPointsChanged();
return true;
}
@ -159,12 +158,15 @@ bool nmObjLineFault::runMove(const QPointF& pt1,
int nCount = m_vecPoints.count();
QVector<QPointF> vecPts = getPosOf(m_vecPoints); // 屏幕值
bool bRet = false;
if(m_oHitOption == OHO_Point && m_nHitIndex >= 0) {
// 如果是点,不用计算偏移量,直接将该点移动到鼠标抬起的位置即可
vecPts[m_nHitIndex] = pt2;
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
return moveToPos(vecPts);
bRet = moveToPos(vecPts);
// 移动后通知点集变更
emit sigPointsChanged();
return bRet;
} else if(m_oHitOption == OHO_Bound && m_nHitIndex >= 0) {
for(int i = 0; i < nCount; i++) {
vecPts[i] = offsetPoint(vecPts[i], pt1, pt2);
@ -172,8 +174,10 @@ bool nmObjLineFault::runMove(const QPointF& pt1,
m_dOffsetX = pt2.x() - pt1.x();
m_dOffsetY = pt2.y() - pt1.y();
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
return moveToPos(vecPts);
bRet = moveToPos(vecPts);
// 移动后通知点集变更
emit sigPointsChanged();
return bRet;
} else {
return false;
}
@ -191,12 +195,6 @@ void nmObjLineFault::paintBack(QPainter* painter, const ZxPaintParam& param) {
painter->save();
QVector<QPointF> pts = getPosOf(m_vecPoints);
// 更新断层几何数据
if (m_faultData != nullptr) {
m_faultData->setFaultName(m_sName);
m_faultData->setFaultPoints(m_vecPoints);
}
// 不选中的状态
if(!pts.empty())
{
@ -279,8 +277,6 @@ void nmObjLineFault::paintBack(QPainter* painter, const ZxPaintParam& param) {
nmDataLogFile::getInstance()->writeLog("select line " + QString::number(i));
QPen pen(Qt::DashLine);
//pen.setWidth(1); // 设置线条宽度
//pen.setColor(Qt::yellow); // 设置线条颜色
painter->setPen(pen);
for(int i = 0; i < pts.count() - 1; i++) {
@ -294,79 +290,87 @@ void nmObjLineFault::paintBack(QPainter* painter, const ZxPaintParam& param) {
}
double nmObjLineFault::getFaultLeakage() {
return m_faultData->getFaultLeakage().getValue().toDouble();
return m_dLeakage;
}
void nmObjLineFault::setFaultLeakage(double newFaultLeakage) {
// 从Data中取数据
nmDataAttribute tempAttr = m_faultData->getFaultLeakage();
tempAttr.setValue(newFaultLeakage);
m_faultData->setFaultLeakage(tempAttr);
m_dLeakage = newFaultLeakage;
emit sigLeakageChanged(newFaultLeakage);
}
int nmObjLineFault::getFaultFlowModel() {
if (m_faultData->getFaultFlowModel().getValue() == tr("Leaky"))
if (m_sFlowModel == tr("Leaky"))
return 0;
else
return 1;
}
void nmObjLineFault::setFaultFlowModel(int newFaultFlowModel) {
// 从Data中取数据
nmDataAttribute tempAttr = m_faultData->getFaultFlowModel();
if (newFaultFlowModel == 0) {
tempAttr.setValue(tr("Leaky"));
m_sFlowModel = tr("Leaky");
} else {
tempAttr.setValue(tr("Composite limit"));
m_sFlowModel = tr("Composite limit");
}
m_faultData->setFaultFlowModel(tempAttr);
emit sigFlowModelChanged(newFaultFlowModel);
}
double nmObjLineFault::getStartX() {
return m_faultData->getFaultPoints().first().x();
if (!m_vecPoints.isEmpty())
return m_vecPoints.first().x();
return 0;
}
void nmObjLineFault::setStartX(double newValue) {
m_vecPoints.first().setX(newValue);
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
if (!m_vecPoints.isEmpty()) {
m_vecPoints.first().setX(newValue);
emit sigPointsChanged();
}
}
double nmObjLineFault::getStartY() {
return m_faultData->getFaultPoints().first().y();
if (!m_vecPoints.isEmpty())
return m_vecPoints.first().y();
return 0;
}
void nmObjLineFault::setStartY(double newValue) {
m_vecPoints.first().setY(newValue);
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
if (!m_vecPoints.isEmpty()) {
m_vecPoints.first().setY(newValue);
emit sigPointsChanged();
}
}
double nmObjLineFault::getEndX() {
return m_faultData->getFaultPoints().last().x();
if (!m_vecPoints.isEmpty())
return m_vecPoints.last().x();
return 0;
}
void nmObjLineFault::setEndX(double newValue) {
m_vecPoints.last().setX(newValue);
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
if (!m_vecPoints.isEmpty()) {
m_vecPoints.last().setX(newValue);
emit sigPointsChanged();
}
}
double nmObjLineFault::getEndY() {
return m_faultData->getFaultPoints().last().y();
if (!m_vecPoints.isEmpty())
return m_vecPoints.last().y();
return 0;
}
void nmObjLineFault::setEndY(double newValue) {
m_vecPoints.last().setY(newValue);
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
if (!m_vecPoints.isEmpty()) {
m_vecPoints.last().setY(newValue);
emit sigPointsChanged();
}
}
void nmObjLineFault::onSerialize(ZxSerializer* ser) {
nmObjBase::onSerialize(ser);
int flowModel;
if (m_faultData->getFaultFlowModel().getValue() == tr("Leaky"))
flowModel = 0;
else
flowModel = 1;
int flowModel = getFaultFlowModel();
ser->write("FlowModel", flowModel);
ser->write("Leakage", m_faultData->getFaultLeakage().getValue().toDouble());
ser->write("Leakage", m_dLeakage);
}
void nmObjLineFault::onDeserialize(ZxSerializer* ser) {
@ -383,13 +387,9 @@ void nmObjLineFault::onDeserialize(ZxSerializer* ser) {
void nmObjLineFault::onSaveTempl(ZxSerializer* ser) {
nmObjBase::onSaveTempl(ser);
int flowModel;
if (m_faultData->getFaultFlowModel().getValue() == tr("Leaky"))
flowModel = 0;
else
flowModel = 1;
ser->write("FlowModel", flowModel);
ser->write("Leakage", m_faultData->getFaultLeakage().getValue().toDouble());
int flowModel = getFaultFlowModel();
ser->write("FlowModel", flowModel);
ser->write("Leakage", m_dLeakage);
}
void nmObjLineFault::onLoadTempl(ZxSerializer* ser) {
@ -398,40 +398,14 @@ void nmObjLineFault::onLoadTempl(ZxSerializer* ser) {
double faultLeakage;
ser->read("FlowModel", flowModel);
ser->read("Leakage", faultLeakage);
// 更新Data
this->setFaultFlowModel(flowModel);
this->setFaultLeakage(faultLeakage);
}
void nmObjLineFault::setFaultData(nmDataFault* newFaultData) {
m_faultData = newFaultData;
}
nmDataFault* nmObjLineFault::getFaultData() const{
return m_faultData;
}
void nmObjLineFault::afterCreated() {
m_faultData = nmDataAnalyzeManager::getCurrentInstance()->createFault();
m_faultData->setFaultName(m_sName);
m_faultData->setFaultPoints(m_vecPoints);
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
}
void nmObjLineFault::removeData() {
if (m_faultData) {
// 从数据中心移除该数据
nmDataAnalyzeManager::getCurrentInstance()->removeFaultData(m_faultData);
m_faultData = nullptr;
}
}
void nmObjLineFault::onObjVisibleChanged(bool bIsVisible) {
if (m_faultData != nullptr) {
m_faultData->setPlotVisible(bIsVisible);
}
nmDataFault* nmObjLineFault::getFaultData() const {
if (m_pGraphicBinder)
return m_pGraphicBinder->getFaultDataFor(const_cast<nmObjLineFault*>(this));
return nullptr;
}

@ -7,6 +7,7 @@
#include "nmDataLogFile.h"
#include "nmObjLineFault.h"
#include "nmDataFault.h"
#include "ZxPlot.h"
#include "nmObjPointWell.h"

@ -0,0 +1,201 @@
#include "nmPlotGraphicBinder.h"
#include "nmObjLineFault.h"
#include "nmDataFault.h"
#include "nmDataAnalyzeManager.h"
#include <QMetaObject>
nmPlotGraphicBinder::nmPlotGraphicBinder(nmDataAnalyzeManager* pDataMgr, QObject* parent)
: QObject(parent)
, m_pDataMgr(pDataMgr)
{
}
// 用户画完断层后:创建数据对象并建立绑定
void nmPlotGraphicBinder::createFaultForGraphic(nmObjLineFault* pGraphic)
{
if (!pGraphic || !m_pDataMgr) {
return;
}
// 创建数据对象
nmDataFault* pData = m_pDataMgr->createFault();
// 将图元值推入数据
pData->setFaultName(pGraphic->getName());
pData->setFaultPoints(pGraphic->getAllValues());
// 建立信号连接
_connectFault(pGraphic, pData);
m_pDataMgr->notifyDataChanged();
}
// 从文件加载:绑定已有数据到已有图元
void nmPlotGraphicBinder::bindFaultToGraphic(nmObjLineFault* pGraphic, nmDataFault* pData)
{
if (!pGraphic || !pData) {
return;
}
// 将数据值推到图元
_pushFaultDataToGraphic(pGraphic, pData);
// 建立信号连接
_connectFault(pGraphic, pData);
}
// 删除图元:断开连接并移除数据
void nmPlotGraphicBinder::removeFaultBinding(nmObjLineFault* pGraphic)
{
if (!pGraphic) {
return;
}
// 断开信号
_disconnectFault(pGraphic);
// 从数据中心移除
if (m_mapFaultData.contains(pGraphic)) {
nmDataFault* pData = m_mapFaultData.value(pGraphic);
if (pData && m_pDataMgr) {
m_pDataMgr->removeFaultData(pData);
}
m_mapFaultData.remove(pGraphic);
}
}
nmDataFault* nmPlotGraphicBinder::getFaultDataFor(nmObjLineFault* pGraphic)
{
return m_mapFaultData.value(pGraphic, nullptr);
}
// 切换分析时更新绑定的 DataManager
// 旧图元已由 deleteAllPlotObjs 清除,清理残留映射避免悬空指针
void nmPlotGraphicBinder::updateDataMgr(nmDataAnalyzeManager* pDataMgr)
{
m_mapFaultData.clear();
m_setBoundGraphics.clear();
m_pDataMgr = pDataMgr;
}
// 将数据值推到图元本地副本
void nmPlotGraphicBinder::_pushFaultDataToGraphic(nmObjLineFault* pGraphic, nmDataFault* pData)
{
// 阻断信号,防止推送中触发反向同步
pGraphic->blockSignals(true);
pGraphic->setName(pData->getFaultName());
int flowModel = (pData->getFaultFlowModel().getValue() == tr("Leaky")) ? 0 : 1;
pGraphic->setFaultFlowModel(flowModel);
pGraphic->setFaultLeakage(pData->getFaultLeakage().getValue().toDouble());
pGraphic->blockSignals(false);
}
// 建立图元与数据的双向信号连接
void nmPlotGraphicBinder::_connectFault(nmObjLineFault* pGraphic, nmDataFault* pData)
{
QObject::connect(pGraphic, SIGNAL(sigFlowModelChanged(int)),
this, SLOT(onGraphicFlowModelChanged(int)));
QObject::connect(pGraphic, SIGNAL(sigLeakageChanged(double)),
this, SLOT(onGraphicLeakageChanged(double)));
QObject::connect(pGraphic, SIGNAL(sigPointsChanged()),
this, SLOT(onGraphicPointsChanged()));
QObject::connect(pGraphic, SIGNAL(sigObjVisibleChanged(bool)),
this, SLOT(onGraphicVisibleChanged(bool)));
m_mapFaultData[pGraphic] = pData;
m_setBoundGraphics.insert(pGraphic);
pGraphic->setGraphicBinder(this);
}
// 断开图元与本 Binder 的所有信号连接
void nmPlotGraphicBinder::_disconnectFault(nmObjLineFault* pGraphic)
{
QObject::disconnect(pGraphic, SIGNAL(sigFlowModelChanged(int)),
this, SLOT(onGraphicFlowModelChanged(int)));
QObject::disconnect(pGraphic, SIGNAL(sigLeakageChanged(double)),
this, SLOT(onGraphicLeakageChanged(double)));
QObject::disconnect(pGraphic, SIGNAL(sigPointsChanged()),
this, SLOT(onGraphicPointsChanged()));
QObject::disconnect(pGraphic, SIGNAL(sigObjVisibleChanged(bool)),
this, SLOT(onGraphicVisibleChanged(bool)));
m_setBoundGraphics.remove(pGraphic);
}
// 图元属性变更 → 同步到数据
// 流动模型变更
void nmPlotGraphicBinder::onGraphicFlowModelChanged(int model)
{
nmObjLineFault* pGraphic = qobject_cast<nmObjLineFault*>(sender());
if (!pGraphic) return;
nmDataFault* pData = m_mapFaultData.value(pGraphic, nullptr);
if (!pData) return;
nmDataAttribute attr = pData->getFaultFlowModel();
attr.setValue(model == 0 ? tr("Leaky") : tr("Composite Limit"));
pData->setFaultFlowModel(attr);
}
// 渗漏率变更
void nmPlotGraphicBinder::onGraphicLeakageChanged(double leakage)
{
nmObjLineFault* pGraphic = qobject_cast<nmObjLineFault*>(sender());
if (!pGraphic) return;
nmDataFault* pData = m_mapFaultData.value(pGraphic, nullptr);
if (!pData) return;
nmDataAttribute attr = pData->getFaultLeakage();
attr.setValue(leakage);
pData->setFaultLeakage(attr);
}
// 点坐标变更
void nmPlotGraphicBinder::onGraphicPointsChanged()
{
nmObjLineFault* pGraphic = qobject_cast<nmObjLineFault*>(sender());
if (!pGraphic) return;
nmDataFault* pData = m_mapFaultData.value(pGraphic, nullptr);
if (!pData) return;
pData->setFaultPoints(pGraphic->getAllValues());
pData->setFaultName(pGraphic->getName());
if (m_pDataMgr) {
m_pDataMgr->notifyDataChanged();
}
}
// 可见性变更
void nmPlotGraphicBinder::onGraphicVisibleChanged(bool bVisible)
{
nmObjLineFault* pGraphic = qobject_cast<nmObjLineFault*>(sender());
if (!pGraphic) return;
nmDataFault* pData = m_mapFaultData.value(pGraphic, nullptr);
if (!pData) return;
pData->setPlotVisible(bVisible);
}
// 数据变更(预留)
void nmPlotGraphicBinder::onDataChanged()
{
}

@ -33,6 +33,7 @@
#endif
#include "nmGuiPlot.h"
#include "nmPlotGraphicBinder.h"
#include "nmSubWndMain.h"
#include "nmPlotDialogContext.h"
#include "nmPlotDialogContextProvider.h"
@ -2443,6 +2444,12 @@ void nmSubWndMain::updateMapByDataManager(nmDataAnalyzeManager* pDataManager)
m_pWxPlot->deleteAllPlotObjs();
// 切换分析时更新 Binder 绑定的 DataManager
// 确保用户新画断层时添加到正确的 DataManager
if(m_pWxPlot->graphicBinder()) {
m_pWxPlot->graphicBinder()->updateDataMgr(pDataManager);
}
// 根据数据中心内容绘制新图元
m_pWxPlot->setPlotsByDataManger(pDataManager);
}

Loading…
Cancel
Save