[Drawkit] span vs. span unit

Graham Cox graham.cox at bigpond.com
Sun Mar 29 16:46:17 PDT 2009


On 29/03/2009, at 5:32 AM, Michael Caron wrote:

> Hi Graham,
>
> In DKGridLayer.m, the use of the term "span" seems confusing to me.
>
> First, the conversionFactor argument says "distance in points  
> represented by a single span unit", and then there's a "span"  
> argument that says "the span distance in grid coordinates".
>
> Is a "span unit" like a pixel (given that you've marked 72 as the  
> english conversion factor, and 72 pixels/inch is a standard  
> resolution) or is a "span unit" one tick on the grid ruler?
>
> I don't really understand "the span distance in grid coordinates".  
> What does that mean? Does that mean the distance between ruler ticks  
> on the grid in ticks?
>

Hi Michael,

I agree it's a bit confusing. Partly it stems from the evolution of  
the DKGridLayer - maybe some comments need to be revised.

I'll try and explain as best I can. The important point is that the  
underlying coordinate system used by Quartz is fixed such that 1pt =  
1/72nd of an inch. So everything else ultimately has to end up  
expressing itself in these terms so we can draw the grid and rulers  
using Quartz.

The grid 'span' is the basis for where it lays down the various grid  
lines. The span is broken down into finer 'divisions', the smallest  
drawn grid square, and also multiplied up to a certain number of  
'majors' which are the bolder lines drawn every so often.

The conversion factor sets up the scaling between a single span and  
the underlying quartz coordinates, so for example if you want a span  
of 1 inch, the conversion factor is 72.0, meaning each span line is  
drawn every 72 points, or 1 inch apart. A span of 1 centimetre has a  
conversion factor of 28.346 because 1cm = 28.346 points (you can  
arrive at this figure by dividing 72 by 2.54, the number of  
centimetres in 1 inch). So each span line is drawn 1cm apart.

The confusion probably comes in because there is also the 'span'  
parameter in:

- (void)					setDistanceForUnitSpan:(float) conversionFactor
							drawingUnits:(NSString*) units
							span:(float) span
							divisions:(unsigned) divs
							majors:(unsigned) majors
							rulerSteps:(unsigned) steps;

This parameter is a multiplier - for the situation outlined above, the  
multiplier is 1.0, meaning that the span lines are drawn for every  
span. If the multiplier was 2.0, the spans would be drawn every 2  
spans, and so on. The use of a multiplier allows you to pass in the  
same conversion factor for the underlying coordinate system and  
calculate the interval for you. It also permits non-integer  
multipliers if you wanted. However, I anticipate that almost all of  
the time you'd simply pass 1 here. The multiplier is handy if you  
wanted to work at very small or very large scales, such as microns or  
huge values used in mapping to ensure a sensible density of grid lines  
at those scales, but for typical ordinary uses, there's not much  
reason to use it.

The rulers are also affected. Because of the way NSRulerViews work, we  
need to supply a name and various factors ahead of time so that the  
grid and rulers can be set up to agree with each other. The main  
interval on the ruler (those marked 1, 2, 3, 4 etc) are established by  
multiplying the span by the conversion factor. The rulerSteps are just  
a hint as to how those intervals are split up - it's just passed along  
to NSRulerView as the "step-up cycle" parameter.

I hope that clarifies things a bit - if not, just say!

--Graham







More information about the Drawkit mailing list