Kreistext


%!PS-Adobe-1.0
%%Creator: Holger Gehringer
%%Title: Beispiel fuer Kreistext
%%CreationDate: Mo, 23.11.1998
%%DocumentMedia: A4 595 842 0 () ()
%%Orientation: Portrait
%%Pages: (atend)
%%DocumentFonts: Times-Roman Helvetica
%%EndComments

% Diese Programm verwendet zwei verschiedene Prozeduren, um Text entlang einer
% Kreislinie zu plazieren: 'outsidecircletext' schreibt Text im Uhrzeigersinn
% von aussen auf die Kreislinie; 'insidecircletext' schreibt gegen den Uhrzei-
% gersinn von innen auf die Kreislinie.

/OutsideCircletext
{ CirctextDict begin             % Die Prozedur benoetigt vier Argumente:
    /Radius exch def             % Kreisradius (Mittelpunkt 0,0)
    /Centerangle exch def        % Winkelposition, an der der Text zentriert
                                 % werden soll
    /PtSize exch def             % die Schriftgroesse in Punkt
    /Str exch def                % den Text, der plaziert werden soll.
    /XRadius Radius              % Zur Berechnung der Buchstabenzwischenraeume
    PtSize 4 div add def         % einen etwas groesseren Radius nehmen (Text
                                 % sieht so besser aus.
    gsave                        % Aktuellen Graphics State speichern
    Centerangle Str              % Nach Ermittlung des Winkels, den der Text auf
    FindHalfangle add rotate     % der Kreislinie einnimmt, wird das Koord.s. so
                                 % gedreht, dass die positive x-Achse den Kreis
                                 % an der Startposition des Textes schneidet.
    Str                          % Die Zeichen von 'Str' werden der Reihe nach
    { /Charcode exch def         % auf der Kreislinie plaziert.
      ( ) dup 0 Charcode put
      Outsideplacechar
    } forall
    grestore                     % Alten Grafikzustand wiederherstellen
  end
} def

/InsideCircletext
{ CirctextDict begin             % 'Insidecircletext' boetigt die gleichen vier
    /Radius exch def             % Argumente wie 'Outsidecircletext'
    /Centerangle exch def
    /PtSize exch def
    /Str exch def
    /XRadius                     % Jetzt Radius benutzen, der etwas kleiner als
    Radius PtSize 3 div sub      % der Kreisradius ist, um ein Ueberlappen der
    def                          % Buchstaben zu vermeiden.
    gsave
    Centerangle Str
    FindHalfangle sub rotate
    Str
    { /Charcode exch def
      ( ) dup 0 Charcode put
      Insideplacechar
    } forall
    grestore
  end
} def

/CirctextDict 16 dict def
CirctextDict begin
  /FindHalfangle                 % 'FindHalfangle' berechnet Winkel, den ein
  { stringwidth pop 2 div        % String (als Argument uebergeben) auf dem
    2 XRadius mul Pi mul div     % Kreis einnimmt, indem Laenge des Textes durch
    360 mul                      % Kreisumfang dividiert wird. Die Haelfte des
  } def                          % Wertes wird (in Grad) auf den Stack gelegt.
  
  /Outsideplacechar              % schreibt ein Zeichen auf Aussenseite des
  { /Char exch def               % Kreises und rotiert dann um einen Winkel
    /Halfangle                   % weiter, der der Breite des Zeichens
    Char FindHalfangle def       % entspricht.
    gsave
    Halfangle neg rotate         % Koord.s. um halbe Zeichenbreite drehen und
    Radius 0 translate           % Ursprung nach aussen verschieben. Dann K.s.
    -90 rotate                   % senkrecht zur Kreislinie stellen.
    Char stringwidth pop         % Zeichen zentriert bzgl. des Ursprungs posit.
    2 div neg 0 moveto
    Char show
    grestore                     % altes Koord.s. wiederherstellen und
    Halfangle 2 mul neg rotate   % um Zeichenbreite weiterrotieren.
  } def
  
  /Insideplacechar               % 'Insideplacechar' arbeitet aehnlich wie
  { /Char exch def               % 'Outsideplacechar', jedoch werden Zeichen
    /Halfangle                   % innerhalb des Kreises und gegen den Uhrzei-
    Char FindHalfangle def       % gersinn plaziert.
    gsave
    Halfangle rotate
    Radius 0 translate
    90 rotate
    Char stringwidth pop
    2 div neg 0 moveto
    Char show
    grestore
    Halfangle 2 mul rotate
  } def
  
  /Pi 3.1415923 def
end

%%EndProlog

%%Page: 1 1
/Times-Bold findfont             % Ein Schallplatten-Label wird erstellt
32 scalefont setfont

306 448 translate                % Ursprung zur Seitenmitte verschieben

(Symphonie Nr. 3 \(Eroica\))     % Den Titel auf die Aussenseite des Kreises
14 90 140 OutsideCircletext

/Times-Roman findfont
18 scalefont setfont
(Ludwig van Beethoven)           % Komponist auf Aussenseite von kleinerem Kreis
12 90 115 OutsideCircletext

(Herbert von Karajan)            % Dirigent auf Innenseite des kleineren Kreises
10 270 115 InsideCircletext

(Berliner Philharmoniker)        % Orchester auf Innenseite des groesseren Kr.
10 270 140 InsideCircletext

showpage

%%Trailer
%%Pages: 1


Vorschau:

Download PostScript-File

© Holger Gehringer, Dezember 1998