查找数据指针的实现放到binder

feature/nm-para-property-20260615
lvjunjie 1 week ago
parent f576bb6f0a
commit 100fa6336f

@ -1,11 +1,10 @@
#pragma once #pragma once
#include "nmObjBase.h" #include "nmObjBase.h"
#include "nmDefines.h" #include "nmDefines.h"
#include "nmPlot_global.h" #include "nmPlot_global.h"
class nmPlotGraphicBinder; class nmPlotGraphicBinder;
class nmDataFracture;
// 数值试井绘图对象(线) // 数值试井绘图对象(线)
class NM_PLOT_EXPORT nmObjLineCrack : public nmObjBase class NM_PLOT_EXPORT nmObjLineCrack : public nmObjBase
@ -91,10 +90,8 @@ public:
double getCrackDw(); double getCrackDw();
void setCrackDw(double newCrackDw); void setCrackDw(double newCrackDw);
// 查找数据指针(通过 Binder 反查)
nmDataFracture* getFractureData() const;
void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; }
nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; }
double getStartX(); double getStartX();
void setStartX(double newValue); void setStartX(double newValue);

@ -5,7 +5,6 @@
#include "nmPlot_global.h" #include "nmPlot_global.h"
class nmPlotGraphicBinder; class nmPlotGraphicBinder;
class nmDataFault;
// 数值试井绘图对象(断层) // 数值试井绘图对象(断层)
class NM_PLOT_EXPORT nmObjLineFault : public nmObjBase class NM_PLOT_EXPORT nmObjLineFault : public nmObjBase
@ -96,10 +95,8 @@ public:
double getEndY(); double getEndY();
void setEndY(double newValue); void setEndY(double newValue);
// 查找数据指针
nmDataFault* getFaultData() const;
void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; }
nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; }
private: private:
QString m_sFlowModel; QString m_sFlowModel;

@ -6,7 +6,6 @@
#include "nmObjRegionMark.h" #include "nmObjRegionMark.h"
class nmDataRegion;
class nmPlotGraphicBinder; class nmPlotGraphicBinder;
// 数值试井绘图对象(区域) // 数值试井绘图对象(区域)
@ -96,10 +95,9 @@ public:
void setRegionMark(nmObjRegionMark* newRegionMark); void setRegionMark(nmObjRegionMark* newRegionMark);
nmObjRegionMark* getRegionMark() const; nmObjRegionMark* getRegionMark() const;
// 查找数据指针(通过 Binder
nmDataRegion* getRegionData() const;
void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; }
nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; }
public: public:
QColor m_clrBackgrd;//填充颜色 QColor m_clrBackgrd;//填充颜色

