final double minY, final double maxY, final int subGridDots, final double subGridWidth,
final double tlx, final double tly, final double brx, final double bry, final Color subGridColour) {
final double dotStep = unit*IShape.PPC/(subGridDots*subGridDiv);
final double nbX = (maxX-minX)*subGridDiv;
final double nbY = (maxY-minY)*subGridDiv;
final SVGElement subgridDots = new SVGGElement(document);
SVGElement dot;
subgridDots.setAttribute(SVGAttributes.SVG_FILL, CSSColors.INSTANCE.getColorName(subGridColour, true));
subgridDots.setAttribute(prefix+LNamespace.XML_TYPE, LNamespace.XML_TYPE_GRID_SUB);
subgridDots.setAttribute(prefix+LNamespace.XML_GRID_DOTS, String.valueOf(subGridDots));
subgridDots.setAttribute(prefix+LNamespace.XML_GRID_SUB_DIV, String.valueOf(subGridDots));
subgridDots.setAttribute(prefix+LNamespace.XML_GRID_WIDTH, String.valueOf(subGridWidth));
for(double i=0, n=tlx; i<nbX; i++, n+=xSubStep)
for(double j=0, m=tly; j<=nbY; j++, m+=ySubStep)
for(double k=0; k<subGridDots; k++) {
dot = new SVGCircleElement(document);
dot.setAttribute(SVGAttributes.SVG_CX, String.valueOf(n+k*dotStep));
dot.setAttribute(SVGAttributes.SVG_CY, String.valueOf(m));
dot.setAttribute(SVGAttributes.SVG_R, String.valueOf(subGridWidth/2.));
subgridDots.appendChild(dot);
}
for(double j=0, n=tly; j<nbY; j++, n+=ySubStep)
for(double i=0, m=tlx; i<=nbX; i++, m+=xSubStep)
for(double k=0; k<subGridDots; k++) {
dot = new SVGCircleElement(document);
dot.setAttribute(SVGAttributes.SVG_CX, String.valueOf(m));
dot.setAttribute(SVGAttributes.SVG_CY, String.valueOf(n+k*dotStep));
dot.setAttribute(SVGAttributes.SVG_R, String.valueOf(subGridWidth/2.));
subgridDots.appendChild(dot);
}
dot = new SVGCircleElement(document);
dot.setAttribute(SVGAttributes.SVG_CX, String.valueOf(brx));
dot.setAttribute(SVGAttributes.SVG_CY, String.valueOf(bry));
dot.setAttribute(SVGAttributes.SVG_R, String.valueOf(subGridWidth/2.));
elt.appendChild(subgridDots);
}