Re: Representing Units of Measure
Posted: Sep 27, 2005 10:49 AM
Well it is done. The latest HeronScript now supports postfix type casts, and basic line drawing primitives.
> Partly conceded. There is an accumulated error, but it
> would likely be "hidden" in the sense that the widget's
> size would never disagree with itself.
You are right.
> And, since I was complaining about rounding errors on the
> order of 1/288 in. (from simple manufacturing margins of
> error/tolerances), it's pretty hard to defend my original
> post's elitism.
Nothing wrong with being elitist. I want to produce something of very high quality.
> This makes sense, although I understood the question to be
> about when different units were used in defining the size
> or placement of a widget.
What I failed to communicate is that I want to be able to write:
window_variable.move_to(25 percent, 25 percent)
window_variable.line_rel(12 pixels, 42 cm)
But to disallow:
12 pixels + 24 percent
My rationale, jumbled as it may be, is that 12 pixels + 42 cm is an expression with an indeterminate type. In order to allow the expression of a path with different types, I decided to create a polymorphic type "_unit" which accepts any one of the seven graphical unit types. This way only one definition of "line_to", "move_to", "line_rel", "move_rel" is needed.
The reason for this approach is that something like cm or percent is only meaningful when given a device context (like a screen or bitmap or printer). So only when you actually draw it, can you convert it to some kind of universal type. One of my requirements is that I want to be able to store paths as variables, independant of the context. This way when the context changes (for instance when the window is resized) I can simply go back and redraw the path.
In the HeronScript implementation every window has a "path" which represents a series of vector commands. What is cool about this approach, is that I can convert it to another format (XML, SVG, Bitmap, Metafile) very easily, or zoom in, or rotate or whatever, while still using the same core set of drawing operations.