INTERFACEAJunoPt ;

`JunoPt.T`

represents a point in Juno coordinates. The procedures in this
module perform conversions to/from Juno points.
IMPORT JunoAST, JunoValue, RTVal, Point; EXCEPTION BadPt; TYPE T = RECORD x, y: JunoValue.Real END;A

`JunoPt.T`

is a point in Juno coordinates. As opposed to Trestle's
`Point.T`

, Juno points are real-valued, their `y`

coordinate increases
to the north, and they are measured in units of screen-independent points
instead of screen-dependent pixels.
TYPE Transform = RECORD origin := Point.T{0, 0}; xScale, yScale, widthScale: JunoValue.Real := 1.0; (* in pixels / point *) END;A

`JunoPt.Transform`

specifies a transformation for converting between Juno
coordinates and Trestle coordinates. The field `origin`

is the location (in
Trestle coordinates) of the origin of the Juno coordinate system; this is
usually the southwest corner of a drawing's domain. The fields
`xScale`

and `yScale`

are the screen-dependent conversion factors for the
orthogonal axes in pixels-per-point: multiply by these factors to convert
from points to pixels, and divide by them to convert from pixels to
points. The field `widthScale`

is the scale factor to use for line widths;
it is a function of the scale factors in the x and y directions.
PROCEDURE ToHV(READONLY xyPt: T; READONLY xform: Transform): Point.T;

Return the point in Trestle coordinates with the point`origin`

as origin of the location`xyPt`

in Juno coordinates.

PROCEDURE FromHV(READONLY hvPt: Point.T; READONLY xform: Transform): T;

Return the location in Juno coordinates of the point`hv`

in Trestle coordinates with the point`origin`

as origin.

PROCEDURE ToASTPair(READONLY xyPt: T): JunoAST.Pair;

Return the`JunoAST.Pair`

representing the point equivalent to the Juno point`xyPt`

.

PROCEDURE ToValuePair(READONLY xyPt: T): RTVal.Pair;

Return the`RTVal.Pair`

representing the point equivalent to the Juno point`xyPt`

.

PROCEDURE FromValuePair(pr: RTVal.Pair): T RAISES {BadPt};

Return the Juno point equivalent to the pair`pr`

. Raises`BadPoint`

if`pr`

is not a pair of`RTVal.Number`

's (this includes the case where`pr = NIL`

.

PROCEDURE RelVal( cx,cy, ax,ay, bx,by: JunoValue.Real; VAR (*OUT*) x,y: JunoValue.Real): BOOLEAN;

Solve`(cx, cy) = (x, y) REL ((ax, ay), (bx, by))`

for`x`

and`y`

and return TRUE, or return FALSE if there is no solution (namely, if`ax = bx`

and`ay = by`

).

END JunoPt.

interface JunoValue is in: