#include #include #include "IxPtyPano.h" #include "ZxBaseUtil.h" #include "ZxSubAxisX.h" #include "ZxSubAxisY.h" #include "nmObjLineMeasureTool.h" #include "ZxPlot.h" #include "ZxObjText.h" #include "nmObjLineMeasure.h" #include "nmPlotGraphicBinder.h" ZX_DEFINE_DYNAMIC(nObjLineMeasure, nmObjLineMeasure) nmObjLineMeasure::nmObjLineMeasure() : nmObjLine("", NULL, NULL) { m_dLength = 0.0; m_pGraphicBinder = nullptr; m_sObjTag = "nObjLineMeasure"; nmObjPoint::initFlags(); m_oDot = ZxDot(DTS_Circle, QColor(255, 165, 0), 0.5f, true); m_oPen = QPen(QBrush(QColor(255, 165, 0)), 0.5f, Qt::SolidLine); m_vecPoints.clear(); m_vecPoints << QPointF(0.f, 0.f) << QPointF(0.f, 0.f); loadTempl(); } nmObjLineMeasure::nmObjLineMeasure(const QString& sName, \ ZxSubAxisX* pAxisX, \ ZxSubAxisY* pAxisY) : nmObjLine(sName, pAxisX, pAxisY) { m_dLength = 0.0; m_pGraphicBinder = nullptr; m_sObjTag = "nObjLineMeasure"; nmObjPoint::initFlags(); m_oDot = ZxDot(DTS_Circle, QColor(255, 165, 0), 0.5f, true); m_oPen = QPen(QBrush(QColor(255, 165, 0)), 0.5f, Qt::SolidLine); m_vecPoints.clear(); m_vecPoints << QPointF(0.f, 0.f) << QPointF(0.f, 0.f); loadTempl(); } nmObjLineMeasure::~nmObjLineMeasure() { } void nmObjLineMeasure::initTools() { m_pTool = new nmObjLineMeasureTool(); ZxObjBase::initTools(); } void nmObjLineMeasure::initSubObjs() { nmObjBase::initSubObjs(); } void nmObjLineMeasure::paintBack(QPainter* painter, const ZxPaintParam& param) { Q_ASSERT(m_vecPoints.count() >= 2); // 坐标同步:拟合功能修改数据后,在绘制时将新坐标推回图元 if (m_pGraphicBinder) { m_pGraphicBinder->syncMeasurePoints(this); } 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 nmObjLineMeasure::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; } void nmObjLineMeasure::afterCreated() { if (m_pGraphicBinder) { m_pGraphicBinder->createMeasureForGraphic(this); } this->setLockPos(true); this->setReadOnly(true); } void nmObjLineMeasure::removeData() { if (m_pGraphicBinder) { m_pGraphicBinder->removeMeasureBinding(this); } } void nmObjLineMeasure::onSerialize(ZxSerializer* ser) { nmObjLine::onSerialize(ser); ser->write("Length", m_dLength); } void nmObjLineMeasure::onDeserialize(ZxSerializer* ser) { nmObjLine::onDeserialize(ser); ser->read("Length", m_dLength); } void nmObjLineMeasure::onSaveTempl(ZxSerializer* ser) { nmObjLine::onSaveTempl(ser); ser->write("Length", m_dLength); } void nmObjLineMeasure::onLoadTempl(ZxSerializer* ser) { nmObjLine::onLoadTempl(ser); ser->read("Length", m_dLength); } void nmObjLineMeasure::fillPtyPano(IxPtyPano* sheet) { nmObjLine::fillPtyPano(sheet); }