@ -7,7 +7,6 @@
#include "ZxPlot.h" #include "ZxPlot.h"
class nmPlotGraphicBinder; class nmPlotGraphicBinder;
class nmDataRegionMark;
class NM_PLOT_EXPORT nmObjRegionMark : public nmObjBase { class NM_PLOT_EXPORT nmObjRegionMark : public nmObjBase {
Q_OBJECT Q_OBJECT
@ -99,8 +98,8 @@ public:
// 注入 Binder 指针 // 注入 Binder 指针
void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; } void setGraphicBinder(nmPlotGraphicBinder* pBinder) { m_pGraphicBinder = pBinder; }
// 通过 Binder 查询关联的数据对象(供 nmObjRegion 使用) // Binder access
nmDataRegionMark* getRegionMarkData() const; nmPlotGraphicBinder* getGraphicBinder() const { return m_pGraphicBinder; }
signals: signals:
// 储层类型变更 // 储层类型变更

@ -1440,11 +1440,16 @@ void nmGuiPlot::deleteAllDFNPlots()
for(int i = 0; i < objList.count() ; i++) { for(int i = 0; i < objList.count() ; i++) {
nmObjLineCrack* pCrack = (nmObjLineCrack*)objList[i]; nmObjLineCrack* pCrack = (nmObjLineCrack*)objList[i];
if(pCrack == nullptr || pCrack->getFractureData() == nullptr) { if(pCrack == nullptr || m_pGraphicBinder == nullptr) {
continue; 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 清理数据绑定 // 通过 Binder 清理数据绑定
m_pGraphicBinder->removeCrackBinding(pCrack); m_pGraphicBinder->removeCrackBinding(pCrack);
// 删除DFN图元 // 删除DFN图元

@ -12,6 +12,7 @@
#include "nmObjLineCrack.h" #include "nmObjLineCrack.h"
#include "nmDataFracture.h" #include "nmDataFracture.h"
#include "nmPlotGraphicBinder.h"
nmObjDeleteTool::nmObjDeleteTool() : nmObjToolBase() nmObjDeleteTool::nmObjDeleteTool() : nmObjToolBase()
, m_pPlot(nullptr) , m_pPlot(nullptr)
@ -126,11 +127,16 @@ void nmObjDeleteTool::onPaint(QPainter* painter, const ZxPaintParam& param)
// 判断裂缝是不是裂缝 // 判断裂缝是不是裂缝
if(_isSame("nObjLineFracture", obj->getTagName())) { if(_isSame("nObjLineFracture", obj->getTagName())) {
nmObjLineCrack* pFractureObj = dynamic_cast<nmObjLineCrack*>(obj); nmObjLineCrack* pFractureObj = dynamic_cast<nmObjLineCrack*>(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; continue;
} }
// 如果是DFN生成的裂缝那么不做处理 // 如果是DFN生成的裂缝那么不做处理
if (pFractureObj->getFractureData()->getFractureType().getValue() == tr("DFN")) { if (pFractureData->getFractureType().getValue() == tr("DFN")) {
continue; continue;
} }
} }

@ -13,9 +13,6 @@
#include "nmObjLineCrack.h" #include "nmObjLineCrack.h"
#include "nmPlotGraphicBinder.h" #include "nmPlotGraphicBinder.h"
#include "nmDataFracture.h"
#include "nmDataAnalyzeManager.h"
ZX_DEFINE_DYNAMIC(nObjLineFracture, nmObjLineCrack) ZX_DEFINE_DYNAMIC(nObjLineFracture, nmObjLineCrack)
nmObjLineCrack::nmObjLineCrack() nmObjLineCrack::nmObjLineCrack()
@ -406,14 +403,6 @@ void nmObjLineCrack::fillPtyPano(IxPtyPano* sheet)
ZX_PROP("ObjLineCrackEndPos.EndPointY", getEndY, setEndY); ZX_PROP("ObjLineCrackEndPos.EndPointY", getEndY, setEndY);
} }
nmDataFracture* nmObjLineCrack::getFractureData() const
{
if(m_pGraphicBinder) {
return m_pGraphicBinder->getCrackDataFor(const_cast<nmObjLineCrack*>(this));
}
return nullptr;
}
double nmObjLineCrack::getStartX() double nmObjLineCrack::getStartX()
{ {
if(!m_vecPoints.isEmpty()) if(!m_vecPoints.isEmpty())

@ -8,6 +8,7 @@
#include "nmObjLineCrack.h" #include "nmObjLineCrack.h"
#include "nmDataFracture.h" #include "nmDataFracture.h"
#include "nmPlotGraphicBinder.h"
#include "nmObjPointWell.h" #include "nmObjPointWell.h"
@ -189,7 +190,10 @@ void nmObjLineCrackTool::onPaint(QPainter* painter, const ZxPaintParam& param)
painter->save(); painter->save();
m_vecCurAllPts.clear(); 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; double dDistance = 2.2f;

@ -13,7 +13,6 @@
#include "nmObjLineFault.h" #include "nmObjLineFault.h"
#include "nmPlotGraphicBinder.h" #include "nmPlotGraphicBinder.h"
#include "nmDataFault.h"
ZX_DEFINE_DYNAMIC(nObjLineFault, nmObjLineFault) ZX_DEFINE_DYNAMIC(nObjLineFault, nmObjLineFault)
@ -390,7 +389,6 @@ void nmObjLineFault::onDeserialize(ZxSerializer* ser) {
this->setFaultFlowModel(flowModel); this->setFaultFlowModel(flowModel);
this->setFaultLeakage(faultLeakage); this->setFaultLeakage(faultLeakage);
} }
void nmObjLineFault::onSaveTempl(ZxSerializer* ser) { void nmObjLineFault::onSaveTempl(ZxSerializer* ser) {
nmObjBase::onSaveTempl(ser); nmObjBase::onSaveTempl(ser);
int flowModel = getFaultFlowModel(); int flowModel = getFaultFlowModel();
@ -409,9 +407,3 @@ void nmObjLineFault::onLoadTempl(ZxSerializer* ser) {
this->setFaultFlowModel(flowModel); this->setFaultFlowModel(flowModel);
this->setFaultLeakage(faultLeakage); this->setFaultLeakage(faultLeakage);
} }
nmDataFault* nmObjLineFault::getFaultData() const {
if (m_pGraphicBinder)
return m_pGraphicBinder->getFaultDataFor(const_cast<nmObjLineFault*>(this));
return nullptr;
}

@ -1,4 +1,4 @@
#include <QPainter> #include <QPainter>
#include "ZxBaseUtil.h" #include "ZxBaseUtil.h"
#include "ZxObjBase.h" #include "ZxObjBase.h"
@ -8,6 +8,7 @@
#include "nmObjLineFault.h" #include "nmObjLineFault.h"
#include "nmDataFault.h" #include "nmDataFault.h"
#include "nmPlotGraphicBinder.h"
#include "ZxPlot.h" #include "ZxPlot.h"
#include "nmObjPointWell.h" #include "nmObjPointWell.h"
@ -177,7 +178,10 @@ void nmObjLineFaultTool::onPaint(QPainter* painter, const ZxPaintParam& param)
painter->save(); painter->save();
m_vecCurAllPts.clear(); 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; double dDistance = 2.2f;

@ -13,7 +13,6 @@
#include "ZxPlot.h" #include "ZxPlot.h"
#include "nmPlotGraphicBinder.h" #include "nmPlotGraphicBinder.h"
#include "nmDataRegion.h"
#include <algorithm> #include <algorithm>
@ -415,13 +414,6 @@ nmObjRegionMark* nmObjRegion::getRegionMark() const
return m_regionMark; return m_regionMark;
} }
nmDataRegion* nmObjRegion::getRegionData() const
{
if (m_pGraphicBinder)
return m_pGraphicBinder->getRegionDataFor(const_cast<nmObjRegion*>(this));
return nullptr;
}
//鞋带公式计算多边形有向面积。 //鞋带公式计算多边形有向面积。
static double calcSignedArea(const QVector<QPointF>& pts) static double calcSignedArea(const QVector<QPointF>& pts)
{ {

@ -17,7 +17,6 @@
#include "ZxPlot.h" #include "ZxPlot.h"
#include "nmPlotGraphicBinder.h" #include "nmPlotGraphicBinder.h"
#include "nmDataRegionMark.h"
ZX_DEFINE_DYNAMIC(nObjRegionMark, nmObjRegionMark) ZX_DEFINE_DYNAMIC(nObjRegionMark, nmObjRegionMark)
@ -434,10 +433,3 @@ void nmObjRegionMark::removeData()
} }
// 通过 Binder 查询关联的数据对象(供 nmObjRegion 使用) // 通过 Binder 查询关联的数据对象(供 nmObjRegion 使用)
nmDataRegionMark* nmObjRegionMark::getRegionMarkData() const
{
if (m_pGraphicBinder) {
return m_pGraphicBinder->getRegionMarkDataFor(const_cast<nmObjRegionMark*>(this));
}
return nullptr;
}

@ -7,6 +7,7 @@
#include "nmDataAnalyzeManager.h" #include "nmDataAnalyzeManager.h"
#include "nmDataRegion.h" #include "nmDataRegion.h"
#include "nmPlotGraphicBinder.h"
#include "ZxPlot.h" #include "ZxPlot.h"
@ -167,7 +168,10 @@ void nmObjRegionTool::onPaint(QPainter* painter, const ZxPaintParam& param)
painter->save(); painter->save();
m_vecCurAllPts.clear(); 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; double dDistance = 2.2f;
for(int i = 0; i < m_vecCurAllPts.count(); i++) { for(int i = 0; i < m_vecCurAllPts.count(); i++) {

@ -1230,7 +1230,7 @@ void nmPlotGraphicBinder::syncRegionData(nmObjRegion* pGraphic)
// 区域标记关联 // 区域标记关联
nmObjRegionMark* pRegionMark = pGraphic->getRegionMark(); nmObjRegionMark* pRegionMark = pGraphic->getRegionMark();
if (pRegionMark) { if (pRegionMark) {
nmDataRegionMark* pMarkData = pRegionMark->getRegionMarkData(); nmDataRegionMark* pMarkData = getRegionMarkDataFor(pRegionMark);
if (pMarkData) { if (pMarkData) {
pData->setRegionMarkData(pMarkData); pData->setRegionMarkData(pMarkData);
} else { } else {

@ -482,13 +482,17 @@ void nmWxDFNGenerateDlg::generateFractures()
nmObjLineCrack* crack = dynamic_cast<nmObjLineCrack*>(obj); nmObjLineCrack* crack = dynamic_cast<nmObjLineCrack*>(obj);
if (crack) { if (crack) {
// 通过 Binder 创建裂缝数据并建立信号连接 // 通过 Binder 创建裂缝数据并建立信号连接
if (plot->graphicBinder()) { nmPlotGraphicBinder* pBinder = plot->graphicBinder();
plot->graphicBinder()->createCrackForGraphic(crack); if (pBinder) {
pBinder->createCrackForGraphic(crack);
} }
// 设置属性为 DFN // 设置属性为 DFN
nmDataAttribute attr = crack->getFractureData()->getFractureType(); nmDataFracture* pData = pBinder ? pBinder->getCrackDataFor(crack) : nullptr;
attr.setValue(tr("DFN")); if (pData) {
crack->getFractureData()->setFractureType(attr); nmDataAttribute attr = pData->getFractureType();
attr.setValue(tr("DFN"));
pData->setFractureType(attr);
}
crack->setPen(QPen(QBrush(QColor("#00bfff")), 0.4f, Qt::SolidLine)); crack->setPen(QPen(QBrush(QColor("#00bfff")), 0.4f, Qt::SolidLine));
crack->setLockForDFN(); crack->setLockForDFN();
} }

Loading…
Cancel
Save