#include #include #include "IxPtyPano.h" #include "ZxBaseUtil.h" #include "ZxSubAxisX.h" #include "ZxSubAxisY.h" #include "nmObjLineCrackTool.h" #include "ZxPlot.h" #include "ZxObjText.h" #include "nmObjLineCrack.h" ZX_DEFINE_DYNAMIC(nObjLineCrack, nmObjLineCrack) nmObjLineCrack::nmObjLineCrack() { nmObjLineCrack("", NULL, NULL); } nmObjLineCrack::nmObjLineCrack(const QString& sName, \ ZxSubAxisX* pAxisX, \ ZxSubAxisY* pAxisY) : nmObjLine(sName, pAxisX, pAxisY) { // 裂缝名称 m_sCrackName = "crack"; // 裂缝流动类型 m_eCrackFlowModel = NM_OIL_RESERVOIR_CRACK_FLOW_MODEL::OIL_Reservoir_Crack_Flow_Infinite_Conductivity; // 裂缝宽度 m_dCrackThickness = 1.0; // 裂缝传导率 m_dCrackConductivity = 5000.0; m_sObjTag = "nObjLineCrack"; initFlags(); m_oDot = ZxDot(DTS_Circle, QColor(0, 255, 0), 0.5f, true); m_oPen = QPen(QBrush(QColor(0, 255, 164)), \ 0.5f, Qt::SolidLine); m_vecPoints.clear(); m_vecPoints << QPointF(0.f, 0.f) << QPointF(0.f, 0.f); loadTempl(); } nmObjLineCrack::~nmObjLineCrack() { } void nmObjLineCrack::initTools() { ZxObjBase::initTools(); m_pTool = new nmObjLineCrackTool(); } void nmObjLineCrack::initSubObjs() { nmObjPoint::initSubObjs(); setPointTag(tr("LineCrack")); } void nmObjLineCrack::paintBack(QPainter* painter, const ZxPaintParam& param) { Q_ASSERT (m_vecPoints.count() >= 2); QPointF pt1 = getPosOf(m_vecPoints[0]); QPointF pt2 = getPosOf(m_vecPoints[1]); QLineF oLine = QLineF(pt1, pt2); if (!this->drawLine(painter, oLine)) { return; } drawSelStates(painter, oLine); QPointF pt = oLine.pointAt(0.5f); drawWellPos(painter, pt); } bool nmObjLineCrack::drawSelStates(QPainter* painter, QLineF& oLine) { if (!isSelected()) { return true; } Q_ASSERT (NULL != m_pAxisX); Q_ASSERT (NULL != m_pAxisY); if (m_pAxisX->getRangeMin() == m_pAxisX->getRangeMax() || \ m_pAxisY->getRangeMin() == m_pAxisY->getRangeMax()) { return false; } painter->save(); QRectF rt = getOuterRect(); painter->setClipRect(rt); QPointF pt1 = oLine.p1(); QPointF pt2 = oLine.p2(); QVector pts; pts << pt1 << pt2; for (int i = 0; i < pts.count(); i++) { float w = 1.2f; QPointF pt = pts[i]; QRectF rect(pt.x() - w * 0.5f, pt.y() - w * 0.5f, w, w); if (m_nHitIndex == i && m_oHitOption == OHO_Point) { QBrush br(Qt::red); painter->fillRect(rect, br); } else { painter->setPen(QColor(0, 0, 128)); painter->drawRect(rect); } } painter->restore(); return true; } QString nmObjLineCrack::getCrackName() { return m_sCrackName; } void nmObjLineCrack::setCrackName( QString newSCrackName) { m_sCrackName = newSCrackName; } int nmObjLineCrack::getCrackFlowModel() { return m_eCrackFlowModel; } void nmObjLineCrack::setCrackFlowModel(int newCrackFlowModel) { m_eCrackFlowModel = (NM_OIL_RESERVOIR_CRACK_FLOW_MODEL)newCrackFlowModel; } double nmObjLineCrack::getCrackThickness() { return m_dCrackThickness; } void nmObjLineCrack::setCrackThickness(double newCrackThickness) { m_dCrackThickness = newCrackThickness; } double nmObjLineCrack::getCrackConductivity() { return m_dCrackConductivity; } void nmObjLineCrack::setCrackConductivity(double newCrackConductivity) { m_dCrackConductivity = newCrackConductivity; } void nmObjLineCrack::onSerialize(ZxSerializer* ser) { nmObjLine::onSerialize(ser); ser->write("Name", m_sCrackName); int flowModel = (int)m_eCrackFlowModel; ser->write("FlowModel", flowModel); ser->write("Thickness", m_dCrackThickness); ser->write("Conductivity", m_dCrackConductivity); } void nmObjLineCrack::onDeserialize(ZxSerializer* ser) { nmObjLine::onDeserialize(ser); ser->read("Name", m_sCrackName); int flowModel = 0; ser->read("FlowModel", flowModel); m_eCrackFlowModel = (NM_OIL_RESERVOIR_CRACK_FLOW_MODEL)flowModel; ser->read("Thickness", m_dCrackThickness); ser->read("Conductivity", m_dCrackConductivity); } void nmObjLineCrack::onSaveTempl(ZxSerializer* ser) { nmObjLine::onSaveTempl(ser); ser->write("Name", m_sCrackName); int flowModel = (int)m_eCrackFlowModel; ser->write("FlowModel", flowModel); ser->write("Thickness", m_dCrackThickness); ser->write("Conductivity", m_dCrackConductivity); } void nmObjLineCrack::onLoadTempl(ZxSerializer* ser) { nmObjLine::onLoadTempl(ser); ser->read("Name", m_sCrackName); int flowModel = 0; ser->read("FlowModel", flowModel); m_eCrackFlowModel = (NM_OIL_RESERVOIR_CRACK_FLOW_MODEL)flowModel; ser->read("Thickness", m_dCrackThickness); ser->read("Conductivity", m_dCrackConductivity); } void nmObjLineCrack::fillPtyPano(IxPtyPano* sheet) { nmObjLine::fillPtyPano(sheet); ZX_PROP("ObjLineCrack.Name", getCrackName, setCrackName); IxPtyItem* pProp = ZX_PROP("ObjLineCrack.FlowModel", getCrackFlowModel, setCrackFlowModel); if (NULL != pProp) { QStringList listTags; listTags << tr("Infinite Conductivity") << tr("Finite Conductivity") << tr("Unknow"); QList listIndexes; listIndexes << 0 << 1 << 2; pProp->getPtyPano(); pProp->setOptions(listTags, listIndexes); } ZX_PROP("ObjLineCrack.Thickness", getCrackThickness, setCrackThickness); ZX_PROP("ObjLineCrack.Conductivity", getCrackConductivity, setCrackConductivity); }