/** * Draws the grid. * * @see drawIt() */ void RS_GraphicView::drawGrid(RS_Painter *painter) { if (grid==NULL || isGridOn()==false) { return; } // draw grid: //painter->setPen(Qt::gray); painter->setPen(gridColor); // grid->updatePointArray(); RS_Vector* pts = grid->getPoints(); if (pts!=NULL) { for (int i=0; i<grid->count(); ++i) { painter->drawGridPoint(toGui(pts[i])); } } // draw grid info: //painter->setPen(Qt::white); QString info = grid->getInfo(); //info = QString("%1 / %2") // .arg(grid->getSpacing()) // .arg(grid->getMetaSpacing()); updateGridStatusWidget(info); }
/** * Draws the grid. * * @see drawIt() */ void RS_GraphicView::drawGrid(RS_Painter *painter) { if (!(grid && isGridOn())) return; // draw grid: //painter->setPen(Qt::gray); painter->setPen(gridColor); //grid->updatePointArray(); auto const& pts = grid->getPoints(); for(auto const& v: pts){ painter->drawGridPoint(toGui(v)); } // draw grid info: //painter->setPen(Qt::white); QString info = grid->getInfo(); //info = QString("%1 / %2") // .arg(grid->getSpacing()) // .arg(grid->getMetaSpacing()); updateGridStatusWidget(info); }
/** * Draws the meta grid. * * @see drawIt() */ void RS_GraphicView::drawMetaGrid(RS_Painter *painter) { if (!(grid && isGridOn()) /*|| grid->getMetaSpacing()<0.0*/) { return; } //draw grid after metaGrid to avoid overwriting grid points by metaGrid lines //bug# 3430258 grid->updatePointArray(); RS_Pen pen(metaGridColor, RS2::Width00, RS2::DotLine); painter->setPen(pen); RS_Vector dv=grid->getMetaGridWidth().scale(factor); double dx=fabs(dv.x); double dy=fabs(dv.y); //potential bug, need to recover metaGrid.width // draw meta grid: auto mx = grid->getMetaX(); for(auto const& x: mx){ painter->drawLine(RS_Vector(toGuiX(x), 0), RS_Vector(toGuiX(x), getHeight())); if(grid->isIsometric()){ painter->drawLine(RS_Vector(toGuiX(x)+0.5*dx, 0), RS_Vector(toGuiX(x)+0.5*dx, getHeight())); } } auto my = grid->getMetaY(); if(grid->isIsometric()){//isometric metaGrid dx=fabs(dx); dy=fabs(dy); if(!my.size()|| dx<1||dy<1) return; RS_Vector baseMeta(toGui(RS_Vector(mx[0],my[0]))); // x-x0=k*dx, x-remainder(x-x0,dx) RS_Vector vp0(-remainder(-baseMeta.x,dx)-dx,getHeight()-remainder(getHeight()-baseMeta.y,dy)+dy); RS_Vector vp1(vp0); RS_Vector vp2(getWidth()-remainder(getWidth()-baseMeta.x,dx)+dx,vp0.y); RS_Vector vp3(vp2); int cmx = round((vp2.x - vp0.x)/dx); int cmy = round((vp0.y +remainder(-baseMeta.y,dy)+dy)/dy); for(int i=cmx+cmy+2;i>=0;i--){ if ( i <= cmx ) { vp0.x += dx; vp2.y -= dy; }else{ vp0.y -= dy; vp2.x -= dx; } if ( i <= cmy ) { vp1.y -= dy; vp3.x -= dx; }else{ vp1.x += dx; vp3.y -= dy; } painter->drawLine(vp0,vp1); painter->drawLine(vp2,vp3); } }else{//orthogonal for(auto const& y: my){ painter->drawLine(RS_Vector(0, toGuiY(y)), RS_Vector(getWidth(), toGuiY(y))); } } }
void GridFitting::paint(QPainter * painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Axis t(0, ylabel->getNpoints(), 0, xlabel->getNpoints()); axis = t; if (!cw) { cw = widget->rect().width(); } if (!ch) { ch = widget->rect().height(); } painter->setFont(*textFont); painter->fillRect(widget->rect(), background); double w1 = 0, h1 = 0; offset = 30; w1 = offset; if (widget->rect().width() != w) { if (w) { rW = (double) (cw / widget->rect().width()); } else { rW = 1; } } if (widget->rect().height() != h) { if (h) { rH = (double) (ch / widget->rect().height()); } else { rH = 1; } } w = widget->rect().width(); h = widget->rect().height(); h1 = h - offset; painter->drawLine(QLineF(QPointF(0, h1), QPointF(w, h1))); painter->drawLine(QLineF(QPointF(offset, 0), QPointF(offset, h))); w1 = w - offset; h1 = h - offset; int k = 1, k1 = 1; Xintervalsw = w1 / axis.x; double stepx =rW * sX*Xintervalsw; double ticksw = tX*stepx; for (double i = 0; i < w; i += Xintervalsw) { QLineF a; if (i >= k * (ticksw)) { a.setPoints(QPointF(offset + i, h1), QPointF(offset + i, h1 - offset / 5)); QRectF text; text.setX(offset + i - ticksw / 2); text.setY(h1); text.setWidth(ticksw); text.setHeight(20); QTextOption fmt(Qt::AlignTop | Qt::AlignCenter); double t = i / Xintervalsw; painter->drawText(text, QString::number(xlabel->getElement(t-1), 10, 2), fmt); k++; k1++; painter->drawLine(a); } else if (i >= k1 * stepx) { a.setPoints(QPointF(i + offset, h1), QPointF(i + offset, h1 - offset / 10)); painter->drawLine(a); k1++; } } k = 1; k1 = 1; Yintervalsh = h1 / axis.y; ZeroPoint = axis.Hy*Yintervalsh; double stepy = rH * sY*Yintervalsh; double ticksh = tY*stepy; for (double i = 0,j=0; i < h1; i += Yintervalsh,j++) { QLineF a; if (i >= (k * ticksh)) { a.setPoints(QPointF(offset, i), QPointF(offset + offset / 5, i)); QRectF text; text.setX(0); text.setY(i - ticksh / 2); text.setWidth(offset); QTextOption fmt(Qt::AlignHCenter | Qt::AlignCenter); text.setHeight(ticksh); QString str = QString::number(ylabel->getElement(i / Yintervalsh-1), 10, 2); painter->drawText(text, str, fmt); k++; k1++; painter->drawLine(a); } else if (i >= k1 * stepy) { a.setPoints(QPointF(offset, i), QPointF(offset + offset / 10, i)); painter->drawLine(a); k1++; } } if (isGridOn()) { painter->setPen(gridpen); k = 1; for (float i = 0; i < axis.y; i++) { QLineF a; if (i >= k * sY * tY) { a.setPoints(QPointF(offset, i * Yintervalsh), QPointF(w, i * Yintervalsh)); painter->drawLine(a); k++; } } k = 1; for (double i = 0; i < w; i += Xintervalsw) { QLineF a; if (i >= k * ticksw) { a.setPoints(QPointF(offset + i, 0), QPointF(offset + i, h1)); painter->drawLine(a); k++; } } } }