(FILECREATED "23-JAN-83 16:33:50" {DSK}VECTOR.LSP;9 7836
changes to: (FNS VECTORMOVE)
previous date: "14-JAN-83 12:45:52" {DSK}VECTOR.LSP;8)
(PRETTYCOMPRINT VECTORCOMS)
(RPAQQ VECTORCOMS ((GLISPOBJECTS DEGREES DOLPHINREGION GRAPHICSOBJECT RADIANS REGION RVECTOR SYMMETRY
VECTOR)
(FNS DRAWRECT GRAPHICSOBJECTMOVE NEWSTART NEWPOINT REGION-CONTAINS REGION-INTERSECT
REGION-SETPOSITION REGION-UNION VECTORPLUS VECTORDIFF VECTORGREATERP VECTORLEQP
VECTORTIMES VECTORQUOTIENT VECTORMOVE)
(PROP DRAWFN RECTANGLE)))
[GLISPOBJECTS
(DEGREES
REAL
PROP ((RADIANS (self* (3.1415926/180.0))
RESULT RADIANS)
(DISPLAYPROPS (T))) )
(DOLPHINREGION
(LIST (LEFT INTEGER)
(BOTTOM INTEGER)
(WIDTH INTEGER)
(HEIGHT INTEGER))
PROP ((START (self)
RESULT VECTOR)
(SIZE CDDR RESULT VECTOR))
SUPERS (REGION) )
(GRAPHICSOBJECT
(LIST (SHAPE ATOM)
(START VECTOR)
(SIZE VECTOR))
PROP ((LEFT (START:X))
(BOTTOM (START:Y))
(RIGHT (LEFT+WIDTH))
(TOP (BOTTOM+HEIGHT))
(WIDTH (SIZE:X))
(HEIGHT (SIZE:Y))
(CENTER (START+SIZE/2))
(AREA (WIDTH*HEIGHT)))
MSG ([DRAW ((APPLY* (GETPROP SHAPE 'DRAWFN)
self
(QUOTE PAINT]
[ERASE ((APPLY* (GETPROP SHAPE 'DRAWFN)
self
(QUOTE ERASE]
(MOVE GRAPHICSOBJECTMOVE OPEN T)) )
(RADIANS
REAL
PROP ((DEGREES (self* (180.0/3.1415926))
RESULT DEGREES)
(DISPLAYPROPS (T))) )
(REGION
(LIST (START VECTOR)
(SIZE VECTOR))
PROP ((LEFT (START:X))
(BOTTOM (START:Y))
(RIGHT (LEFT+WIDTH))
(TOP (BOTTOM+HEIGHT))
(WIDTH (SIZE:X))
(HEIGHT (SIZE:Y))
(CENTER (START+SIZE/2))
(TOPCENTER ((A VECTOR WITH X = LEFT+WIDTH/2 Y = TOP)))
(BOTTOMCENTER ((A VECTOR WITH X = LEFT+WIDTH/2 Y = BOTTOM)))
(AREA (WIDTH*HEIGHT)))
ADJ ((EMPTY (WIDTH IS ZERO OR HEIGHT IS ZERO))
(ZERO (self IS EMPTY)))
MSG ((CONTAINS? REGION-CONTAINS OPEN T)
(SETPOSITION REGION-SETPOSITION OPEN T)) )
(RVECTOR
(LIST (X REAL)
(Y REAL))
SUPERS (VECTOR) )
(SYMMETRY
INTEGER
PROP ((SWAPXY ((LOGAND self 4)
<>0))
(INVERTY ((LOGAND self 2)
<>0))
(INVERTX ((LOGAND self 1)
<>0))) )
(VECTOR
(LIST (X INTEGER)
(Y INTEGER))
PROP [(MAGNITUDE ((SQRT X^2 + Y^2)))
(ANGLE ((ARCTAN2 Y X T))
RESULT RADIANS)
(UNITVECTOR ((A RVECTOR WITH X = X/MAGNITUDE Y= Y/MAGNITUDE]
ADJ ((ZERO (X IS ZERO AND Y IS ZERO))
(NORMALIZED (MAGNITUDE = 1.0)))
MSG [(+ VECTORPLUS OPEN T)
(- VECTORDIFF OPEN T)
(* VECTORTIMES OPEN T)
(/ VECTORQUOTIENT OPEN T)
(> VECTORGREATERP OPEN T)
(<= VECTORLEQP OPEN T)
(_+ VECTORMOVE OPEN T)
(PRIN1 ((PRIN1 "(")
(PRIN1 X)
(PRIN1 ",")
(PRIN1 Y)
(PRIN1 ")")))
(PRINT ((_ self PRIN1)
(TERPRI] )
]
(DEFINEQ
(DRAWRECT
(GLAMBDA ((A GRAPHICSOBJECT)
DSPOP:ATOM) (* edited: "11-JAN-82 12:40")
(PROG (OLDDS)
(OLDDS _(CURRENTDISPLAYSTREAM DSPS))
(DSPOPERATION DSPOP)
(MOVETO LEFT BOTTOM)
(DRAWTO LEFT TOP)
(DRAWTO RIGHT TOP)
(DRAWTO RIGHT BOTTOM)
(DRAWTO LEFT BOTTOM)
(CURRENTDISPLAYSTREAM OLDDS))))
(GRAPHICSOBJECTMOVE
(GLAMBDA (self:GRAPHICSOBJECT DELTA:VECTOR) (* edited: "11-JAN-82 16:07")
(_ self ERASE)
(START _+
DELTA)
(_ self DRAW)))
(NEWSTART
[GLAMBDA (START:VECTOR SIZE:VECTOR SYM:SYMMETRY) (* edited: " 1-JAN-83 15:13")
(* Transform the starting point of an object as
appropriate for the specified symmetry transform.)
(PROG (W H TMP)
(W_SIZE:X)
(H_SIZE:Y)
(IF SYM:SWAPXY
THEN TMP_W
W_H
H_TMP)
(IF ~SYM:INVERTY
THEN H_0)
(IF ~SYM:INVERTX
THEN W_0)
(RETURN (A VECTOR WITH X = START:X+W Y = START:Y+H])
(NEWPOINT
[GLAMBDA (START:VECTOR POINT:VECTOR SYM:SYMMETRY) (* edited: " 1-JAN-83 15:12")
(* Transform a given relative POINT for specified
symmetry transform.)
(PROG (W H TMP)
(W_POINT:X)
(H_POINT:Y)
(IF SYM:SWAPXY
THEN TMP_W
W_H
H_TMP)
(IF ~SYM:INVERTY
THEN H _ - H)
(IF ~SYM:INVERTX
THEN W _ - W)
(RETURN (A VECTOR WITH X = START:X+W Y = START:Y+H])
(REGION-CONTAINS
(GLAMBDA (AREA P) (* edited: "26-OCT-82 11:45")
(* Test whether an area contains a point P.)
(P:X>=AREA:LEFT AND P:X<=AREA:RIGHT AND P:Y>=AREA:BOTTOM AND P:Y<=AREA:TOP)))
(REGION-INTERSECT
(GLAMBDA (P,Q:AREA) (* edited: "23-SEP-82 10:44")
(RESULT AREA) (* Produce an AREA which is the intersection of two
given AREAs.)
(PROG (NEWBOTTOM NEWLEFT NEWAREA XSIZE YSIZE)
(NEWBOTTOM _(IMAX P:BOTTOM Q:BOTTOM))
(YSIZE _(IMIN P:TOP Q:TOP)
- NEWBOTTOM)
(NEWLEFT _(IMAX P:LEFT Q:LEFT))
(XSIZE _(IMIN P:RIGHT Q:RIGHT)
- NEWLEFT)
(NEWAREA _(AN AREA))
(IF XSIZE>0 AND YSIZE>0
THEN NEWAREA:LEFT_NEWLEFT
NEWAREA:BOTTOM_NEWBOTTOM
NEWAREA:WIDTH_XSIZE
NEWAREA:HEIGHT_YSIZE)
(RETURN NEWAREA))))
(REGION-SETPOSITION
(GLAMBDA (AREA APOS:VECTOR NEWPOS:VECTOR) (* GSN "14-JAN-83 11:52")
(* Change the START point of AREA so that the position
APOS relative to the area will have the position
NEWPOS.)
(AREA:START _+
NEWPOS - APOS)))
(REGION-UNION
(GLAMBDA (P,Q:AREA) (* edited: "23-SEP-82 11:15")
(RESULT AREA) (* Produce an AREA which is the union of two given
AREAs.)
(PROG (NEWBOTTOM NEWLEFT XSIZE YSIZE NEWAREA)
(NEWBOTTOM _(IMIN P:BOTTOM Q:BOTTOM))
(YSIZE _(IMAX P:TOP Q:TOP)
- NEWBOTTOM)
(NEWLEFT _(IMIN P:LEFT Q:LEFT))
(XSIZE _(IMAX P:RIGHT Q:RIGHT)
- NEWLEFT)
(NEWAREA _(AN AREA))
(NEWAREA:LEFT_NEWLEFT)
(NEWAREA:BOTTOM_NEWBOTTOM)
(NEWAREA:WIDTH_XSIZE)
(NEWAREA:HEIGHT_YSIZE)
(RETURN NEWAREA))))
(VECTORPLUS
(GLAMBDA (V1,V2:VECTOR)
(A VECTOR WITH X = V1:X + V2:X , Y = V1:Y + V2:Y)))
(VECTORDIFF
(GLAMBDA (V1,V2:VECTOR)
(A VECTOR WITH X = V1:X - V2:X , Y = V1:Y - V2:Y)))
(VECTORGREATERP
(GLAMBDA (U:VECTOR V:VECTOR) (* GSN "14-JAN-83 12:33")
(* This version of > tests whether one box will fit
inside the other.)
(U:X>V:X OR U:Y>V:Y)))
(VECTORLEQP
(GLAMBDA (U:VECTOR V:VECTOR) (* GSN "14-JAN-83 12:31")
(U:X<=V:X AND U:Y<=V:Y)))
(VECTORTIMES
(GLAMBDA (V:VECTOR N:NUMBER)
(A VECTOR WITH X = X*N , Y = Y*N)))
(VECTORQUOTIENT
(GLAMBDA (V:VECTOR N:NUMBER)
(A VECTOR WITH X = X/N , Y = Y/N)))
(VECTORMOVE
(GLAMBDA (V,DELTA:VECTOR) (* GSN "23-JAN-83 16:28")
(V:X _+
DELTA:X)
(V:Y _+
DELTA:Y)
V))
)
(PUTPROPS RECTANGLE DRAWFN DRAWRECT)
(DECLARE: DONTCOPY
(FILEMAP (NIL (2907 7772 (DRAWRECT 2917 . 3338) (GRAPHICSOBJECTMOVE 3340 . 3522) (NEWSTART 3524 . 4114
) (NEWPOINT 4116 . 4688) (REGION-CONTAINS 4690 . 5005) (REGION-INTERSECT 5007 . 5734) (
REGION-SETPOSITION 5736 . 6107) (REGION-UNION 6109 . 6799) (VECTORPLUS 6801 . 6898) (VECTORDIFF 6900
. 6997) (VECTORGREATERP 6999 . 7289) (VECTORLEQP 7291 . 7427) (VECTORTIMES 7429 . 7516) (
VECTORQUOTIENT 7518 . 7608) (VECTORMOVE 7610 . 7770)))))
STOP