juno-app/src/JunoPt.i3


 Copyright (C) 1992, Digital Equipment Corporation                         
 All rights reserved.                                                      
 See the file COPYRIGHT for a full description.                            
                                                                           
 Last modified on Fri Jun 24 10:49:31 PDT 1994 by heydon                   

INTERFACE JunoPt;
A 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: