void ROrthoGrid::paintGridLines(const RVector& space, const RBox& box, bool meta) { if (!space.isValid()) { return; } // updates cache if necessary: getProjection(); isIsometric(); RVector min = box.getCorner1(); RVector max = box.getCorner2(); double deltaX = max.x - min.x; double deltaY = max.y - min.y; if (deltaX / space.x > 1e3 || deltaY / space.y > 1e3) { return; } double dx = deltaY / tan(M_PI/6); if (isometric) { min.x -= dx; max.x += dx; } int c; double x; for (x=min.x, c=0; x<max.x; x+=space.x, c++) { //int x2 = RMath::mround(x/space.x); //if (!isometric || c%2==0) { if (isometric) { if (projection==RS::IsoTop || projection==RS::IsoRight) { view.paintGridLine(RLine(RVector(x, min.y), RVector(x+dx, max.y))); } if (projection==RS::IsoTop || projection==RS::IsoLeft) { view.paintGridLine(RLine(RVector(x, min.y), RVector(x-dx, max.y))); } // vertical grid lines: if (projection==RS::IsoRight || projection==RS::IsoLeft) { view.paintGridLine(RLine(RVector(x, min.y), RVector(x, max.y))); view.paintGridLine(RLine(RVector(x-space.x/2, min.y), RVector(x-space.x/2, max.y))); } } else { view.paintGridLine(RLine(RVector(x, min.y), RVector(x, max.y))); } //} } // horizontal lines: if (!isometric) { for (double y=min.y; y<max.y; y+=space.y) { view.paintGridLine(RLine(RVector(min.x, y), RVector(max.x, y))); } } }
void ROrthoGrid::paintGridPoints(const RVector& space, const RBox& box) { if (!space.isValid()) { return; } RVector min = box.getCorner1(); RVector max = box.getCorner2(); if ((max.x - min.x) / space.x > 1e3 || (max.y - min.y) / space.y > 1e3) { return; } RVector gridPointUcs; int x, y; for (gridPointUcs.x = min.x; gridPointUcs.x < max.x; gridPointUcs.x += space.x) { x = RMath::mround(gridPointUcs.x/space.x); for (gridPointUcs.y = min.y; gridPointUcs.y < max.y; gridPointUcs.y += space.y) { y = RMath::mround(gridPointUcs.y/space.y); if (!isometric || (x+y)%2==0) { view.paintGridPoint(gridPointUcs); } } } }