(FILECREATED "30-May-85 16:25:55" {ERIS}<LISPCORE>DIG>DIGTRANSFORMS.;15 7718   

      changes to:  (FNS DRAWSQR ROTATESQR DRAWARROW TRANSFORMPT.BOX DSPPUSHTRANSFORM DSPPOPTRANSFORM 
			\DSPPOPTRANSFROM.GENERIC \DSPPUSHTRANSFORM.GENERIC)
		   (VARS DIGTRANSFORMSCOMS)

      previous date: "28-May-85 18:21:40" {ERIS}<LISPCORE>DIG>DIGTRANSFORMS.;13)


(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT DIGTRANSFORMSCOMS)

(RPAQQ DIGTRANSFORMSCOMS ((FILES NEWMATMULT CMLARRAY)
			  (FNS DSPPOPTRANSFORM DSPPUSHTRANSFORM DSPTRANSFORM MAKE.3VECTOR NEWDRAWLINE 
			       NEWMOVETO TRANSFORM TRANSFORMPT TRANSFORMPT.BOX TRANSFORMPTS 
			       TRANSFORMVEC \DSPPOPTRANSFROM.GENERIC \DSPPUSHTRANSFORM.GENERIC)
			  (FNS ROTATESQR DRAWSQR DRAWARROW)
			  (RESOURCES RESULT.BOX VECTOR.BOX)))
