void Plot::drawBreak(QPainter *painter, const QRect &rect, const QwtScaleMap &map, int axis) const { const ScaleEngine *sc_engine = (const ScaleEngine *)axisScaleEngine(axis); /*const QwtScaleEngine *qwtsc_engine=axisScaleEngine(axis); const ScaleEngine *sc_engine =dynamic_cast<const ScaleEngine*>(qwtsc_engine); if(sc_engine!=NULL) {*/ if (!sc_engine->hasBreak() || !sc_engine->hasBreakDecoration()) return; painter->save(); QColor color = axisWidget(axis)->palette().color(QPalette::Active, QColorGroup::Foreground); painter->setPen(QPen(color, axesLinewidth(), Qt::SolidLine)); int left = map.transform(sc_engine->axisBreakLeft()); int right = map.transform(sc_engine->axisBreakRight()); int x, y; int len = majTickLength; switch (axis){ case QwtPlot::yLeft: x = rect.left() - 1; QwtPainter::drawLine(painter, x, left, x + len, left - len); QwtPainter::drawLine(painter, x, right, x + len, right - len); break; case QwtPlot::yRight: x = rect.right() + 1; QwtPainter::drawLine(painter, x - len, left + len, x, left); QwtPainter::drawLine(painter, x - len, right + len, x, right); break; case QwtPlot::xBottom: y = rect.bottom() + 1; QwtPainter::drawLine(painter, left, y, left + len, y - len); QwtPainter::drawLine(painter, right, y, right + len, y - len); break; case QwtPlot::xTop: y = rect.top() - 1; QwtPainter::drawLine(painter, left - len, y + len, left, y); QwtPainter::drawLine(painter, right - len, y + len, right, y); break; } painter->restore(); //} }
void Plot::drawInwardTicks(QPainter *painter, const QRect &rect, const QwtScaleMap &map, int axis, bool min, bool maj) const { int x1=rect.left(); int x2=rect.right(); int y1=rect.top(); int y2=rect.bottom(); QPalette pal=axisWidget(axis)->palette(); QColor color=pal.color(QPalette::Active, QColorGroup::Foreground); painter->save(); painter->setPen(QPen(color, axesLinewidth(), QPainter::SolidLine)); QwtScaleDiv *scDiv=(QwtScaleDiv *)axisScaleDiv(axis); const QwtValueList minTickList = scDiv->ticks(QwtScaleDiv::MinorTick); int minTicks = (int)minTickList.count(); const QwtValueList medTickList = scDiv->ticks(QwtScaleDiv::MediumTick); int medTicks = (int)medTickList.count(); const QwtValueList majTickList = scDiv->ticks(QwtScaleDiv::MajorTick); int majTicks = (int)majTickList.count(); int j, x, y, low,high; switch (axis) { case QwtPlot::yLeft: x=x1; low=y1+majTickLength; high=y2-majTickLength; if (min) { for (j = 0; j < minTicks; j++) { y = map.transform(minTickList[j]); if (y>low && y< high) QwtPainter::drawLine(painter, x, y, x+minTickLength, y); } for (j = 0; j < medTicks; j++) { y = map.transform(medTickList[j]); if (y>low && y< high) QwtPainter::drawLine(painter, x, y, x+minTickLength, y); } } if (maj) { for (j = 0; j < majTicks; j++) { y = map.transform(majTickList[j]); if (y>low && y< high) QwtPainter::drawLine(painter, x, y, x+majTickLength, y); } } break; case QwtPlot::yRight: { x=x2; low=y1+majTickLength; high=y2-majTickLength; if (min) { for (j = 0; j < minTicks; j++) { y = map.transform(minTickList[j]); if (y>low && y< high) QwtPainter::drawLine(painter, x+1, y, x-minTickLength, y); } for (j = 0; j < medTicks; j++) { y = map.transform(medTickList[j]); if (y>low && y< high) QwtPainter::drawLine(painter, x+1, y, x-minTickLength, y); } } if (maj) { for (j = 0; j <majTicks; j++) { y = map.transform(majTickList[j]); if (y>low && y< high) QwtPainter::drawLine(painter, x+1, y, x-majTickLength, y); } } } break; case QwtPlot::xBottom: y=y2; low=x1+majTickLength; high=x2-majTickLength; if (min) { for (j = 0; j < minTicks; j++) { x = map.transform(minTickList[j]); if (x>low && x<high) QwtPainter::drawLine(painter, x, y+1, x, y-minTickLength); } for (j = 0; j < medTicks; j++) { x = map.transform(medTickList[j]); if (x>low && x<high) QwtPainter::drawLine(painter, x, y+1, x, y-minTickLength); } } if (maj) { for (j = 0; j < majTicks; j++) { x = map.transform(majTickList[j]); if (x>low && x<high) QwtPainter::drawLine(painter, x, y+1, x, y-majTickLength); } } break; case QwtPlot::xTop: y=y1; low=x1+majTickLength; high=x2-majTickLength; if (min) { for (j = 0; j < minTicks; j++) { x = map.transform(minTickList[j]); if (x>low && x<high) QwtPainter::drawLine(painter, x, y, x, y + minTickLength); } for (j = 0; j < medTicks; j++) { x = map.transform(medTickList[j]); if (x>low && x<high) QwtPainter::drawLine(painter, x, y, x, y + minTickLength); } } if (maj) { for (j = 0; j <majTicks; j++) { x = map.transform(majTickList[j]); if (x>low && x<high) QwtPainter::drawLine(painter, x, y, x, y + majTickLength); } } break; } painter->restore(); }