|
|
|
|
||
|
DEFINITION MODULE DMWPictIO; (******************************************************************* Module DMWPictIO ('Dialog Machine' DM_V3.0) Copyright (c) 1987-2006 by Olivier Roth, Andreas Fischlin and ETH Zurich. Purpose Saves picture objects for a 'Dialog Machine' window in memory for later reference like redrawing, transfer to the clipboard or printing. Remarks All DMWindIO output routines may be used to produce picture objects. A picture object belongs always to a particular 'Dialog Machine' window and in a particular moment a window can own only a single picture. This module belongs to the 'Dialog Machine'. Programming o Design Olivier Roth 02/04/1987 Andreas Fischlin 14/03/1989 o Implementation Olivier Roth 02/04/1987 Andreas Fischlin 14/03/1989 ETH Zurich Systems Ecology CHN E 35.1 Universitaetstrasse 16 8092 Zurich SWITZERLAND URLs: <mailto:RAMSES@env.ethz.ch> <http://www.sysecol.ethz.ch> <http://www.sysecol.ethz.ch/SimSoftware/RAMSES> Last revision of definition: 27/04/1993 AF *******************************************************************) FROM DMWindows IMPORT Window, RectArea; VAR PictIODone: BOOLEAN; (* Read only variable, which returns whether any of the following procedures has been successful. E.g. if enough memory is available, etc. *) PROCEDURE StartPictureSave; (* Saves in memory all subsequent DM-Window output in a picture associated with the current Dialog Machine output window. NOTE: don't forget to terminate this saving with a call to StopPictureSave. *) PROCEDURE PausePictureSave; PROCEDURE ResumePictureSave; PROCEDURE StopPictureSave; (* Stops storing DM-Window output to the picture associated with the current Dialog Machine output window *) PROCEDURE DisplayPicture (ownerWindow: Window; destRect: RectArea); (* Displays the picture associated with the Dialog Machine window ownerWindow onto the current Dialog Machine output window in the destination rectangle destRect. If the width or height of the destRect is <0 then the picture will be displayed in its original size, if the lower left corner is =MIN(INTEGER) then the picture's original lower left corner will be respected, otherwise it will be resized to fit exactly into the given rectangle (exception: if all of destRect are =0 then the picture is fitted entirely into the destination window). The status of the picture in the owner window (pause/active and closed/open) is temporarily changed but restored after the display, whereas the destination picture status remains untouched. In case there is currently a text or picture object open (see also module DMWTextIO), note that the picture will be appended to the already existing picture but NOT to the eventually already existing text. This mechanisms allows to copy a picture into a picture but not into a text object (different from DMWTextIO.DisplayText). Placing and sizing pictures with the dialog machine: If one wants to display an entire or a part of a picture at (destRect): a) its orig. origin, in its orig. size (ev. clipped) b) its orig. origin, in a new size (fit into) c) a new origin , in its orig. size (ev. clipped) d) a new origin , in a new size (fit into) e) fit into destination window {special case of d)} then one may use the following specifications for destRect instead of the actual values: x y w h a) MIN(INTEGER) <0 <0 b) MIN(INTEGER) w h c) x y <0 <0 d) x y w h e) … … 0 0 concerns: DMClipboard.GetPictureFromClipboard (simultaneousDisplay: BOOLEAN; destRect: RectArea); DMPTFiles.LoadPicture (VAR f: TextFile; simulDisplay: BOOLEAN; destRect: RectArea); DMWPictIO.DisplayPicture(ownerWindow: Window; destRect: RectArea); other related procedures: DMWPictIO.SetPictureArea(r: RectArea); DMWPictIO.GetPictureArea(VAR r: RectArea); DMWindows.GetWindowFrame(u: Window; VAR f: WindowFrame); DMWindIO.SetClipping(cr: RectArea); DMWindIO.GetClipping(VAR cr: RectArea); Logic of display and save mechanism of pictures with the dialog machine: window has open pict closed/paused pict simulDisplay d/s d/ns not simulDisplay nd/s nd/ns (d = displayed, nd = not displayed, s = saved (appended), ns = not saved) *) PROCEDURE DiscardPicture; (* Discard the picture associated with the current output window completely, and make the allocated memory space available for other uses. Note that once discarded, it is no longer possible to print the picture, write it to a file, or transfer it to the clipboard (s.a. DMPrinting.PrintPicture, DMPTFiles.DumpPicture, and DMClipboard.PutPictureIntoClipboard). *) PROCEDURE SetPictureArea ( r: RectArea ); PROCEDURE GetPictureArea ( VAR r: RectArea ); (* Sets or gets the area to be used for subsequent picture saves. If this procedure is never called the default picture area used will be that of the window frame of the current output window when calling StartPictureSave. Typically this procedure is used to restrict the saving process to a portion of a picture. *) PROCEDURE SetHairLineWidth ( f: REAL ); PROCEDURE GetHairLineWidth ( VAR f: REAL ); (* The hair line width is the scaling factor by which all lines subsequently drawn via DMWindIO routines and collected via DMWPictIO.StartPictureSave will be printed on a PostScript printer. E.g. a scaling factor f = 1 means, that lines drawn on the screen with a width of 1 pixel are printed on a laser printer with a width which corresponds to the proportion of the resolutions between the screen and the printer. A Macintosh screen has a resolution of 72 x 72 pixels/inch, the Apple LaserWriter one of 300 x 300 dots/inch (ImageWriter 144 x 144 pixels/inch). Hence, the resolution on that laser printer is approximately 4 times as that of the screen. Hence with f = 1 lines drawn on the screen with 1 pixel width are printed with a width of 4 dots. However, with e.g. a scaling factor f = 0.25, an actual, very fine hair line with a width of 1 dot will be printed where you see on the screen still a relatively "thick" line with a width of 1 pixel. Use this mechanisms to print lines thinner as what you could display on a screen, in order to produce prettier pictures. Note however that this mechanism affects all line drawing, in particular it would also allow to enlarge line widths. Hence, be careful in its use. Note also, that this mechanism won't work on an ImageWriter. The default scaling factor f is 0.5. *) END DMWPictIO.
|
||
|
|
|