CLIM mail archive


postscript output with scaling and draw-text* in CLIM 1.1

    Date: Wed, 9 Sep 1992 17:37 EDT
    From: "Gregory M. Whittaker" <>

    Dear Lois,

    I'm re-sending my current version of a postscript grapher for 
    class hierarchies. I have dropped the with-scaling macro and 
    gone to the with-drawing-options equivalent since I need to 
    explicitly pass the transform to the draw-text* function as well.
    Unfortunately the entire combination results in no improvement
    over the original. It appears that draw-text* generic-function
    ignores the passed in transform after checking that it is indeed
    a transform. Text is identical in size and placement no matter
    what I supply for a size. The tree links only match up with the
    textual node positions when the size = 1.0.

    I'm back to using CLIM 1.1 because with-output-to-postscript-stream
    is not yet supported in CLIM 2.0.alpha. I'm using the Franz version
    on a SPARCstation 2. Surely someone out there has done this before!
    What am I doing wrong?

CLIM:DRAW-TEXT* is defined to obey transformations only insofar as the
placement of the glyphs along a particular baseline, and then only when
you suppy TOWARDS-X/Y.  Furthermore, it is allowed to ignore size and
rotation information.  This restricted behavior is specified because
most ports do not support general fonts (i.e., created from mathematical
descriptions descibing the path that outlines each glyph).  PostScript
is the only port general enough to support this, but the necessary work
has not been done to make it work properly.  In the meanwhile, you
should choose a font size (which you can specify in printer's points)
that matches the desired scaling transformation.

    Here is the code:

    (defmethod print-scaled-subclass-tree ((name symbol) &optional (size 1.0))
      (let* ((class (find-class name))
	     (filename (concatenate 'string (string (class-name class))
	(with-open-file (file filename :direction :output :if-exists :supersede)
	  (clim:with-output-to-postscript-stream (stream file :multi-page t)
	    (let ((transform (clim:make-scaling-transformation size size)))
	      (clim:with-drawing-options (stream :transformation transform)
		 #'(lambda (object s)
		       (string (class-name object))
		       (clim:stream-cursor-position* s)
		       :align-y :center
		       :transformation transform))
		 #'clos:class-direct-subclasses :stream stream))))
    ;;;(excl:run-shell-command (concatenate 'string "lpr " filename)))))
    ;;; if you actually want to print out the results, uncomment the above
    ;;; line and delete the preceding three close-parens. I've been simply
    ;;; using pageview to examine the results of the tests, and only print-
    ;;; hardcopy when necesary for documentation.

     Gregory M. Whittaker,		 The MITRE Corporation
				     Center for Advanced Aviation 
					System Development
    Internet:	 7525 Colshire Drive 
       Phone: (703) 883-5549	 McLean Virginia 22102-3481
	 FAX: (703) 883-1226	 Mail Stop: W215      



Main Index | Thread Index