code: protected Drawer<? super T> draw(ZoomableGraphicsContext gc, GISElementContainer<T> primitive, Drawer<? super T> drawer) {
  		Drawer<? super T> drw = drawer;
  		final Iterator<T> iterator = primitive.iterator(gc.getVisibleArea());
  		while (iterator.hasNext()) {
  			final T mapelement = iterator.next();
  			if (drw == null) {
  				drw = Drawers.getDrawerFor(mapelement.getClass());
  				if (drw != null) {
  					gc.save();
  					drw.draw(gc, mapelement);
  					gc.restore();
  				}
  			} else {
  				gc.save();
  				drw.draw(gc, mapelement);
  				gc.restore();
  			}
  		}
  		return drw;
  	}
docs: Draw the primitive with the given drawer.
  
  @param gc the graphics context to draw with.
  @param primitive the primitive to draw.
  @param drawer the drawer, or {@code null} to use the default.
  @return the drawer to use.