home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* HPGL.PAS *)
- (* Definition der gebräuchlichsten HPGL-Befehle *)
- (* (c) 1989 Gerd Kraus & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT HPGL; (* setzt die UNIT PlGraph voraus *)
-
- INTERFACE
-
- TYPE strg80 = STRING[80];
-
- CONST (* Stiftfarben, sind wie die CRT-Farben definiert *)
- Black :BYTE = 1; Blue : BYTE = 1;
- Green :BYTE = 2; Cyan : BYTE = 3;
- Red :BYTE = 4; Magenta : BYTE = 5;
- Brown :BYTE = 6; LightGray : BYTE = 7;
- DarkGray :BYTE = 8; LightBlue : BYTE = 9;
- LightGreen :BYTE = 10; LightCyan : BYTE = 11;
- LightRed :BYTE = 12; LightMagenta : BYTE = 13;
- Yellow :BYTE = 14; White : BYTE = 15;
-
- CONST (* Linienarten, für den LINE TYPE-Befehl *)
- P_UserBitLn = 0; (* benutzerdefiniert *)
- P_DottedLn = 1; (* gepunktet *)
- P_DashedLn = 2; (* gestrichelt *)
- P_LgDashedLn = 3; (* gestrichelt,
- längere Striche, kürzere Abstände *)
- P_CenterLn = 4; (* Strich-Punkt-Strich *)
- P_L1CenterLn = 5; (* Strich/lang-Strich/
- kurz-Strich/lang *)
- P_L2CenterLn = 6; (* Strich/lang-Strich/kurz-Strich/
- kurz-Strich/lang *)
- P_NormalLn = 7; (* gewöhnliche Linie *)
-
- CONST
- P_NormStep = 3; (* die Wiederholschrittweite für
- den LT-Befehl *)
- P_DefaultFont = 0; (* der Zeichensatz *)
- P_FontSize = 2; (* die Grösse des Zeichensatzes *)
- P_HorizDir = 0; (* Text von links nach rechts *)
- P_VertDir = 1; (* Text von unten nach oben *)
-
- VAR
- OldExitProc : POINTER;
- Xaxmin, Xaxmax,
- Yaxmin, Yaxmax : REAL; (* für USCALE *)
- Uaxmin, Uaxmax,
- Vaxmin, Vaxmax : INTEGER; (* für Graphikwindow *)
-
- CONST Komma = ','; (* HPGL-Trennbefehl *)
- Ende = ';'; (* HPGL-Befehlsende *)
-
- VAR Plot : TEXT;
- PFaktor : INTEGER;
- MaxColors : BYTE;
-
- PROCEDURE OpenGraphik(PlotName : strg80);
- PROCEDURE P_Line(X1, Y1, X2, Y2 : REAL);
- PROCEDURE P_LineTo(X, Y : REAL);
- PROCEDURE P_LineRel(X, Y : REAL);
- PROCEDURE P_MoveTo(X, Y : REAL);
- PROCEDURE P_SetColor(Farbe : BYTE);
- PROCEDURE P_PutPixel(X, Y : REAL; Farbe : BYTE);
- PROCEDURE P_Rectangle(X1, Y1, X2, Y2 : REAL);
- PROCEDURE P_SetLineStyle(Art, Pattern, Dicke : WORD);
- PROCEDURE P_SetViewPort(X1, Y1, X2, Y2 : WORD;
- Clip : BOOLEAN);
- PROCEDURE P_SetTextStyle(Font, Dir : INTEGER; Size : REAL);
- PROCEDURE P_OutTextXY(X, Y : INTEGER; TEXT : strg80);
- PROCEDURE CloseGraphik;
-
- IMPLEMENTATION
-
- PROCEDURE OpenGraphik(PlotName : strg80);
- (* PlotName : 'PRN' für direkte Ausgabe via Centronics *)
- (* 'name.ext' für Datei *)
- BEGIN
- OldExitProc := ExitProc; ExitProc := Addr(CloseGraphik);
- Assign(Plot, PlotName);
- Rewrite(Plot);
- Write(Plot, 'IN;');
- (* Bitte an den jeweiligen Plotter anpassen: *)
- Uaxmax := 403; Vaxmax := 276; (* max. Blattgrösse *)
- PFaktor := 40; (* Plotterschritte *)
- MaxColors := 8; (* max. PlotterFarben *)
- END;
-
- PROCEDURE P_Line(X1, Y1, X2, Y2 : REAL);
- BEGIN
- X1 := PFaktor * X1; Y1 := PFaktor * Y1;
- X2 := PFaktor * X2; Y2 := PFaktor * Y2;
- WriteLn(Plot, 'PU', Round(X1), Komma, Round(Y1), Ende);
- WriteLn(Plot, 'PD', Round(X1), Komma, Round(Y1), Komma,
- Round(X2), Komma, Round(Y2), Ende);
- END;
-
- PROCEDURE P_LineTo(X, Y : REAL);
- BEGIN
- X := PFaktor * X; Y := PFaktor * Y;
- Write(Plot, 'PD', Ende);
- WriteLn(Plot, 'PA', Round(X), Komma, Round(Y), Ende);
- END;
-
- PROCEDURE P_LineRel(X, Y : REAL);
- BEGIN
- X := PFaktor * X; Y := PFaktor * Y;
- Write(Plot, 'PD', Ende);
- WriteLn(Plot, 'PR', Round(X), Komma, Round(Y), Ende);
- Write(Plot, 'PA', Ende); (* absolute Koordinaten *)
- END;
-
- PROCEDURE P_MoveTo(X, Y : REAL);
- BEGIN
- X := PFaktor * X; Y := PFaktor * Y;
- WriteLn(Plot, 'PU', Round(X), Komma, Round(Y), Ende);
- END;
-
- PROCEDURE P_SetColor(Farbe : BYTE);
- BEGIN
- Farbe := (Farbe MOD Succ(MaxColors));
- WriteLn(Plot, 'SP', Farbe, Ende)
- END;
-
- PROCEDURE P_PutPixel (X, Y : REAL; Farbe : BYTE);
- (* markiert angegebene Punkte mit einem Kreuz *)
- CONST Rad = 25;
- LStep = 1;
- BEGIN
- P_SetColor(Farbe);
- P_MoveTo(X, Y - 1); P_LineRel(0, 2);
- P_MoveTo(X - 1, Y); P_LineRel(2, 0);
-
- (* Variante 1 : Kreis --> zu langsam ! *)
- (* P_MoveTo(X, Y); WRITELN(Plot, 'CI', Rad, Ende); *)
- (* Variante 2 : mit Line *)
- (* P_Line(X, Y - LStep, X , Y + LStep); *)
- (* P_Line(X - LStep, Y, X + LStep, Y); *)
- END;
-
- PROCEDURE P_Rectangle(X1, Y1, X2, Y2 : REAL);
- BEGIN
- X2 := PFaktor * X2; Y2 := PFaktor * Y2;
- P_MoveTo(X1, Y1);
- WriteLn(Plot, 'RA', Round(X2), Komma, Round(Y2), Ende);
- END;
-
- PROCEDURE P_SetLineStyle(Art, Pattern, Dicke : WORD);
- (* Dicke : in dieser Version noch nicht implementiert *)
- (* Pattern : Wiederholschrittlänge, Vorschlag: 2 oder 3 *)
- BEGIN
- IF Art IN [0..6] THEN
- WriteLn(Plot, 'LT', Art, Komma, Pattern, Ende)
- ELSE
- WriteLn(Plot, 'DF', Ende);
- (* 'normale' Linie ist nicht definiert, also Plotter *)
- (* initialisieren! 'IN' ergibt Probleme, wenn der HPGL- *)
- (* Skalierungsbefehl SC benutzt wird. 'DF' versetzt den *)
- (* Plotter wieder in den Normalzustand, ohne die defi- *)
- (* nierte Skalierung zu verändern. *)
- END;
-
- PROCEDURE P_SetViewPort(X1, Y1, X2, Y2 : WORD;
- Clip : BOOLEAN);
- (* wird für PlGraph nicht benötigt *)
- BEGIN
- X1 := PFaktor * X1; Y1 := PFaktor * Y1;
- X2 := PFaktor * X2; Y2 := PFaktor * Y2;
- WriteLn(Plot, 'IW', Round(X1), Komma, Round(Y1), Komma,
- Round(X2), Komma, Round(Y2), Ende);
- END;
-
- PROCEDURE P_SetTextStyle(Font, Dir : INTEGER; Size : REAL);
- (* Dir : 0 = Horizontal -- 1 = Vertikal *)
- (* nur diese beiden Richtungen werden gesetzt. *)
- BEGIN
- Write(Plot, 'CS', Font, Ende); (* Zeichensatz *)
- CASE Dir OF 0 : Write(Plot, 'DI1,0', Ende)
- ELSE Write(Plot, 'DI0,1', Ende);
- END;
- (* Textgröße *)
- WriteLn(Plot, 'SI', 0.5*Size:1:3, Komma, Size:1:3, Ende);
- (* ^ Kompatibilität mit PGRAPH *)
- END;
-
- PROCEDURE P_OutTextXY(X, Y : INTEGER; TEXT : strg80);
- BEGIN
- P_MoveTo(X, Y);
- P_SetColor(1);
- WriteLn(Plot, 'LB', TEXT, Chr(3), Ende);
- END;
-
- {$F+}
- PROCEDURE CloseGraphik;
- BEGIN
- P_SetColor(Black); WriteLn(Plot, 'PU0,0;');
- WriteLn(Plot);
- Close(Plot);
- ExitProc := OldExitProc;
- END;
- {$F-}
- END.
- (* ------------------------------------------------------ *)
- (* Ende von HPGL.PAS *)
-
-