(FILESLOAD NEWMATMULT CMLARRAY)
(DEFINEQ

(DSPPOPTRANSFORM
  [LAMBDA (STREAM)                                           (* hdj "28-May-85 18:09")
    (IMAGEOP (QUOTE IMPOPTRANSFORM)
	     (SETQ STREAM (\OUTSTREAMARG STREAM))
	     STREAM])

(DSPPUSHTRANSFORM
  [LAMBDA (STREAM TRANSFORMATION)                            (* hdj "28-May-85 18:09")
    (IMAGEOP (QUOTE IMPUSHTRANSFORM)
	     (SETQ STREAM (\OUTSTREAMARG STREAM))
	     STREAM TRANSFORMATION])

(DSPTRANSFORM
  [LAMBDA (STREAM)                                           (* hdj "14-May-85 16:28")
    (CAR (STREAMPROP STREAM (QUOTE TransformationStack])

(MAKE.3VECTOR
  [LAMBDA (X Y)                                              (* hdj "14-May-85 16:22")
    (LET ((VECTOR (CREATE1BY3)))
      (SET.XCOORD VECTOR X)
      (SET.YCOORD VECTOR Y)
      (SET.ZCOORD VECTOR 1.0)
      VECTOR])

(NEWDRAWLINE
  [LAMBDA (X1 Y1 X2 Y2 WIDTH OPERATION STREAM COLOR DASHING)
                                                             (* hdj "24-May-85 17:56")
    (LET [(TRANSFORMATION (OR (DSPTRANSFORM STREAM)
			      (ERROR "No current transformation for " STREAM]
      (LET ((TransformedPoint1 (create POSITION))
	 (TransformedPoint2 (create POSITION)))
	(TRANSFORMPT.BOX X1 Y1 TRANSFORMATION TransformedPoint1)
	(TRANSFORMPT.BOX X2 Y2 TRANSFORMATION TransformedPoint2)
	(DRAWLINE (fetch XCOORD of TransformedPoint1)
		  (fetch YCOORD of TransformedPoint1)
		  (fetch XCOORD of TransformedPoint2)
		  (fetch YCOORD of TransformedPoint2)
		  WIDTH OPERATION STREAM COLOR DASHING])

(NEWMOVETO
  [LAMBDA (X Y STREAM)                                       (* hdj "16-May-85 14:36")
    (LET ((TRANSFORMATION (DSPTRANSFORM STREAM)))
      (if TRANSFORMATION
	  then (LET ((TransformedPoint (TRANSFORMPT X Y TRANSFORMATION)))
		 (MOVETO (GET.XCOORD TransformedPoint)
			 (GET.YCOORD TransformedPoint)
			 STREAM))
	else (MOVETO X Y STREAM])

(TRANSFORM
  [LAMBDA (VECTOR TRANSFORMATION)                            (* hdj "14-May-85 16:42")
    (LET ((NEWVEC (CREATE1BY3)))
      (MATMULT133 VECTOR TRANSFORMATION NEWVEC)
      NEWVEC])

(TRANSFORMPT
  [LAMBDA (X Y TRANSFORMATION)                               (* hdj "24-May-85 17:48")
    (LET ((VECTOR (CREATE1BY3))
       (RESULT (CREATE1BY3)))
      (SET.XCOORD VECTOR X)
      (SET.YCOORD VECTOR Y)
      (SET.ZCOORD VECTOR 1.0)
      (MATMULT133 VECTOR TRANSFORMATION RESULT)
      RESULT])

(TRANSFORMPT.BOX
  [LAMBDA (X Y TRANSFORMATION NEWXYBOX)                      (* hdj "29-May-85 09:58")
    (GLOBALRESOURCES VECTOR.BOX (GLOBALRESOURCES RESULT.BOX 
                                                             (*)
						 (SET.XCOORD VECTOR.BOX X)
						 (SET.YCOORD VECTOR.BOX Y)
						 (SET.ZCOORD VECTOR.BOX 1.0)
						 (MATMULT133 VECTOR.BOX TRANSFORMATION RESULT.BOX)
						 (create POSITION smashing NEWXYBOX XCOORD ←(
									     GET.XCOORD RESULT.BOX)
									   YCOORD ←(GET.YCOORD 
										       RESULT.BOX])

(TRANSFORMPTS
  [LAMBDA (PTS TRANSFORMATION)                               (* hdj "15-May-85 11:29")
    (LET ((VECTOR (CREATE1BY3))
       (RESULT (CREATE1BY3)))
      (for POINT in PTS
	 collect (SET.XCOORD VECTOR (fetch (POSITION XCOORD) of POINT))
		 (SET.YCOORD VECTOR (fetch (POSITION YCOORD) of POINT))
		 (SET.ZCOORD VECTOR 1.0)
		 (MATMULT133 VECTOR TRANSFORMATION RESULT)
		 (create POSITION
			 XCOORD ←(GET.XCOORD RESULT)
			 YCOORD ←(GET.YCOORD RESULT])

(TRANSFORMVEC
  [LAMBDA (VECTOR TRANSFORMATION)                            (* hdj "14-May-85 16:42")
    (LET ((NEWVEC (CREATE1BY3)))
      (MATMULT133 VECTOR TRANSFORMATION NEWVEC)
      NEWVEC])

(\DSPPOPTRANSFROM.GENERIC
  [LAMBDA (STREAM)                                           (* hdj "14-May-85 16:38")
    (LET [(STACK (STREAMPROP STREAM (QUOTE TransformationStack]
      (STREAMPROP STREAM (QUOTE TransformationStack)
		  (if (LISTP STACK)
		      then (CDR STACK)
		    else (ERROR "Popping empty transformation stack" STREAM)))
      (CAR STACK])

(\DSPPUSHTRANSFORM.GENERIC
  [LAMBDA (STREAM TRANSFORMATION)                            (* hdj "17-May-85 15:20")
    (OR (CMLARRAYP TRANSFORMATION)
	(\ILLEGAL.ARG TRANSFORMATION))
    (OR (IMAGESTREAMP STREAM)
	(\ILLEGAL.ARG STREAM))
    [STREAMPROP STREAM (QUOTE TransformationStack)
		(CONS TRANSFORMATION (STREAMPROP STREAM (QUOTE TransformationStack]
    NIL])
)
(DEFINEQ

(ROTATESQR
  [LAMBDA (SQRSIZE STEPS STREAM)                             (* hdj "29-May-85 14:32")
    (LET ((CENTERX 100)
       (CENTERY 100))
      (LET* [(STEPSIZE (FQUOTIENT 360 STEPS))
	 (INCREMENTAL.ROTATION (ROTATE3BY3 STEPSIZE))
	 (TRANSLATION (TRANSLATE3BY3 CENTERX CENTERY))
	 (TRANSLATION.INV (TRANSLATE3BY3 (MINUS CENTERY)
					 (MINUS CENTERY]     (* (DSPPUSHTRANSFORM STREAM 
							     (TRANSLATE3BY3 CENTERX CENTERY)))
	(\DSPPUSHTRANSFORM.GENERIC STREAM (TRANSLATE3BY3 CENTERX CENTERY))
	(for X from 1 to STEPS
	   do (CONCATTRANSFORMS (DSPTRANSFORM STREAM)
				TRANSLATION.INV)
	      (CONCATTRANSFORMS (DSPTRANSFORM STREAM)
				INCREMENTAL.ROTATION)
	      (CONCATTRANSFORMS (DSPTRANSFORM STREAM)
				TRANSLATION)
	      (DRAWSQR SQRSIZE STREAM)
	      (DRAWARROW SQRSIZE STREAM])

(DRAWSQR
  [LAMBDA (SIZE STREAM)                                      (* hdj "29-May-85 14:29")
    (LET ((HALFSIZE (QUOTIENT SIZE 2)))
      (MOVETO (MINUS HALFSIZE)
	      (MINUS HALFSIZE)
	      STREAM)
      (DRAWTO HALFSIZE (MINUS HALFSIZE)
	      1 NIL STREAM)
      (DRAWTO HALFSIZE HALFSIZE 1 NIL STREAM)
      (DRAWTO (MINUS HALFSIZE)
	      HALFSIZE 1 NIL STREAM)
      (DRAWTO (MINUS HALFSIZE)
	      (MINUS HALFSIZE)
	      1 NIL STREAM])

(DRAWARROW
  [LAMBDA (SIZE STREAM)                                      (* hdj "29-May-85 14:31")
    (LET ((HALFSIZE (QUOTIENT SIZE 2)))
      (MOVETO 0 (MINUS HALFSIZE)
	      STREAM)
      (DRAWTO 0 HALFSIZE 1 NIL STREAM)
      (DRAWTO HALFSIZE 0 1 NIL STREAM)
      (MOVETO (MINUS HALFSIZE)
	      0 STREAM)
      (DRAWTO 0 HALFSIZE 1 NIL STREAM])
)
(DECLARE: EVAL@COMPILE 
[PUTDEF (QUOTE RESULT.BOX)
	(QUOTE RESOURCES)
	(QUOTE (NEW (CREATE1BY3]
[PUTDEF (QUOTE VECTOR.BOX)
	(QUOTE RESOURCES)
	(QUOTE (NEW (CREATE1BY3]
)
(PUTPROPS DIGTRANSFORMS COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (860 5655 (DSPPOPTRANSFORM 870 . 1083) (DSPPUSHTRANSFORM 1085 . 1315) (DSPTRANSFORM 1317
 . 1494) (MAKE.3VECTOR 1496 . 1754) (NEWDRAWLINE 1756 . 2514) (NEWMOVETO 2516 . 2914) (TRANSFORM 2916
 . 3125) (TRANSFORMPT 3127 . 3469) (TRANSFORMPT.BOX 3471 . 4058) (TRANSFORMPTS 4060 . 4606) (
TRANSFORMVEC 4608 . 4820) (\DSPPOPTRANSFROM.GENERIC 4822 . 5234) (\DSPPUSHTRANSFORM.GENERIC 5236 . 
5653)) (5656 7464 (ROTATESQR 5666 . 6561) (DRAWSQR 6563 . 7069) (DRAWARROW 7071 . 7462)))))
STOP