|
|
|
|
@ -16,14 +16,19 @@
|
|
|
|
|
#include "ZxBaseUtil.h"
|
|
|
|
|
#include "ZxPlot.h"
|
|
|
|
|
|
|
|
|
|
#include "nmDataAnalyzeManager.h"
|
|
|
|
|
#include "nmPlotGraphicBinder.h"
|
|
|
|
|
#include "nmDataRegionMark.h"
|
|
|
|
|
|
|
|
|
|
ZX_DEFINE_DYNAMIC(nObjRegionMark, nmObjRegionMark)
|
|
|
|
|
|
|
|
|
|
nmObjRegionMark::nmObjRegionMark()
|
|
|
|
|
: m_bSelectRegion(false)
|
|
|
|
|
, m_iColorIndex(0)
|
|
|
|
|
, m_regionMarkData(nullptr)
|
|
|
|
|
, m_reservoirType(0)
|
|
|
|
|
, m_comKr(1.0)
|
|
|
|
|
, m_comW(1.0)
|
|
|
|
|
, m_netToGross(1.0)
|
|
|
|
|
, m_pGraphicBinder(nullptr)
|
|
|
|
|
{
|
|
|
|
|
m_sObjTag = "nObjRegionMark";
|
|
|
|
|
nmObjRegionMark::init("", NULL, NULL);
|
|
|
|
|
@ -36,7 +41,11 @@ nmObjRegionMark::nmObjRegionMark(const QString& sName, \
|
|
|
|
|
int RegionMarkCount)
|
|
|
|
|
: m_bSelectRegion(false)
|
|
|
|
|
, m_iColorIndex(RegionMarkCount)
|
|
|
|
|
, m_regionMarkData(nullptr)
|
|
|
|
|
, m_reservoirType(0)
|
|
|
|
|
, m_comKr(1.0)
|
|
|
|
|
, m_comW(1.0)
|
|
|
|
|
, m_netToGross(1.0)
|
|
|
|
|
, m_pGraphicBinder(nullptr)
|
|
|
|
|
{
|
|
|
|
|
m_sObjTag = "nObjRegionMark";
|
|
|
|
|
nmObjRegionMark::init(sName, pAxisX, pAxisY);
|
|
|
|
|
@ -46,8 +55,6 @@ nmObjRegionMark::nmObjRegionMark(const QString& sName, \
|
|
|
|
|
|
|
|
|
|
nmObjRegionMark::~nmObjRegionMark()
|
|
|
|
|
{
|
|
|
|
|
// 区域标记数据由DataManager统一释放,图元只保存引用。
|
|
|
|
|
m_regionMarkData = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QColor nmObjRegionMark::generateColor(int index)
|
|
|
|
|
@ -69,7 +76,7 @@ void nmObjRegionMark::init(const QString& sName, \
|
|
|
|
|
|
|
|
|
|
m_bSelectRegion = false;
|
|
|
|
|
|
|
|
|
|
m_regionMarkData = nullptr;
|
|
|
|
|
m_pGraphicBinder = nullptr;
|
|
|
|
|
|
|
|
|
|
m_icon = QPixmap(ZxBaseUtil::getDirOf(s_Dir_Res, "Icon") + "Anchor.png");
|
|
|
|
|
|
|
|
|
|
@ -89,80 +96,64 @@ void nmObjRegionMark::initTools()
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::setResevoirType(int newResevoirType)
|
|
|
|
|
{
|
|
|
|
|
// 从Data中取数据
|
|
|
|
|
nmDataAttribute tempAttr = m_regionMarkData->getReservoirType();
|
|
|
|
|
|
|
|
|
|
if(newResevoirType == 0) {
|
|
|
|
|
tempAttr.setValue(tr("Homogeneous"));
|
|
|
|
|
} else {
|
|
|
|
|
tempAttr.setValue(tr("Dual porosity pseudo steady state"));
|
|
|
|
|
if (m_reservoirType != newResevoirType) {
|
|
|
|
|
m_reservoirType = newResevoirType;
|
|
|
|
|
emit sigResevoirTypeChanged(newResevoirType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_regionMarkData->setReservoirType(tempAttr);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int nmObjRegionMark::getResevoirType()
|
|
|
|
|
{
|
|
|
|
|
if(m_regionMarkData->getReservoirType().getValue() == tr("Homogeneous"))
|
|
|
|
|
return 0;
|
|
|
|
|
else
|
|
|
|
|
return 1;
|
|
|
|
|
return m_reservoirType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::setComKr(double newComkr)
|
|
|
|
|
{
|
|
|
|
|
// 从Data中取数据
|
|
|
|
|
nmDataAttribute tempAttr = m_regionMarkData->getComKr();
|
|
|
|
|
tempAttr.setValue(newComkr);
|
|
|
|
|
m_regionMarkData->setComKr(tempAttr);
|
|
|
|
|
if (m_comKr != newComkr) {
|
|
|
|
|
m_comKr = newComkr;
|
|
|
|
|
emit sigComKrChanged(newComkr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjRegionMark::getComKr()
|
|
|
|
|
{
|
|
|
|
|
return m_regionMarkData->getComKr().getValue().toDouble();
|
|
|
|
|
return m_comKr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::setComW(double newComW)
|
|
|
|
|
{
|
|
|
|
|
// 从Data中取数据
|
|
|
|
|
nmDataAttribute tempAttr = m_regionMarkData->getComW();
|
|
|
|
|
tempAttr.setValue(newComW);
|
|
|
|
|
m_regionMarkData->setComW(tempAttr);
|
|
|
|
|
if (m_comW != newComW) {
|
|
|
|
|
m_comW = newComW;
|
|
|
|
|
emit sigComWChanged(newComW);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjRegionMark::getComW()
|
|
|
|
|
{
|
|
|
|
|
return m_regionMarkData->getComW().getValue().toDouble();
|
|
|
|
|
return m_comW;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::setNetToGross(double newNetToGross)
|
|
|
|
|
{
|
|
|
|
|
// 从Data中取数据
|
|
|
|
|
nmDataAttribute tempAttr = m_regionMarkData->getNetToGross();
|
|
|
|
|
tempAttr.setValue(newNetToGross);
|
|
|
|
|
m_regionMarkData->setNetToGross(tempAttr);
|
|
|
|
|
if (m_netToGross != newNetToGross) {
|
|
|
|
|
m_netToGross = newNetToGross;
|
|
|
|
|
emit sigNetToGrossChanged(newNetToGross);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjRegionMark::getNetToGross()
|
|
|
|
|
{
|
|
|
|
|
return m_regionMarkData->getNetToGross().getValue().toDouble();
|
|
|
|
|
return m_netToGross;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::onSerialize(ZxSerializer* ser)
|
|
|
|
|
{
|
|
|
|
|
nmObjBase::onSerialize(ser);
|
|
|
|
|
int resevoirType;
|
|
|
|
|
|
|
|
|
|
if(m_regionMarkData->getReservoirType().getValue() == tr("Homogeneous"))
|
|
|
|
|
resevoirType = 0;
|
|
|
|
|
else
|
|
|
|
|
resevoirType = 1;
|
|
|
|
|
|
|
|
|
|
ser->write("ResevoirType", resevoirType);
|
|
|
|
|
ser->write("dComKr", m_regionMarkData->getComKr().getValue().toDouble());
|
|
|
|
|
ser->write("dComW", m_regionMarkData->getComW().getValue().toDouble());
|
|
|
|
|
ser->write("NetToGross", m_regionMarkData->getNetToGross().getValue().toDouble());
|
|
|
|
|
ser->write("ResevoirType", m_reservoirType);
|
|
|
|
|
ser->write("dComKr", m_comKr);
|
|
|
|
|
ser->write("dComW", m_comW);
|
|
|
|
|
ser->write("NetToGross", m_netToGross);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::onDeserialize(ZxSerializer* ser)
|
|
|
|
|
@ -177,26 +168,20 @@ void nmObjRegionMark::onDeserialize(ZxSerializer* ser)
|
|
|
|
|
ser->read("dComW", comW);
|
|
|
|
|
ser->read("NetToGross", netToGross);
|
|
|
|
|
|
|
|
|
|
this->setResevoirType(resevoirType);
|
|
|
|
|
this->setComKr(comKr);
|
|
|
|
|
this->setComW(comW);
|
|
|
|
|
this->setNetToGross(netToGross);
|
|
|
|
|
m_reservoirType = resevoirType;
|
|
|
|
|
m_comKr = comKr;
|
|
|
|
|
m_comW = comW;
|
|
|
|
|
m_netToGross = netToGross;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::onSaveTempl(ZxSerializer* ser)
|
|
|
|
|
{
|
|
|
|
|
nmObjBase::onSaveTempl(ser);
|
|
|
|
|
int resevoirType;
|
|
|
|
|
|
|
|
|
|
if(m_regionMarkData->getReservoirType().getValue() == tr("Homogeneous"))
|
|
|
|
|
resevoirType = 0;
|
|
|
|
|
else
|
|
|
|
|
resevoirType = 1;
|
|
|
|
|
|
|
|
|
|
ser->write("ResevoirType", resevoirType);
|
|
|
|
|
ser->write("dComKr", m_regionMarkData->getComKr().getValue().toDouble());
|
|
|
|
|
ser->write("dComW", m_regionMarkData->getComW().getValue().toDouble());
|
|
|
|
|
ser->write("NetToGross", m_regionMarkData->getNetToGross().getValue().toDouble());
|
|
|
|
|
ser->write("ResevoirType", m_reservoirType);
|
|
|
|
|
ser->write("dComKr", m_comKr);
|
|
|
|
|
ser->write("dComW", m_comW);
|
|
|
|
|
ser->write("NetToGross", m_netToGross);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::onLoadTempl(ZxSerializer* ser)
|
|
|
|
|
@ -211,10 +196,10 @@ void nmObjRegionMark::onLoadTempl(ZxSerializer* ser)
|
|
|
|
|
ser->read("dComW", comW);
|
|
|
|
|
ser->read("NetToGross", netToGross);
|
|
|
|
|
|
|
|
|
|
this->setResevoirType(resevoirType);
|
|
|
|
|
this->setComKr(comKr);
|
|
|
|
|
this->setComW(comW);
|
|
|
|
|
this->setNetToGross(netToGross);
|
|
|
|
|
m_reservoirType = resevoirType;
|
|
|
|
|
m_comKr = comKr;
|
|
|
|
|
m_comW = comW;
|
|
|
|
|
m_netToGross = netToGross;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::fillPtyPano(IxPtyPano* sheet)
|
|
|
|
|
@ -264,7 +249,7 @@ bool nmObjRegionMark::_runHitTest(const QPointF& pt, int& nOption, int& nSubInde
|
|
|
|
|
|
|
|
|
|
QVector<QPointF> pts = getPosOf(m_vecPoints);
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD>
|
|
|
|
|
// 点
|
|
|
|
|
double r = 3.f;
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < pts.count(); i++) {
|
|
|
|
|
@ -325,13 +310,6 @@ void nmObjRegionMark::paintBack(QPainter* painter, const ZxPaintParam& param)
|
|
|
|
|
QPointF ptPos = getPosOf(m_vecPoints[0]);
|
|
|
|
|
painter->save();
|
|
|
|
|
|
|
|
|
|
if(m_regionMarkData != nullptr) {
|
|
|
|
|
m_regionMarkData->setRegionMarkName(m_sName);
|
|
|
|
|
m_regionMarkData->setPtPos(m_vecPoints[0]);
|
|
|
|
|
m_regionMarkData->setBackgroundColor(m_clrBackgrd);
|
|
|
|
|
m_regionMarkData->setSelectRegion(m_bSelectRegion);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ZxPlot* m_pCurPlot = dynamic_cast<ZxPlot*>(this->getParent());
|
|
|
|
|
if (m_pCurPlot == nullptr) {
|
|
|
|
|
painter->restore();
|
|
|
|
|
@ -356,12 +334,13 @@ void nmObjRegionMark::paintBack(QPainter* painter, const ZxPaintParam& param)
|
|
|
|
|
// 判断 RegionMark 是否在该区域内
|
|
|
|
|
if(regionPolygon.containsPoint(ptPos, Qt::OddEvenFill)) {
|
|
|
|
|
// 判断该区域是否已经被标记
|
|
|
|
|
if(region->getRegionMark() == nullptr && m_regionMarkData != nullptr) {
|
|
|
|
|
region->setRegionMark(this);
|
|
|
|
|
region->setBackgrdColor(this->m_clrBackgrd);
|
|
|
|
|
this->setSelectRegion(true);
|
|
|
|
|
// update Data
|
|
|
|
|
m_regionMarkData->setSelectRegion(m_bSelectRegion);
|
|
|
|
|
if(region->getRegionMark() == nullptr) {
|
|
|
|
|
// 仅在 Binder 已绑定时才关联(避免加载数据前 paintBack 误设)
|
|
|
|
|
if (m_pGraphicBinder) {
|
|
|
|
|
region->setRegionMark(this);
|
|
|
|
|
region->setBackgrdColor(this->m_clrBackgrd);
|
|
|
|
|
this->setSelectRegion(true);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 如果区域已被标记
|
|
|
|
|
int index = region->getRegionMark()->getColorIndex();
|
|
|
|
|
@ -371,37 +350,17 @@ void nmObjRegionMark::paintBack(QPainter* painter, const ZxPaintParam& param)
|
|
|
|
|
region->setRegionMark(this);
|
|
|
|
|
region->setBackgrdColor(this->m_clrBackgrd);
|
|
|
|
|
this->setSelectRegion(true);
|
|
|
|
|
// updata Data
|
|
|
|
|
m_regionMarkData->setSelectRegion(m_bSelectRegion);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置字体
|
|
|
|
|
//double r = 8.f;
|
|
|
|
|
|
|
|
|
|
//QPointF ptTopLeft = QPointF(ptPos.x() - r,
|
|
|
|
|
// ptPos.y() - r);
|
|
|
|
|
//QSizeF sz = QSizeF(r * 2.f, r * 2.f);
|
|
|
|
|
|
|
|
|
|
//QRectF bound = QRectF(ptTopLeft, sz);
|
|
|
|
|
|
|
|
|
|
//QFont ft = qApp->font();
|
|
|
|
|
//ft.setPointSize(8);
|
|
|
|
|
//painter->setFont(ft);
|
|
|
|
|
//painter->setPen(Qt::black);
|
|
|
|
|
//ZxDrawHelper::drawText(painter,
|
|
|
|
|
// bound,
|
|
|
|
|
// Qt::AlignCenter | Qt::AlignVCenter,
|
|
|
|
|
// m_sName);
|
|
|
|
|
|
|
|
|
|
////painter->setPen(QPen(Qt::black, 1.2f));
|
|
|
|
|
////ZxDrawHelper::drawPlus(painter,ptPos,2.2f,false,Qt::black);
|
|
|
|
|
|
|
|
|
|
// 通过 Binder 同步名称、位置、颜色、选中状态到数据(paintBack 兜底同步)
|
|
|
|
|
if (m_pGraphicBinder) {
|
|
|
|
|
m_pGraphicBinder->syncRegionMarkData(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//painter->restore();
|
|
|
|
|
// 设置字体
|
|
|
|
|
QFont ft = qApp->font();
|
|
|
|
|
ft.setPointSize(8);
|
|
|
|
|
@ -418,7 +377,6 @@ void nmObjRegionMark::paintBack(QPainter* painter, const ZxPaintParam& param)
|
|
|
|
|
painter->drawPixmap(iconRect, m_icon, m_icon.rect());
|
|
|
|
|
|
|
|
|
|
// 计算文本的矩形区域,位于图标上方
|
|
|
|
|
// 文本的y坐标是图标顶部减去间距和文本高度(这里使用iconSize作为文本高度)
|
|
|
|
|
QRectF textRect(
|
|
|
|
|
ptPos.x() - textWidth / 2, // 文本水平居中于图标
|
|
|
|
|
ptPos.y() - iconSize / 2 - spacing - iconSize, // 在图标上方
|
|
|
|
|
@ -466,30 +424,28 @@ void nmObjRegionMark::setBackgrdColor(QColor color)
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::afterCreated()
|
|
|
|
|
{
|
|
|
|
|
m_regionMarkData = nmDataAnalyzeManager::getCurrentInstance()->createRegionMark();
|
|
|
|
|
m_regionMarkData->setRegionMarkName(m_sName);
|
|
|
|
|
m_regionMarkData->setPtPos(m_vecPoints[0]);
|
|
|
|
|
m_regionMarkData->setSelectRegion(m_bSelectRegion);
|
|
|
|
|
m_regionMarkData->setBackgroundColor(m_clrBackgrd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nmDataRegionMark* nmObjRegionMark::getRegionMarkData() const
|
|
|
|
|
{
|
|
|
|
|
return m_regionMarkData;
|
|
|
|
|
if (m_pGraphicBinder) {
|
|
|
|
|
m_pGraphicBinder->createRegionMarkForGraphic(this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::removeData()
|
|
|
|
|
{
|
|
|
|
|
if(m_regionMarkData) {
|
|
|
|
|
// 从数据中心移除该数据
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->removeRegionMarkData(m_regionMarkData);
|
|
|
|
|
m_regionMarkData = nullptr;
|
|
|
|
|
if (m_pGraphicBinder) {
|
|
|
|
|
m_pGraphicBinder->removeRegionMarkBinding(this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjRegionMark::onObjVisibleChanged(bool bIsVisible)
|
|
|
|
|
{
|
|
|
|
|
if(m_regionMarkData != nullptr) {
|
|
|
|
|
m_regionMarkData->setPlotVisible(bIsVisible);
|
|
|
|
|
emit sigRegionMarkVisibleChanged(bIsVisible);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 通过 Binder 查询关联的数据对象(供 nmObjRegion 使用)
|
|
|
|
|
nmDataRegionMark* nmObjRegionMark::getRegionMarkData() const
|
|
|
|
|
{
|
|
|
|
|
if (m_pGraphicBinder) {
|
|
|
|
|
return m_pGraphicBinder->getRegionMarkDataFor(const_cast<nmObjRegionMark*>(this));
|
|
|
|
|
}
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|