diff --git a/Include/nmNum/nmPlot/nmObjLineCrack.h b/Include/nmNum/nmPlot/nmObjLineCrack.h index ffddcc8..438e1cf 100644 --- a/Include/nmNum/nmPlot/nmObjLineCrack.h +++ b/Include/nmNum/nmPlot/nmObjLineCrack.h @@ -1,11 +1,10 @@ -#pragma once +#pragma once #include "nmObjBase.h" #include "nmDefines.h" #include "nmPlot_global.h" class nmPlotGraphicBinder; -class nmDataFracture; // 数值试井绘图对象(线) class NM_PLOT_EXPORT nmObjLineCrack : public nmObjBase @@ -91,10 +90,8 @@ public: double getCrackDw(); void setCrackDw(double newCrackDw); - // 查找数据指针(通过 Binder 反查) - nmDataFracture* getFractureData() const; - void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } + nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; } double getStartX(); void setStartX(double newValue); diff --git a/Include/nmNum/nmPlot/nmObjLineFault.h b/Include/nmNum/nmPlot/nmObjLineFault.h index 7a3dd7f..0c6c844 100644 --- a/Include/nmNum/nmPlot/nmObjLineFault.h +++ b/Include/nmNum/nmPlot/nmObjLineFault.h @@ -5,7 +5,6 @@ #include "nmPlot_global.h" class nmPlotGraphicBinder; -class nmDataFault; // 数值试井绘图对象(断层) class NM_PLOT_EXPORT nmObjLineFault : public nmObjBase @@ -96,10 +95,8 @@ public: double getEndY(); void setEndY(double newValue); - // 查找数据指针 - nmDataFault* getFaultData() const; - void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } + nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; } private: QString m_sFlowModel; diff --git a/Include/nmNum/nmPlot/nmObjRegion.h b/Include/nmNum/nmPlot/nmObjRegion.h index 2107000..8196f2c 100644 --- a/Include/nmNum/nmPlot/nmObjRegion.h +++ b/Include/nmNum/nmPlot/nmObjRegion.h @@ -6,7 +6,6 @@ #include "nmObjRegionMark.h" -class nmDataRegion; class nmPlotGraphicBinder; // 数值试井绘图对象(区域) @@ -96,10 +95,9 @@ public: void setRegionMark(nmObjRegionMark* newRegionMark); nmObjRegionMark* getRegionMark() const; - // 查找数据指针(通过 Binder) - nmDataRegion* getRegionData() const; void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } + nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; } public: QColor m_clrBackgrd;//填充颜色 diff --git a/Include/nmNum/nmPlot/nmObjRegionMark.h b/Include/nmNum/nmPlot/nmObjRegionMark.h index 6ed708e..828eb00 100644 --- a/Include/nmNum/nmPlot/nmObjRegionMark.h +++ b/Include/nmNum/nmPlot/nmObjRegionMark.h @@ -7,7 +7,6 @@ #include "ZxPlot.h" class nmPlotGraphicBinder; -class nmDataRegionMark; class NM_PLOT_EXPORT nmObjRegionMark : public nmObjBase { Q_OBJECT @@ -99,8 +98,8 @@ public: // 注入 Binder 指针 void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } - // 通过 Binder 查询关联的数据对象(供 nmObjRegion 使用) - nmDataRegionMark* getRegionMarkData() const; + // Binder access + nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; } signals: // 储层类型变更 diff --git a/Src/nmNum/nmPlot/nmGuiPlot.cpp b/Src/nmNum/nmPlot/nmGuiPlot.cpp index d26acde..8f36cee 100644 --- a/Src/nmNum/nmPlot/nmGuiPlot.cpp +++ b/Src/nmNum/nmPlot/nmGuiPlot.cpp @@ -1440,11 +1440,16 @@ void nmGuiPlot::deleteAllDFNPlots() for(int i = 0; i < objList.count() ; i++) { nmObjLineCrack* pCrack = (nmObjLineCrack*)objList[i]; - if(pCrack == nullptr || pCrack->getFractureData() == nullptr) { + if(pCrack == nullptr || m_pGraphicBinder == nullptr) { continue; } - if(pCrack->getFractureData()->getFractureType().getValue() == tr("DFN")) { + nmDataFracture* pData = m_pGraphicBinder->getCrackDataFor(pCrack); + if(pData == nullptr) { + continue; + } + + if(pData->getFractureType().getValue() == tr("DFN")) { // 通过 Binder 清理数据绑定 m_pGraphicBinder->removeCrackBinding(pCrack); // 删除DFN图元 diff --git a/Src/nmNum/nmPlot/nmObjDeleteTool.cpp b/Src/nmNum/nmPlot/nmObjDeleteTool.cpp index 6cd341b..660b1ee 100644 --- a/Src/nmNum/nmPlot/nmObjDeleteTool.cpp +++ b/Src/nmNum/nmPlot/nmObjDeleteTool.cpp @@ -12,6 +12,7 @@ #include "nmObjLineCrack.h" #include "nmDataFracture.h" +#include "nmPlotGraphicBinder.h" nmObjDeleteTool::nmObjDeleteTool() : nmObjToolBase() , m_pPlot(nullptr) @@ -126,11 +127,16 @@ void nmObjDeleteTool::onPaint(QPainter* painter, const ZxPaintParam& param) // 判断裂缝是不是裂缝 if(_isSame("nObjLineFracture", obj->getTagName())) { nmObjLineCrack* pFractureObj = dynamic_cast(obj); - if (pFractureObj == NULL || pFractureObj->getFractureData() == NULL) { + if (pFractureObj == NULL) { + continue; + } + nmPlotGraphicBinder* pBinder = pFractureObj->getGraphicBinder(); + nmDataFracture* pFractureData = pBinder ? pBinder->getCrackDataFor(pFractureObj) : nullptr; + if (pFractureData == NULL) { continue; } // 如果是DFN生成的裂缝,那么不做处理 - if (pFractureObj->getFractureData()->getFractureType().getValue() == tr("DFN")) { + if (pFractureData->getFractureType().getValue() == tr("DFN")) { continue; } } diff --git a/Src/nmNum/nmPlot/nmObjLineCrack.cpp b/Src/nmNum/nmPlot/nmObjLineCrack.cpp index e4593f3..0415067 100644 --- a/Src/nmNum/nmPlot/nmObjLineCrack.cpp +++ b/Src/nmNum/nmPlot/nmObjLineCrack.cpp @@ -13,9 +13,6 @@ #include "nmObjLineCrack.h" #include "nmPlotGraphicBinder.h" -#include "nmDataFracture.h" -#include "nmDataAnalyzeManager.h" - ZX_DEFINE_DYNAMIC(nObjLineFracture, nmObjLineCrack) nmObjLineCrack::nmObjLineCrack() @@ -406,14 +403,6 @@ void nmObjLineCrack::fillPtyPano(IxPtyPano* sheet) ZX_PROP("ObjLineCrackEndPos.EndPointY", getEndY, setEndY); } -nmDataFracture* nmObjLineCrack::getFractureData() const -{ - if(m_pGraphicBinder) { - return m_pGraphicBinder->getCrackDataFor(const_cast(this)); - } - return nullptr; -} - double nmObjLineCrack::getStartX() { if(!m_vecPoints.isEmpty()) diff --git a/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp b/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp index ffcc8f6..ac5cebc 100644 --- a/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp +++ b/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp @@ -8,6 +8,7 @@ #include "nmObjLineCrack.h" #include "nmDataFracture.h" +#include "nmPlotGraphicBinder.h" #include "nmObjPointWell.h" @@ -189,7 +190,10 @@ void nmObjLineCrackTool::onPaint(QPainter* painter, const ZxPaintParam& param) painter->save(); m_vecCurAllPts.clear(); - m_vecCurAllPts = nmDataAnalyzeManager::getCurrentInstance()->removePosByObject(pObj->getFractureData()); + nmPlotGraphicBinder* pBinder = pObj->getGraphicBinder(); + nmDataFracture* pData = pBinder ? pBinder->getCrackDataFor(pObj) : nullptr; + m_vecCurAllPts = pData ? nmDataAnalyzeManager::getCurrentInstance()->removePosByObject(pData) + : nmDataAnalyzeManager::getCurrentInstance()->getPosAllConnectablePoints(); // 将需要选中的点绘制正方形 double dDistance = 2.2f; diff --git a/Src/nmNum/nmPlot/nmObjLineFault.cpp b/Src/nmNum/nmPlot/nmObjLineFault.cpp index 438e431..cfd63be 100644 --- a/Src/nmNum/nmPlot/nmObjLineFault.cpp +++ b/Src/nmNum/nmPlot/nmObjLineFault.cpp @@ -13,7 +13,6 @@ #include "nmObjLineFault.h" #include "nmPlotGraphicBinder.h" -#include "nmDataFault.h" ZX_DEFINE_DYNAMIC(nObjLineFault, nmObjLineFault) @@ -390,7 +389,6 @@ void nmObjLineFault::onDeserialize(ZxSerializer* ser) { this->setFaultFlowModel(flowModel); this->setFaultLeakage(faultLeakage); } - void nmObjLineFault::onSaveTempl(ZxSerializer* ser) { nmObjBase::onSaveTempl(ser); int flowModel = getFaultFlowModel(); @@ -409,9 +407,3 @@ void nmObjLineFault::onLoadTempl(ZxSerializer* ser) { this->setFaultFlowModel(flowModel); this->setFaultLeakage(faultLeakage); } - -nmDataFault* nmObjLineFault::getFaultData() const { - if (m_pGraphicBinder) - return m_pGraphicBinder->getFaultDataFor(const_cast(this)); - return nullptr; -} diff --git a/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp b/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp index 3704382..9da7785 100644 --- a/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp +++ b/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp @@ -1,4 +1,4 @@ -#include +#include #include "ZxBaseUtil.h" #include "ZxObjBase.h" @@ -8,6 +8,7 @@ #include "nmObjLineFault.h" #include "nmDataFault.h" +#include "nmPlotGraphicBinder.h" #include "ZxPlot.h" #include "nmObjPointWell.h" @@ -177,7 +178,10 @@ void nmObjLineFaultTool::onPaint(QPainter* painter, const ZxPaintParam& param) painter->save(); m_vecCurAllPts.clear(); - m_vecCurAllPts = nmDataAnalyzeManager::getCurrentInstance()->removePosByObject(pObj->getFaultData()); + nmPlotGraphicBinder* pBinder = pObj->getGraphicBinder(); + nmDataFault* pData = pBinder ? pBinder->getFaultDataFor(pObj) : nullptr; + m_vecCurAllPts = pData ? nmDataAnalyzeManager::getCurrentInstance()->removePosByObject(pData) + : nmDataAnalyzeManager::getCurrentInstance()->getPosAllConnectablePoints(); // 将需要选中的点绘制正方形 double dDistance = 2.2f; diff --git a/Src/nmNum/nmPlot/nmObjRegion.cpp b/Src/nmNum/nmPlot/nmObjRegion.cpp index 5c453e0..602a4c9 100644 --- a/Src/nmNum/nmPlot/nmObjRegion.cpp +++ b/Src/nmNum/nmPlot/nmObjRegion.cpp @@ -13,7 +13,6 @@ #include "ZxPlot.h" #include "nmPlotGraphicBinder.h" -#include "nmDataRegion.h" #include @@ -415,13 +414,6 @@ nmObjRegionMark* nmObjRegion::getRegionMark() const return m_regionMark; } -nmDataRegion* nmObjRegion::getRegionData() const -{ - if (m_pGraphicBinder) - return m_pGraphicBinder->getRegionDataFor(const_cast(this)); - return nullptr; -} - //鞋带公式计算多边形有向面积。 static double calcSignedArea(const QVector& pts) { diff --git a/Src/nmNum/nmPlot/nmObjRegionMark.cpp b/Src/nmNum/nmPlot/nmObjRegionMark.cpp index 12255bb..7a06ad9 100644 --- a/Src/nmNum/nmPlot/nmObjRegionMark.cpp +++ b/Src/nmNum/nmPlot/nmObjRegionMark.cpp @@ -17,7 +17,6 @@ #include "ZxPlot.h" #include "nmPlotGraphicBinder.h" -#include "nmDataRegionMark.h" ZX_DEFINE_DYNAMIC(nObjRegionMark, nmObjRegionMark) @@ -434,10 +433,3 @@ void nmObjRegionMark::removeData() } // 通过 Binder 查询关联的数据对象(供 nmObjRegion 使用) -nmDataRegionMark* nmObjRegionMark::getRegionMarkData() const -{ - if (m_pGraphicBinder) { - return m_pGraphicBinder->getRegionMarkDataFor(const_cast(this)); - } - return nullptr; -} diff --git a/Src/nmNum/nmPlot/nmObjRegionTool.cpp b/Src/nmNum/nmPlot/nmObjRegionTool.cpp index 846d2a6..fceac38 100644 --- a/Src/nmNum/nmPlot/nmObjRegionTool.cpp +++ b/Src/nmNum/nmPlot/nmObjRegionTool.cpp @@ -7,6 +7,7 @@ #include "nmDataAnalyzeManager.h" #include "nmDataRegion.h" +#include "nmPlotGraphicBinder.h" #include "ZxPlot.h" @@ -167,7 +168,10 @@ void nmObjRegionTool::onPaint(QPainter* painter, const ZxPaintParam& param) painter->save(); m_vecCurAllPts.clear(); - m_vecCurAllPts = nmDataAnalyzeManager::getCurrentInstance()->removePosByObject(pObj->getRegionData()); + nmPlotGraphicBinder* pBinder = pObj->getGraphicBinder(); + nmDataRegion* pData = pBinder ? pBinder->getRegionDataFor(pObj) : nullptr; + m_vecCurAllPts = pData ? nmDataAnalyzeManager::getCurrentInstance()->removePosByObject(pData) + : nmDataAnalyzeManager::getCurrentInstance()->getPosAllConnectablePoints(); double dDistance = 2.2f; for(int i = 0; i < m_vecCurAllPts.count(); i++) { diff --git a/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp b/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp index 77fa88b..0006149 100644 --- a/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp +++ b/Src/nmNum/nmPlot/nmPlotGraphicBinder.cpp @@ -1230,7 +1230,7 @@ void nmPlotGraphicBinder::syncRegionData(nmObjRegion* pGraphic) // 区域标记关联 nmObjRegionMark* pRegionMark = pGraphic->getRegionMark(); if (pRegionMark) { - nmDataRegionMark* pMarkData = pRegionMark->getRegionMarkData(); + nmDataRegionMark* pMarkData = getRegionMarkDataFor(pRegionMark); if (pMarkData) { pData->setRegionMarkData(pMarkData); } else { diff --git a/Src/nmNum/nmSubWxs/nmWxDFNGenerateDlg.cpp b/Src/nmNum/nmSubWxs/nmWxDFNGenerateDlg.cpp index e44369e..0d137d1 100644 --- a/Src/nmNum/nmSubWxs/nmWxDFNGenerateDlg.cpp +++ b/Src/nmNum/nmSubWxs/nmWxDFNGenerateDlg.cpp @@ -482,13 +482,17 @@ void nmWxDFNGenerateDlg::generateFractures() nmObjLineCrack* crack = dynamic_cast(obj); if (crack) { // 通过 Binder 创建裂缝数据并建立信号连接 - if (plot->graphicBinder()) { - plot->graphicBinder()->createCrackForGraphic(crack); + nmPlotGraphicBinder* pBinder = plot->graphicBinder(); + if (pBinder) { + pBinder->createCrackForGraphic(crack); } // 设置属性为 DFN - nmDataAttribute attr = crack->getFractureData()->getFractureType(); - attr.setValue(tr("DFN")); - crack->getFractureData()->setFractureType(attr); + nmDataFracture* pData = pBinder ? pBinder->getCrackDataFor(crack) : nullptr; + if (pData) { + nmDataAttribute attr = pData->getFractureType(); + attr.setValue(tr("DFN")); + pData->setFractureType(attr); + } crack->setPen(QPen(QBrush(QColor("#00bfff")), 0.4f, Qt::SolidLine)); crack->setLockForDFN(); }