logo_90

Der grafische Status

Der grafische Status dient dazu, ein grafisches Objekt mit bestimmten Attributen wie Farben, Fonts etc. wiederzugeben. Das folgende Beispiel zeigt einen Schriftzug in verschiedener Drehung und mit verschiedenen Farben: LOGOROT

Die Zeichen eines Schriftzuges können rotiert (rotate), vergrössert, verkleinert, dicker, dünner, farbiger, heller etc. gemacht werden.

%!PS-Adobe-3.0 EPSF-3.0
%%Title: (logo rotated)
%%BoundingBox: 66 190 612 684
%%DocumentFonts: Times-BoldItalic
%%CreationDate: (1.11.91)
%%EndComments
 
% PostScript --- Rotation und Farbe
 
/Q {7.2 mul} def
 
/rotangle 90 def
/rotoffset 22.5 def
/level .8 def			% Rot-Anteil .8
 
/logosetup
  {(Times-BoldItalic) findfont  [110 0 0 110 0 0] makefont setfont
    } def
 
/point  {0 0 moveto} def	% Startpunkt
 
% /Obj gstate def
/rotationloop
   {gsave % Obj currentgstate
   rotangle rotate		% rotieren
  
     level 0 0 setrgbcolor	% Farbanteile RGB
   (PostScript) show
 
   /rotangle rotangle		% Drehwinkel etwas kleiner
   rotoffset sub def		% beim naechsten Durchgang
 
   /level level			% Rot-Anteil etwas kleiner
   .15 sub def			% beim maechsten Mal  
   grestore % Obj setgstate
   } def
   
  
/logorot
   {gsave
         20 Q 30 Q translate	% positionieren
         logosetup
 
         point
         5 {rotationloop} repeat
 
         grestore} def
 
%%EndProlog
 
logorot

showpage
%%Trailer
Führen Sie dieses Beispiel "Rotiertes Logo" aus! Im Beispiel definieren wir zuerst die Routine rotationloop, um diese dann mit dem Operator repeat fünfmal aufzurufen:
5 { rotationloop } repeat
Zu Beginn jedes Durchgangs sichern wir den grafischen Status (gsave) und am Ende des Durchgangs stellen wir den ursprünglichen Status wieder her (grestore). Zum grafischen Status -- in PostScript eine wichtige Grundidee -- zählen folgende Elemente: Würden wir in rotationloop die Operatoren gsave und grestore weglassen, müssten wir beispielsweise bei jedem Durchgang die aktuelle Position zurücksetzen.

PostScript Level 2

Wenn Sie Zugang zu einem PostScript-Interpreter mit Level 2 haben, könnten Sie das Paar "gsave-grestore" durch currentgstate-setgstate ersetzen. Der grafische Status wird mit currentgstate in Obj gespeichert. Nach dem Verändern der aktuellen Position wird der vorherige grafische Zustand mit setgstate wiederhergestellt. Obj ist ein im lokalen Memory (VM) abgespeichertes Objekt. Mit Level 2 können Sie beliebig viele derartige Objekte erzeugen, d.h. im privaten Memory ablegen, und bei Bedarf in beliebiger Reihenfolge(!) wieder aktivieren. Adobe Systems empfiehlt allerdings, gstate-Objekte nur im Rahmen von Display PostScript einzusetzen, z.B. beim Scrolling oder beim Wechseln des Ausgabegerätes (Bildschirmfenster, Pufferspeicher).
Back to our PostScript-Corner.
HTML 3.2 Last update: 7-JUL-00/vo