home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 09 / hpgl / hpgl.inc next >
Encoding:
Text File  |  1989-03-24  |  9.8 KB  |  301 lines

  1. ' HPGL.INC
  2. ' definiert die gebräuchlichsten HPGL-Befehle
  3. ' weitere HPGL-Befehle werden in den nächsten Versionen implementiert
  4. ' Compiler : Turbo-Basic 1.00.e
  5. ' Pgm.Vers.: 1.0.f
  6. ' Stand    : 24.03.89
  7. ' 1:1-Version der TP5.0-UNIT HPGL.PAS
  8. ' die Datenausgabe erfolgt entweder direkt via Centronics ('LPT1:') oder
  9. '   in eine beliebige Datei
  10. ' zug. Datenfile : PLOTTER.DAT - enthält die hardwareabh. Werte
  11.  
  12. ' Stiftfarben
  13.   %Black = 1     : %Blue = 1          : %Green=2         : %Cyan = 3
  14.   %Red = 4       : %Magenta = 5       : %Brown = 6       : %LightGray = 7
  15.   %DarkGray = 8  : %LightBlue = 9     : %LightGreen = 10 : %LightCyan = 11
  16.   %LightRed = 12 : %LightMagenta = 13 : %Yellow = 14     : %White = 15
  17.  
  18. ' Linienarten, für den LINE TYPE-Befehl
  19.   %P.UserBitLn  = 0 ' benutzerdefiniert
  20.   %P.DottedLn   = 1 ' gepunktet
  21.   %P.DashedLn   = 2 ' gestrichelt
  22.   %P.LgDashedLn = 3 ' gestrichelt, aber längere Striche, dafür kürzere Abstände
  23.   %P.CenterLn   = 4 ' Strich-Punkt-Strich
  24.   %P.L1CenterLn = 5 ' Strich/lang-Strich/kurz-Strich/lang *)
  25.   %P.L2CenterLn = 6 ' Strich/lang-Strich/kurz-Strich/kurz-Strich/lang
  26.   %P.NormalLn   = 7 ' gewöhnliche Linie
  27.  
  28. ' Schraffurarten, für den FILL STYLE-Befehl
  29.   %P.SolidFill    = 1  ' voll Ausfüllen in beiden Richtungen
  30.   %P.SolidFillUni = 2  ' voll Ausfüllen in einer Richtungen
  31.   %P.LineFill     = 3  ' Parallelschraffur
  32.   %P.XHatchFill   = 4  ' Gitterschraffur
  33.  
  34.   P.NormStep% = 3      ' die Wiederholschrittweite für den LT-Befehl
  35.   P.DefaultFont% = 0   ' der Zeichensatz
  36.   P.FontSize% = 2      ' die Grösse des Zeichensatzes  (in cm !!)
  37.   %P.HorizDir = 0      ' Text von links nach rechts
  38.   %P.VertDir = 1       ' Text von unten nach oben
  39.  
  40. ' Zeichensätze
  41.    %ANSI  = 0   :  %JIS   = 6  :   %Katakana = 8
  42.    %ISO   = 9   :  %Swed1 = 30 :   %Swed2    = 31
  43.    %Norw1 = 32  :  %Germ  = 33 :   %Franz    = 34
  44.    %UK    = 35  :  %Ital  = 36 :   %Span     = 37
  45.    %Port  = 38  :  %Norw2 = 39
  46.  
  47. '  Xaxmin%, Xaxmax% ,Yaxmin% ,Yaxmax%           ' fuer USCALE
  48. '  Uaxmin%, Uaxmax%, Vaxmin%, Vaxmax%       ' fuer Graphikwindow
  49. '-----------------------------------------------
  50.   Komma$ = ","            ' HPGL-Trennbefehl
  51.   Ende$  = ";"            ' HPGL-Befehlsende
  52. '-----------------------------------------------
  53. SUB DatenLesen
  54. SHARED UaXMax%, VaXMax%, PFaktor%, MaxColors%,_
  55.        XLi%, XRe%, YOb%, YUn%
  56.  
  57. '  PLOTTER.DAT ist ein 8-zeiliges ASCII-File, das mit einem beliebigem
  58. '   Text-Editor modifiziert werden kann.
  59. '   Die verwendeten Standardwerte für einen DIN A3-Plotter sind in der
  60. '   PRC OpenGraphik auskommentiert
  61. '   Anwendung : vgl. Pascal-Pgm. PlGraph
  62.  
  63.  OPEN "Plotter.Dat" FOR INPUT AS #2
  64.     INPUT #2, UaXMax%
  65.     INPUT #2, VaXMax%
  66.     INPUT #2, PFaktor%
  67.     INPUT #2, MaxColors%
  68.     INPUT #2, XLi%
  69.     INPUT #2, XRe%
  70.     INPUT #2, YOb%
  71.     INPUT #2, YUn%
  72.   CLOSE #2
  73. END SUB
  74. '-----------------------------------------------
  75. SUB OpenGraphik  (PlotName$)
  76. ' PlotName$ : "LPT1:" für direkte Ausgabe via Centronics
  77. '             "name.ext" für Datei
  78.  
  79.   OPEN PlotName$ FOR OUTPUT AS #1
  80.   PRINT #1, "IN;"
  81.  
  82.   ' die folgenden 3 Zeilen sind an den jeweiligen Plotter anzupassen !
  83.   ' siehe Datei PLOTTER.DAT  !!!
  84.   ' %UaxMax = 403 : %VaxMax = 276    ' max. Blattgrösse in mm
  85.   ' %PFaktor = 40                    ' Plotterschritte
  86.   ' %MaxColors = 8                   ' max. Anzahl PlotterFarben
  87.  
  88.   CALL DatenLesen
  89. END SUB
  90. '-----------------------------------------------
  91. DEF FNWert% (Koord)
  92. SHARED PFaktor%
  93.  FnWert% = INT (PFaktor% * Koord)
  94. END DEF
  95. '-----------------------------------------------
  96. SUB P.Line (X1, Y1, X2, Y2)
  97. SHARED Ende$, Komma$
  98.  
  99.   X1% = FnWert% (X1)
  100.   Y1% = FnWert% (Y1)
  101.   X2% = FnWert% (X2)
  102.   Y2% = FnWert% (Y2)
  103.   PRINT #1, "PU"; X1%; Komma$; Y1%; Ende$
  104.   PRINT #1, "PD"; X1%; Komma$; Y1%; Komma$; X2%; Komma$; Y2%; Ende$
  105. END SUB
  106. '----------------------------------------------------
  107. SUB P.LineTo (X, Y)
  108. SHARED Ende$, Komma$
  109.  
  110.   X% = FnWert% (X)
  111.   Y% = FnWert% (Y)
  112.   PRINT #1, "PD"; Ende$
  113.   PRINT #1, "PA"; X%; Komma$; Y%; Ende$
  114. END SUB
  115. '----------------------------------------------------
  116. SUB P.LineRel (X, Y)
  117. SHARED Ende$, Komma$
  118.  
  119.   X% = FnWert% (X)
  120.   Y% = FnWert% (Y)
  121.   PRINT #1, "PD"; Ende$
  122.   PRINT #1, "PR"; X%; Komma$; Y%; Ende$
  123.   PRINT #1, "PA"; Ende$  ' wieder mit absoluten Koordinaten zeichnen !
  124. END SUB
  125. '----------------------------------------------------
  126. SUB P.MoveTo (X, Y)
  127. SHARED Ende$, Komma$
  128.  
  129.   X% = FnWert% (X)
  130.   Y% = FnWert% (Y)
  131.   PRINT #1, "PU"; X%; Komma$; Y%; Ende$
  132. END SUB
  133. '----------------------------------------------------
  134. SUB P.SetColor (Farbe%)
  135. SHARED Ende$, Komma$, MaxColors%
  136.  
  137.   Farbe% = (Farbe%  MOD (MaxColors% + 1))
  138.   PRINT #1, "SP"; Farbe%; Ende$
  139. END SUB
  140. '----------------------------------------------------
  141. SUB P.PutPixel (X, Y,  Farbe%)
  142. SHARED Ende$, Komma$
  143.  
  144.   CALL P.SetColor (Farbe%)
  145.   X% = FnWert% (X)
  146.   Y% = FnWert% (Y)
  147.   PRINT #1, "PU"; X%; Komma$; Y%; Ende$
  148.   PRINT #1, "PD"; X%; Komma$; Y%; Ende$
  149. END SUB
  150. '----------------------------------------------------
  151. SUB P.Mark (X, Y,  Farbe%)
  152. ' markiert angegebene Punkte mit einem Kreuz
  153. SHARED Ende$, Komma$
  154.  
  155.   CALL P.SetColor (Farbe%)
  156.   CALL P.MoveTo (X, Y - 1) :  CALL P.LineRel (0, 2)
  157.   CALL P.MoveTo (X - 1, Y) :  CALL P.LineRel (2, 0)
  158.  
  159. END SUB
  160. '----------------------------------------------------
  161. SUB P.Rectangle (X1, Y1, X2, Y2)
  162. SHARED Ende$, Komma$
  163.  
  164.    X2% = FnWert% (X2)
  165.    Y2% = FnWert% (Y2)
  166.    CALL P.MoveTo (X1, Y1)
  167.    PRINT #1, "EA"; X2%; Komma$; Y2%; Ende$
  168. END SUB
  169. '----------------------------------------------------
  170. SUB P.Bar (X1, Y1, X2, Y2)
  171. SHARED Ende$, Komma$
  172.  
  173.    X2% = FnWert% (X2)
  174.    Y2% = FnWert% (Y2)
  175.    CALL P.MoveTo (X1, Y1)
  176.    PRINT #1, "RA"; X2%; Komma$; Y2%; Ende$
  177. END SUB
  178. '----------------------------------------------------
  179. SUB P.Circle (Rad, Aufl)
  180. SHARED Ende$, Komma$
  181.  
  182.   Rad% = FnWert% (Rad)
  183.   PRINT #1, "CI"; Rad%; Komma$; INT (Aufl); Ende$
  184. END SUB
  185. '----------------------------------------------------
  186. SUB P.Arc (X, Y, Winkel, Aufl)
  187. ' Beachten : Start an der Stiftposition ( = Bogenendpunkt) !
  188. '          X, Y sind die Koordinaten des Mittelpunktes !
  189. SHARED Ende$, Komma$
  190.  
  191.   X% = FnWert% (X)
  192.   Y% = FnWert% (Y)
  193.   PRINT #1, "AA"; X%; Komma$; Y%; Komma$;_
  194.             INT (Winkel); Komma$; INT (Aufl); Ende$
  195. END SUB
  196. '----------------------------------------------------
  197. SUB P.Pie (Rad, StartWinkel, SegmentWinkel, Aufl)
  198. ' zeichnet ein Kuchenstück
  199. SHARED Ende$, Komma$
  200.  
  201.   Rad% = FnWert% (Rad)
  202.   PRINT #1, "EW"; Rad%; Komma$; INT (StartWinkel); Komma$;_
  203.             INT (SegmentWinkel); Komma$; INT (Aufl); Ende$
  204. END SUB
  205. '----------------------------------------------------
  206. SUB P.PieSlice (Rad, StartWinkel, SegmentWinkel, Aufl)
  207. ' zeichnet ein ausgefülltes Kuchenstück
  208. SHARED Ende$, Komma$
  209.  
  210.   Rad% = FnWert% (Rad)
  211.   PRINT #1, "WG"; Rad%; Komma$; INT (StartWinkel); Komma$;_
  212.             INT (SegmentWinkel); Komma$; INT (Aufl); Ende$
  213. END SUB
  214. '----------------------------------------------------
  215. SUB P.SetLineStyle (Art%, Pattern%, Dicke%)
  216. ' Dicke   : Strichbreite / in dieser Version noch nicht implementiert !
  217. ' Pattern : Wiederholschrittlänge, 2 oder 3 ergeben recht gefällige Linien
  218. SHARED Ende$, Komma$
  219.  
  220.   SELECT CASE Art%
  221.    CASE  0 TO 6
  222.       PRINT #1, "LT"; Art%; Komma$; Pattern%; Ende$
  223.    CASE ELSE
  224.       PRINT #1, "DF"; Ende$
  225.   END SELECT
  226. ' die 'normale' Linie ist nicht definiert, also Plotter initialisieren !
  227. ' 'IN' ergibt Probleme, wenn der (HPGL-)Skalierungsbefehl SC benutzt wird !
  228. ' 'DF' versetzt den Plotter wieder in den Normalzustand, ohne die definierte
  229. '    Skalierung zu verändern !
  230. END SUB
  231. '----------------------------------------------------
  232. SUB P.SetLineWidth (Breite)
  233. SHARED Ende$, Komma$
  234.  
  235.   IF (Breite > 0.1) AND (Breite < 5.0) THEN PRINT #1, "PT"; Breite; Ende$
  236. END SUB
  237. '----------------------------------------------------
  238. SUB P.SetFillStyle (Typ%, Abstand%, Winkel%)
  239. ' Typ% : 1 .. 4
  240. ' Abstand : .. der Linien bei Parallel- und Gitterschraffur
  241. '           in Plottersteps ! z.B. Abstand 120 = 3 mm
  242. ' Winkel  : Schraffurneigung, von der Horiz. ausgehend in 45-Grad-Steps
  243. '           0 = horizontale, 90 = vertikale Schraffur
  244. ' lt. Plotter-Handbuch sollte der Typ "5" keine Schraffur zeichnen, mein
  245. ' Plotter schraffiert aber trotzdem mit der zuletzt gewählten Einstellung !
  246.  
  247. SHARED Ende$, Komma$
  248.  
  249.   IF (Typ% >1) AND (Typ% < 4) THEN_
  250.      PRINT #1, "FT"; Typ%; Komma$; Abstand%; Komma$; Winkel%; Ende$
  251. END SUB
  252. '----------------------------------------------------
  253. SUB P.SetViewPort (X1, Y1, X2, Y2, Clip%)
  254. ' Clip% ist nicht implementiert !
  255. SHARED Ende$, Komma$
  256.  
  257.   X1% = FnWert% (X1)
  258.   Y1% = FnWert% (Y1)
  259.   X2% = FnWert% (X2)
  260.   Y2% = FnWert% (Y2)
  261.   PRINT #1, "IW"; X1%; Komma$; Y1%; Komma$; X2%; Komma$; Y2%; Ende$
  262. END SUB
  263. '----------------------------------------------------
  264. SUB P.SetTextSlant  (Tangens)
  265. ' Textneigungswinkel
  266. SHARED Ende$, Komma$
  267.  
  268.     PRINT #1, "SL"; Tangens; Ende$
  269. END SUB
  270. '----------------------------------------------------
  271. SUB P.SetTextStyle (Font%, Dir%, Size)
  272. ' Dir :   0 = Horizontal  --  1 = Vertikal
  273. ' nur diese beiden Richtungen werden gesetzt !
  274. SHARED Ende$, Komma$
  275.  
  276.   PRINT #1, "CS"; Font; Ende$               ' Zeichensatz
  277.   SELECT CASE Dir%
  278.      CASE 0    : PRINT #1, "DI1,0"; Ende$   ' horizontal
  279.      CASE ELSE : PRINT #1, "DI0,1"; Ende$   ' vertikal
  280.   END SELECT
  281.                            ' Textgrösse
  282.   PRINT #1, "SI"; 0.5 * Size; Komma$; Size; Ende$
  283.         ' ^ Faktor zur Kompatibilität mit PGraph !
  284. END SUB
  285. '----------------------------------------------------
  286. SUB P.OutTextXY (X, Y, Text$)
  287. SHARED Ende$, Komma$
  288.  
  289.   CALL P.MoveTo (X, Y)
  290.   PRINT #1, "LB"; Text$; CHR$ (3); Ende$
  291. END SUB
  292. '----------------------------------------------------
  293. SUB CloseGraphik
  294. SHARED Ende$, Komma$
  295.  
  296.   CALL P.SetColor (%Black) : PRINT #1, "PU0,0;"
  297.   PRINT #1, ""
  298.   CLOSE #1
  299. END SUB
  300. '-----------------------------------------------
  301.