home *** CD-ROM | disk | FTP | other *** search
- ' HPGL.INC
- ' definiert die gebräuchlichsten HPGL-Befehle
- ' weitere HPGL-Befehle werden in den nächsten Versionen implementiert
- ' Compiler : Turbo-Basic 1.00.e
- ' Pgm.Vers.: 1.0.f
- ' Stand : 24.03.89
- ' 1:1-Version der TP5.0-UNIT HPGL.PAS
- ' die Datenausgabe erfolgt entweder direkt via Centronics ('LPT1:') oder
- ' in eine beliebige Datei
- ' zug. Datenfile : PLOTTER.DAT - enthält die hardwareabh. Werte
-
- ' Stiftfarben
- %Black = 1 : %Blue = 1 : %Green=2 : %Cyan = 3
- %Red = 4 : %Magenta = 5 : %Brown = 6 : %LightGray = 7
- %DarkGray = 8 : %LightBlue = 9 : %LightGreen = 10 : %LightCyan = 11
- %LightRed = 12 : %LightMagenta = 13 : %Yellow = 14 : %White = 15
-
- ' Linienarten, für den LINE TYPE-Befehl
- %P.UserBitLn = 0 ' benutzerdefiniert
- %P.DottedLn = 1 ' gepunktet
- %P.DashedLn = 2 ' gestrichelt
- %P.LgDashedLn = 3 ' gestrichelt, aber längere Striche, dafür 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
-
- ' Schraffurarten, für den FILL STYLE-Befehl
- %P.SolidFill = 1 ' voll Ausfüllen in beiden Richtungen
- %P.SolidFillUni = 2 ' voll Ausfüllen in einer Richtungen
- %P.LineFill = 3 ' Parallelschraffur
- %P.XHatchFill = 4 ' Gitterschraffur
-
- P.NormStep% = 3 ' die Wiederholschrittweite für den LT-Befehl
- P.DefaultFont% = 0 ' der Zeichensatz
- P.FontSize% = 2 ' die Grösse des Zeichensatzes (in cm !!)
- %P.HorizDir = 0 ' Text von links nach rechts
- %P.VertDir = 1 ' Text von unten nach oben
-
- ' Zeichensätze
- %ANSI = 0 : %JIS = 6 : %Katakana = 8
- %ISO = 9 : %Swed1 = 30 : %Swed2 = 31
- %Norw1 = 32 : %Germ = 33 : %Franz = 34
- %UK = 35 : %Ital = 36 : %Span = 37
- %Port = 38 : %Norw2 = 39
-
- ' Xaxmin%, Xaxmax% ,Yaxmin% ,Yaxmax% ' fuer USCALE
- ' Uaxmin%, Uaxmax%, Vaxmin%, Vaxmax% ' fuer Graphikwindow
- '-----------------------------------------------
- Komma$ = "," ' HPGL-Trennbefehl
- Ende$ = ";" ' HPGL-Befehlsende
- '-----------------------------------------------
- SUB DatenLesen
- SHARED UaXMax%, VaXMax%, PFaktor%, MaxColors%,_
- XLi%, XRe%, YOb%, YUn%
-
- ' PLOTTER.DAT ist ein 8-zeiliges ASCII-File, das mit einem beliebigem
- ' Text-Editor modifiziert werden kann.
- ' Die verwendeten Standardwerte für einen DIN A3-Plotter sind in der
- ' PRC OpenGraphik auskommentiert
- ' Anwendung : vgl. Pascal-Pgm. PlGraph
-
- OPEN "Plotter.Dat" FOR INPUT AS #2
- INPUT #2, UaXMax%
- INPUT #2, VaXMax%
- INPUT #2, PFaktor%
- INPUT #2, MaxColors%
- INPUT #2, XLi%
- INPUT #2, XRe%
- INPUT #2, YOb%
- INPUT #2, YUn%
- CLOSE #2
- END SUB
- '-----------------------------------------------
- SUB OpenGraphik (PlotName$)
- ' PlotName$ : "LPT1:" für direkte Ausgabe via Centronics
- ' "name.ext" für Datei
-
- OPEN PlotName$ FOR OUTPUT AS #1
- PRINT #1, "IN;"
-
- ' die folgenden 3 Zeilen sind an den jeweiligen Plotter anzupassen !
- ' siehe Datei PLOTTER.DAT !!!
- ' %UaxMax = 403 : %VaxMax = 276 ' max. Blattgrösse in mm
- ' %PFaktor = 40 ' Plotterschritte
- ' %MaxColors = 8 ' max. Anzahl PlotterFarben
-
- CALL DatenLesen
- END SUB
- '-----------------------------------------------
- DEF FNWert% (Koord)
- SHARED PFaktor%
- FnWert% = INT (PFaktor% * Koord)
- END DEF
- '-----------------------------------------------
- SUB P.Line (X1, Y1, X2, Y2)
- SHARED Ende$, Komma$
-
- X1% = FnWert% (X1)
- Y1% = FnWert% (Y1)
- X2% = FnWert% (X2)
- Y2% = FnWert% (Y2)
- PRINT #1, "PU"; X1%; Komma$; Y1%; Ende$
- PRINT #1, "PD"; X1%; Komma$; Y1%; Komma$; X2%; Komma$; Y2%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.LineTo (X, Y)
- SHARED Ende$, Komma$
-
- X% = FnWert% (X)
- Y% = FnWert% (Y)
- PRINT #1, "PD"; Ende$
- PRINT #1, "PA"; X%; Komma$; Y%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.LineRel (X, Y)
- SHARED Ende$, Komma$
-
- X% = FnWert% (X)
- Y% = FnWert% (Y)
- PRINT #1, "PD"; Ende$
- PRINT #1, "PR"; X%; Komma$; Y%; Ende$
- PRINT #1, "PA"; Ende$ ' wieder mit absoluten Koordinaten zeichnen !
- END SUB
- '----------------------------------------------------
- SUB P.MoveTo (X, Y)
- SHARED Ende$, Komma$
-
- X% = FnWert% (X)
- Y% = FnWert% (Y)
- PRINT #1, "PU"; X%; Komma$; Y%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.SetColor (Farbe%)
- SHARED Ende$, Komma$, MaxColors%
-
- Farbe% = (Farbe% MOD (MaxColors% + 1))
- PRINT #1, "SP"; Farbe%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.PutPixel (X, Y, Farbe%)
- SHARED Ende$, Komma$
-
- CALL P.SetColor (Farbe%)
- X% = FnWert% (X)
- Y% = FnWert% (Y)
- PRINT #1, "PU"; X%; Komma$; Y%; Ende$
- PRINT #1, "PD"; X%; Komma$; Y%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.Mark (X, Y, Farbe%)
- ' markiert angegebene Punkte mit einem Kreuz
- SHARED Ende$, Komma$
-
- CALL P.SetColor (Farbe%)
- CALL P.MoveTo (X, Y - 1) : CALL P.LineRel (0, 2)
- CALL P.MoveTo (X - 1, Y) : CALL P.LineRel (2, 0)
-
- END SUB
- '----------------------------------------------------
- SUB P.Rectangle (X1, Y1, X2, Y2)
- SHARED Ende$, Komma$
-
- X2% = FnWert% (X2)
- Y2% = FnWert% (Y2)
- CALL P.MoveTo (X1, Y1)
- PRINT #1, "EA"; X2%; Komma$; Y2%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.Bar (X1, Y1, X2, Y2)
- SHARED Ende$, Komma$
-
- X2% = FnWert% (X2)
- Y2% = FnWert% (Y2)
- CALL P.MoveTo (X1, Y1)
- PRINT #1, "RA"; X2%; Komma$; Y2%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.Circle (Rad, Aufl)
- SHARED Ende$, Komma$
-
- Rad% = FnWert% (Rad)
- PRINT #1, "CI"; Rad%; Komma$; INT (Aufl); Ende$
- END SUB
- '----------------------------------------------------
- SUB P.Arc (X, Y, Winkel, Aufl)
- ' Beachten : Start an der Stiftposition ( = Bogenendpunkt) !
- ' X, Y sind die Koordinaten des Mittelpunktes !
- SHARED Ende$, Komma$
-
- X% = FnWert% (X)
- Y% = FnWert% (Y)
- PRINT #1, "AA"; X%; Komma$; Y%; Komma$;_
- INT (Winkel); Komma$; INT (Aufl); Ende$
- END SUB
- '----------------------------------------------------
- SUB P.Pie (Rad, StartWinkel, SegmentWinkel, Aufl)
- ' zeichnet ein Kuchenstück
- SHARED Ende$, Komma$
-
- Rad% = FnWert% (Rad)
- PRINT #1, "EW"; Rad%; Komma$; INT (StartWinkel); Komma$;_
- INT (SegmentWinkel); Komma$; INT (Aufl); Ende$
- END SUB
- '----------------------------------------------------
- SUB P.PieSlice (Rad, StartWinkel, SegmentWinkel, Aufl)
- ' zeichnet ein ausgefülltes Kuchenstück
- SHARED Ende$, Komma$
-
- Rad% = FnWert% (Rad)
- PRINT #1, "WG"; Rad%; Komma$; INT (StartWinkel); Komma$;_
- INT (SegmentWinkel); Komma$; INT (Aufl); Ende$
- END SUB
- '----------------------------------------------------
- SUB P.SetLineStyle (Art%, Pattern%, Dicke%)
- ' Dicke : Strichbreite / in dieser Version noch nicht implementiert !
- ' Pattern : Wiederholschrittlänge, 2 oder 3 ergeben recht gefällige Linien
- SHARED Ende$, Komma$
-
- SELECT CASE Art%
- CASE 0 TO 6
- PRINT #1, "LT"; Art%; Komma$; Pattern%; Ende$
- CASE ELSE
- PRINT #1, "DF"; Ende$
- END SELECT
- ' die '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 definierte
- ' Skalierung zu verändern !
- END SUB
- '----------------------------------------------------
- SUB P.SetLineWidth (Breite)
- SHARED Ende$, Komma$
-
- IF (Breite > 0.1) AND (Breite < 5.0) THEN PRINT #1, "PT"; Breite; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.SetFillStyle (Typ%, Abstand%, Winkel%)
- ' Typ% : 1 .. 4
- ' Abstand : .. der Linien bei Parallel- und Gitterschraffur
- ' in Plottersteps ! z.B. Abstand 120 = 3 mm
- ' Winkel : Schraffurneigung, von der Horiz. ausgehend in 45-Grad-Steps
- ' 0 = horizontale, 90 = vertikale Schraffur
- ' lt. Plotter-Handbuch sollte der Typ "5" keine Schraffur zeichnen, mein
- ' Plotter schraffiert aber trotzdem mit der zuletzt gewählten Einstellung !
-
- SHARED Ende$, Komma$
-
- IF (Typ% >1) AND (Typ% < 4) THEN_
- PRINT #1, "FT"; Typ%; Komma$; Abstand%; Komma$; Winkel%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.SetViewPort (X1, Y1, X2, Y2, Clip%)
- ' Clip% ist nicht implementiert !
- SHARED Ende$, Komma$
-
- X1% = FnWert% (X1)
- Y1% = FnWert% (Y1)
- X2% = FnWert% (X2)
- Y2% = FnWert% (Y2)
- PRINT #1, "IW"; X1%; Komma$; Y1%; Komma$; X2%; Komma$; Y2%; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.SetTextSlant (Tangens)
- ' Textneigungswinkel
- SHARED Ende$, Komma$
-
- PRINT #1, "SL"; Tangens; Ende$
- END SUB
- '----------------------------------------------------
- SUB P.SetTextStyle (Font%, Dir%, Size)
- ' Dir : 0 = Horizontal -- 1 = Vertikal
- ' nur diese beiden Richtungen werden gesetzt !
- SHARED Ende$, Komma$
-
- PRINT #1, "CS"; Font; Ende$ ' Zeichensatz
- SELECT CASE Dir%
- CASE 0 : PRINT #1, "DI1,0"; Ende$ ' horizontal
- CASE ELSE : PRINT #1, "DI0,1"; Ende$ ' vertikal
- END SELECT
- ' Textgrösse
- PRINT #1, "SI"; 0.5 * Size; Komma$; Size; Ende$
- ' ^ Faktor zur Kompatibilität mit PGraph !
- END SUB
- '----------------------------------------------------
- SUB P.OutTextXY (X, Y, Text$)
- SHARED Ende$, Komma$
-
- CALL P.MoveTo (X, Y)
- PRINT #1, "LB"; Text$; CHR$ (3); Ende$
- END SUB
- '----------------------------------------------------
- SUB CloseGraphik
- SHARED Ende$, Komma$
-
- CALL P.SetColor (%Black) : PRINT #1, "PU0,0;"
- PRINT #1, ""
- CLOSE #1
- END SUB
- '-----------------------------------------------