vardef grid(expr p, grid_unit) =
save llx, lly, urx, ury;
(llx, lly) = llcorner p - (bboxmargin, bboxmargin);
(urx, ury) = urcorner p + (bboxmargin, bboxmargin);
image(
for x = 1 + floor(llx / grid_unit) upto floor(urx / grid_unit):
draw (x * grid_unit, lly) -- (x * grid_unit, ury);
endfor
for y = 1 + floor(lly / grid_unit) upto floor(ury / grid_unit):
draw (llx, y * grid_unit) -- (urx, y * grid_unit);
endfor
if (llx < 0) and (lly < 0) and (urx > 0) and (ury > 0):
draw fullcircle scaled 3; % show origin if in range
fi
)
enddef;