home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 05 / praxis / hpgl.pas next >
Encoding:
Pascal/Delphi Source File  |  1989-02-09  |  7.1 KB  |  205 lines

  1. (* ------------------------------------------------------ *)
  2. (*                        HPGL.PAS                        *)
  3. (*      Definition der gebräuchlichsten HPGL-Befehle      *)
  4. (*           (c) 1989  Gerd Kraus  &  TOOLBOX             *)
  5. (* ------------------------------------------------------ *)
  6. UNIT HPGL;               (* setzt die UNIT PlGraph voraus *)
  7.  
  8. INTERFACE
  9.  
  10. TYPE  strg80 = STRING[80];
  11.  
  12. CONST   (* Stiftfarben, sind wie die CRT-Farben definiert *)
  13.   Black      :BYTE =  1;  Blue         : BYTE =  1;
  14.   Green      :BYTE =  2;  Cyan         : BYTE =  3;
  15.   Red        :BYTE =  4;  Magenta      : BYTE =  5;
  16.   Brown      :BYTE =  6;  LightGray    : BYTE =  7;
  17.   DarkGray   :BYTE =  8;  LightBlue    : BYTE =  9;
  18.   LightGreen :BYTE = 10;  LightCyan    : BYTE = 11;
  19.   LightRed   :BYTE = 12;  LightMagenta : BYTE = 13;
  20.   Yellow     :BYTE = 14;  White        : BYTE = 15;
  21.  
  22. CONST  (* Linienarten, für den LINE TYPE-Befehl *)
  23.   P_UserBitLn  = 0; (* benutzerdefiniert                  *)
  24.   P_DottedLn   = 1; (* gepunktet                          *)
  25.   P_DashedLn   = 2; (* gestrichelt                        *)
  26.   P_LgDashedLn = 3; (* gestrichelt,
  27.                         längere Striche, kürzere Abstände *)
  28.   P_CenterLn   = 4; (* Strich-Punkt-Strich                *)
  29.   P_L1CenterLn = 5; (* Strich/lang-Strich/
  30.                         kurz-Strich/lang                  *)
  31.   P_L2CenterLn = 6; (* Strich/lang-Strich/kurz-Strich/
  32.                         kurz-Strich/lang                  *)
  33.   P_NormalLn   = 7; (* gewöhnliche Linie                  *)
  34.  
  35. CONST
  36.   P_NormStep    = 3;   (* die Wiederholschrittweite für
  37.                                             den LT-Befehl *)
  38.   P_DefaultFont = 0;   (* der Zeichensatz                 *)
  39.   P_FontSize    = 2;   (* die Grösse des Zeichensatzes    *)
  40.   P_HorizDir    = 0;   (* Text von links nach rechts      *)
  41.   P_VertDir     = 1;   (* Text von unten nach oben        *)
  42.  
  43. VAR
  44.   OldExitProc     : POINTER;
  45.   Xaxmin, Xaxmax,
  46.   Yaxmin, Yaxmax  : REAL;                   (* für USCALE *)
  47.   Uaxmin, Uaxmax,
  48.   Vaxmin, Vaxmax  : INTEGER;         (* für Graphikwindow *)
  49.  
  50. CONST  Komma = ',';                   (* HPGL-Trennbefehl *)
  51.        Ende  = ';';                   (* HPGL-Befehlsende *)
  52.  
  53. VAR    Plot        : TEXT;
  54.        PFaktor     : INTEGER;
  55.        MaxColors   : BYTE;
  56.  
  57. PROCEDURE OpenGraphik(PlotName : strg80);
  58. PROCEDURE P_Line(X1, Y1, X2, Y2 : REAL);
  59. PROCEDURE P_LineTo(X, Y : REAL);
  60. PROCEDURE P_LineRel(X, Y : REAL);
  61. PROCEDURE P_MoveTo(X, Y : REAL);
  62. PROCEDURE P_SetColor(Farbe : BYTE);
  63. PROCEDURE P_PutPixel(X, Y : REAL; Farbe : BYTE);
  64. PROCEDURE P_Rectangle(X1, Y1, X2, Y2 : REAL);
  65. PROCEDURE P_SetLineStyle(Art, Pattern, Dicke : WORD);
  66. PROCEDURE P_SetViewPort(X1, Y1, X2, Y2 : WORD;
  67.                         Clip : BOOLEAN);
  68. PROCEDURE P_SetTextStyle(Font, Dir : INTEGER; Size : REAL);
  69. PROCEDURE P_OutTextXY(X, Y : INTEGER;  TEXT : strg80);
  70. PROCEDURE CloseGraphik;
  71.  
  72. IMPLEMENTATION
  73.  
  74. PROCEDURE OpenGraphik(PlotName : strg80);
  75. (* PlotName : 'PRN' für direkte Ausgabe via Centronics    *)
  76. (*            'name.ext' für Datei                        *)
  77. BEGIN
  78.   OldExitProc := ExitProc;  ExitProc := Addr(CloseGraphik);
  79.   Assign(Plot, PlotName);
  80.   Rewrite(Plot);
  81.   Write(Plot, 'IN;');
  82.              (* Bitte an den jeweiligen Plotter anpassen: *)
  83.   Uaxmax  := 403;  Vaxmax := 276;   (* max. Blattgrösse   *)
  84.   PFaktor :=  40;                   (* Plotterschritte    *)
  85.   MaxColors := 8;                   (* max. PlotterFarben *)
  86. END;
  87.  
  88. PROCEDURE P_Line(X1, Y1, X2, Y2 : REAL);
  89. BEGIN
  90.   X1 := PFaktor * X1;  Y1 := PFaktor * Y1;
  91.   X2 := PFaktor * X2;  Y2 := PFaktor * Y2;
  92.   WriteLn(Plot, 'PU', Round(X1), Komma, Round(Y1), Ende);
  93.   WriteLn(Plot, 'PD', Round(X1), Komma, Round(Y1), Komma,
  94.               Round(X2), Komma, Round(Y2), Ende);
  95. END;
  96.  
  97. PROCEDURE P_LineTo(X, Y : REAL);
  98. BEGIN
  99.   X := PFaktor * X;  Y := PFaktor * Y;
  100.   Write(Plot, 'PD', Ende);
  101.   WriteLn(Plot, 'PA', Round(X), Komma, Round(Y), Ende);
  102. END;
  103.  
  104. PROCEDURE P_LineRel(X, Y : REAL);
  105. BEGIN
  106.   X := PFaktor * X;  Y := PFaktor * Y;
  107.   Write(Plot, 'PD', Ende);
  108.   WriteLn(Plot, 'PR', Round(X), Komma, Round(Y), Ende);
  109.   Write(Plot, 'PA', Ende);        (* absolute Koordinaten *)
  110. END;
  111.  
  112. PROCEDURE P_MoveTo(X, Y : REAL);
  113. BEGIN
  114.   X := PFaktor * X;  Y := PFaktor * Y;
  115.   WriteLn(Plot, 'PU', Round(X), Komma, Round(Y), Ende);
  116. END;
  117.  
  118. PROCEDURE P_SetColor(Farbe : BYTE);
  119. BEGIN
  120.   Farbe := (Farbe MOD Succ(MaxColors));
  121.   WriteLn(Plot, 'SP', Farbe, Ende)
  122. END;
  123.  
  124. PROCEDURE P_PutPixel (X, Y : REAL; Farbe : BYTE);
  125.             (* markiert angegebene Punkte mit einem Kreuz *)
  126. CONST   Rad   = 25;
  127.     LStep = 1;
  128. BEGIN
  129.   P_SetColor(Farbe);
  130.   P_MoveTo(X, Y - 1);  P_LineRel(0, 2);
  131.   P_MoveTo(X - 1, Y);  P_LineRel(2, 0);
  132.  
  133.   (* Variante 1 : Kreis --> zu langsam !                  *)
  134.   (* P_MoveTo(X, Y);   WRITELN(Plot, 'CI', Rad, Ende);    *)
  135.   (* Variante 2 : mit Line                                *)
  136.   (* P_Line(X, Y - LStep, X , Y + LStep);                 *)
  137.   (* P_Line(X - LStep, Y, X + LStep, Y);                  *)
  138. END;
  139.  
  140. PROCEDURE P_Rectangle(X1, Y1, X2, Y2 : REAL);
  141. BEGIN
  142.   X2 := PFaktor * X2;  Y2 := PFaktor * Y2;
  143.   P_MoveTo(X1, Y1);
  144.   WriteLn(Plot, 'RA', Round(X2), Komma, Round(Y2), Ende);
  145. END;
  146.  
  147. PROCEDURE P_SetLineStyle(Art, Pattern, Dicke : WORD);
  148. (* Dicke   : in dieser Version noch nicht implementiert   *)
  149. (* Pattern : Wiederholschrittlänge, Vorschlag: 2 oder 3   *)
  150. BEGIN
  151.   IF Art IN [0..6] THEN
  152.     WriteLn(Plot, 'LT', Art, Komma, Pattern, Ende)
  153.   ELSE
  154.     WriteLn(Plot, 'DF', Ende);
  155.   (* 'normale' Linie ist nicht definiert, also Plotter    *)
  156.   (* initialisieren! 'IN' ergibt Probleme, wenn der HPGL- *)
  157.   (* Skalierungsbefehl SC benutzt wird. 'DF' versetzt den *)
  158.   (* Plotter wieder in den Normalzustand, ohne die defi-  *)
  159.   (* nierte Skalierung zu verändern.                      *)
  160. END;
  161.  
  162. PROCEDURE P_SetViewPort(X1, Y1, X2, Y2 : WORD;
  163.                         Clip           : BOOLEAN);
  164.                        (* wird für PlGraph nicht benötigt *)
  165. BEGIN
  166.   X1 := PFaktor * X1;  Y1 := PFaktor * Y1;
  167.   X2 := PFaktor * X2;  Y2 := PFaktor * Y2;
  168.   WriteLn(Plot, 'IW', Round(X1), Komma, Round(Y1), Komma,
  169.                       Round(X2), Komma, Round(Y2), Ende);
  170. END;
  171.  
  172. PROCEDURE P_SetTextStyle(Font, Dir : INTEGER; Size : REAL);
  173.            (* Dir :   0 = Horizontal  --  1 = Vertikal    *)
  174.            (* nur diese beiden Richtungen werden gesetzt. *)
  175. BEGIN
  176.   Write(Plot, 'CS', Font, Ende);           (* Zeichensatz *)
  177.   CASE Dir OF 0 : Write(Plot, 'DI1,0', Ende)
  178.       ELSE    Write(Plot, 'DI0,1', Ende);
  179.   END;
  180.                                            (* Textgröße   *)
  181.   WriteLn(Plot, 'SI', 0.5*Size:1:3, Komma, Size:1:3, Ende);
  182.              (* ^ Kompatibilität mit PGRAPH       *)
  183. END;
  184.  
  185. PROCEDURE P_OutTextXY(X, Y : INTEGER; TEXT : strg80);
  186. BEGIN
  187.   P_MoveTo(X, Y);
  188.   P_SetColor(1);
  189.   WriteLn(Plot, 'LB', TEXT, Chr(3), Ende);
  190. END;
  191.  
  192. {$F+}
  193. PROCEDURE CloseGraphik;
  194. BEGIN
  195.   P_SetColor(Black);  WriteLn(Plot, 'PU0,0;');
  196.   WriteLn(Plot);
  197.   Close(Plot);
  198.   ExitProc := OldExitProc;
  199. END;
  200. {$F-}
  201. END.
  202. (* ------------------------------------------------------ *)
  203. (*                  Ende von HPGL.PAS                     *)
  204.  
  205.