home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 09 / plotter.doc < prev    next >
Encoding:
Text File  |  1989-04-24  |  11.2 KB  |  237 lines

  1.  
  2.  
  3. Achsen und Skalen...
  4.  
  5. ...auf dem Plotter implementiert
  6.  
  7. von Gerd Kraus
  8.  
  9.  
  10. Während es für die unterschiedlichsten Anwendungen Druckertreiber in
  11. Hülle und Fülle gibt, fristet der Plotter, so scheint es, in der PC-
  12. Welt eher ein Mauerblümchendasein. Seitdem jedoch die PC-Grafiken
  13. immer ansprucksvoller werden und die CAD-Anwendungen auch für den
  14. Hobbybereich interessant, weil erschwinglich, werden, wird auch der
  15. Einsatz eines Plotters am PC immer interessanter.
  16.  
  17. Die in TOOLBOX 12'88 veröffentlichte Grafik-Unit zur Ausgabe von
  18. richtigen Achsen und winkeltreuen Skalen fand unter den Lesern viel
  19. Anklang. Es häuften sich aber auch die Anfragen, ein ähnliches
  20. Programm für die Ausgabe von Kurven und anschaulichen Grafiken auf
  21. dem Plotter zu verwirklichen. Ihr Wunsch war uns Befehl: Wir haben
  22. die Grafik-Unit für Plotter mit einer HPGL-kompatiblen Be-
  23. fehlssprache in Turbo Pascal 4.0/5.0 umgesetzt.
  24.  
  25. Wollte man sich vor zehn, fünfzehn Jahren einen Taschen- oder
  26. Tischrechner für den naturwissenschaftlichen Bereich kaufen, war es
  27. eine gute Idee, sich ein Gerät von Hewlett Packard zuzulegen. Die
  28. "umgekehrte polnische Notation" (UPN) von Arithmetikoperationen war
  29. zwar etwas gewöhnungsbedürftig, aber äußerst effektiv und schnell.
  30. Bereits mit der frühen Palette von naturwissenschaftlichen Rechnern
  31. lieferte Hewlett Packard auch X-Y-Plotter. Aus dieser Zeit stammt
  32. die HPGL, die Hewlett-Packard-Graphic-Language.
  33.  
  34. HPGL ist heute für Plotter die Standard-Kommandosprache. Wer seinen
  35. mit HPGL ansprechbaren Plotter nicht in der Liste der Gerätetreiber
  36. eines CAD-Programmes findet, braucht nur einen der mit Sicherheit
  37. angebotenen HP-Plotter auszuwählen, schon sind die meisten Kommuni-
  38. kationsschwierigkeiten beseitigt. Lediglich bei der Menge der
  39. implementierten Befehlswörter ist eine gewisse Streuung vorhanden.
  40. Der für unsere Grafik-Implementation verwendete Plotter PL 450 läßt
  41. sich zum Beispiel mit 56 Befehlen programmieren, während der HP
  42. 7586B 82 Befehle versteht.
  43.  
  44. Um das Programm für möglichst viele Plotterbesitzer interessant zu
  45. machen, wurden nur die gebräuchlichsten Befehle in der Grafik-Unit
  46. für den Plotter implementiert und auf einige komfortable Befehle wie
  47. zum Beispiel das Zeichnen von Koordinatenachsen mit Teilstrichen
  48. oder dem Festlegen einer Fensterfläche verzichtet. Welche Befehle
  49. Ihr Plotter verstehen muß, damit sie das Programm benutzen können,
  50. können Sie Bild 1 entnehmen.
  51.  
  52. Ein Problem beim Programmieren in HPGL soll nicht unerwähnt bleiben:
  53. Dachte ich bisher, daß es nichts komplizierteres gäbe als ein
  54. Druckerhandbuch, so mußte ich meine Meinung gründlich revidieren.
  55. Beim Studium des Plotter-Manuals kommt man manchmal auf den
  56. Gedanken, HPGL sei eine Geheimsprache, die möglichst wenigen Leuten
  57. nähergebracht werden soll... Hier hilft oft nur mühsames und
  58. zeitraubendes Ausprobieren der Befehle. Mit dem Befehl CS, zum
  59. Beispiel, kann man den Zeichensatz auswählen, aber woraus hier die
  60. Auswahl besteht, bleibt im Dunklen.
  61.  
  62. ,,z
  63. Das Pflichtenheft...
  64.  
  65.  
  66. Die beiden Plotter-Units sollen folgende Bedingungen erfüllen:
  67.  
  68. - 1. der Plotter wird mit HPGL-Befehlen angesprochen (Unit HPGL),
  69. - 2. die in dieser Unit verwendeten Grafikbefehle sollen möglichst
  70. die gleiche Syntax wie die in Turbo-Pascal definierten Befehle
  71. haben,
  72. - 3. die allgemeinen Grafik-Routinen (Unit PLGRAPH) sollen sich mög-
  73. lichst wenig von den Befehlen der Bildschirmgraphik-Unit PGRAPH un-
  74. terscheiden und
  75. - 4. Anwender, die nur im Büro Zugriff auf einen Plotter haben,
  76. sollen ebenfalls mit dem Programm arbeiten können.
  77.  
  78. Bei den in der Unit HPGL implementierten Prozeduren wurden die
  79. gleichen Namen und Parameter verwendet, wie sie in GRAPH.TPU
  80. deklariert sind. Dies ermöglicht ein schnelles Einarbeiten in die
  81. Befehle. Den Prozedurnamen ist der Übersichtlichkeit halber die
  82. Zeichenfolge "P_" vorangestellt, obwohl das nicht unbedingt nötig
  83. ist, da die Grafik entweder auf den Bildschirm oder den Plotter aus-
  84. gegeben wird, und somit die Unit GRAPH mit der Unit HPGL nicht in
  85. Konflikt kommen kann.
  86.  
  87. Die Befehle zum Aufbereiten der Grafik sind in der Unit PLGRAPH
  88. enthalten. Diese Unit ist eine angepaßte Version der in TOOLBOX
  89. 12'88 veröffentlichten Unit PGraph. Für den Anwender heißt das, daß
  90. die Grafik zunächst auf dem Monitor dargestellt wird. Sind dann die
  91. richtigen Parameter ermittelt, braucht in der USES- Anweisung nur
  92. die Unit PGRAPH gegen PLGRAPH ausgetauscht zu werden. Bei der
  93. Implementierung wurde aus Gründen der Geschwindigkeit und der
  94. Übersichtlichkeit darauf verzichtet, die entsprechenden
  95. Plotterbefehle direkt in die Unit PLGRAPH aufzunehmen.
  96.  
  97. Nicht jeder Anwender hat einen Plotter zu Hause stehen, aber mancher
  98. kann vielleicht das Gerät im Büro mitbenutzen. Deshalb erfolgen alle
  99. Anweisungen an den Plotter über eine Datei vom Typ 'TEXT', die
  100. entweder direkt via Centronics-Schnittstelle ausgegeben wird oder
  101. zur späteren Verwendung auf Diskette gespeichert werden kann.
  102. Außerdem konnte ich mich damit elegant an einem weiteren Problem
  103. 'vorbeimogeln', nämlich der Kommunikation zwischen Computer und
  104. Plotter. Die serielle Schnittstelle scheint da einige Tücken zu
  105. haben und da mein PL 450-Plotter sowohl eine serielle als auch eine
  106. Centronics-Schnittstelle besitzt, ist er bei dem von mir verwendeten
  107. CAD-Programm an die Centronics-Schnittstelle angeschlossen. Das hat
  108. auch den Vorteil, daß ein Druckerpuffer die Wartezeiten beträchtlich
  109. verkürzen hilft.
  110.  
  111. Zu den Units im einzelnen: Die allgemeine Funktionsweise der Unit
  112. PGRAPH kann in der TOOLBOX 12'88 nachgelesen werden, an den
  113. Prozeduraufrufen wurde nichts verändert. Von 'außen' sind nur drei
  114. Änderungen sichtbar, die beim Austausch von Plotter- und
  115. Bildschirmgrafik zu beachten sind :
  116.  
  117. - die Textgröße ist in HPGL in [cm] anzugeben, hier sorgen die
  118. typisierte Konstante "P_FontSize" und eine interne Umrechnung für
  119. eine rasche Umstellung.
  120. - die Festlegung des Grafikbereiches in der Prozedur "GraphikWindow"
  121. erfolgt in [mm]. Das ist vor allem bei der Festlegung des
  122. notwendigen Randabstandes von den den Zeichengrenzen wichtig, das
  123. Zeichenfenster sollte ohnehin nur in Abhängigkeit von den
  124. festgelegten typisierten Konstanten definiert werden. Bei der
  125. definierten Größe des Zeichensatzes (P_FontSize, Größe 2) genügt ein
  126. Randabstand von 20 mm.
  127. - für die Variable "Thickness", die Strichstärke also, ist kein
  128. entsprechender HPGL-Befehl vorhanden. Statt der Liniendicke wird mit
  129. "Thickness" die Wiederholschrittlänge des Linientyps geändert. Ein
  130. recht guter Wert ist hierbei '3', der bereits in der typisierten
  131. Konstanten "P_NormStep" festgelegt ist.
  132.  
  133. Die weiteren Änderungen sind für den Anwender von außen nicht
  134. sichtbar. Einige Änderungen seien kurz aufgeführt:
  135.  
  136. - der Ursprung des Koordinatensystems liegt im Gegensatz zum
  137. Bildschirm-Koordinatensystem links unten.
  138. - der Startpunkt eines Zeichens ist immer die linke untere Ecke, die
  139. erforderlichen Abstände der Beschriftung wurden in Abhängigkeit von
  140. der Größe des Zeichensatzes neu definiert.
  141. - die Ausdehnung "Expans" in der Prozedur "Uscale" wird noch mit
  142. einem Faktor (10) multipliziert, um bei gleichen Parametern ein in
  143. etwa gleiches Aussehen des Koordinatensystems zu erhalten.
  144.  
  145. In der Unit HPGL müssen eventuell zunächst einige Werte an die
  146. verwendete Hardware angepaßt werden:
  147.  
  148. - die Anzahl der Stifte ist in "MaxColors" mit 8 festgelegt
  149. - die maximale Blattgröße in [mm] ist in "UaxMax" und "VaxMax"
  150. anzupassen
  151.   (vorbereitet für DIN A3)
  152. - durch eine Multiplikation mit "PFaktor" werden die Koordinaten
  153. plottergerecht aufbereitet. Bei einer Auflösung von 0.025 mm ergibt
  154. sich PFaktor zu 1/0.025 = 40. Die Auflösung des Plotters, das heißt
  155. die Anzahl der Plotschritte/Einheit, kann dem Datenblatt des Geräts
  156. entnommen werden.
  157.   Die genannten drei Werte finden sich in der Prozedur
  158.   "OpenGraphik".
  159.  
  160. Damit Sie bei Änderungen nicht mühsam das gesamte Listing
  161. durchforsten müssen, sind so viele Parameter wie möglich als
  162. typisierte Konstanten deklariert:
  163.  
  164. - die Stiftfarben sind wie beim Bildschirm belassen worden
  165. - die Namen der Linienarten wurden soweit möglich analog den Namen
  166. in der Graph-Unit gewählt
  167. - als DefaultFont wurde der Zeichensatz '0' festgelegt
  168.  
  169. Einige Anmerkungen noch zu den Prozeduren:
  170.  
  171. - "OpenGraphik" initialisiert den Plotter und teilt dem Programm die
  172. hardwarespezifischen Werte mit. Mit 'PRN' als Dateiname wird über
  173. die Centronics-Schnittstelle sofort gezeichnet, ein unter DOS
  174. gültiger Dateiname speichert Ihren Plot auf Diskette ab.
  175. - "P_LineRel" zeichnet relativ zum momentanen Standpunkt, nach
  176. Erledigung des Befehls muß aber wieder in absolute Koordinaten
  177. umgeschaltet werden.
  178. - "P_SetColor" wechselt die Farben in Abhängigkeit von MaxColor, bei
  179. 4 Stiften wird also Farbe 5 zu Farbe 1.
  180. - "P_PutPixel" dient zur Markierung eines Koordinatenpaares. Da mit
  181. HPGL kein Punkt gesetzt werden kann, wird ein kleines Kreuz als
  182. Marker verwendet. Wer mag, kann die geklammerte Version mit dem
  183. Kreis als Markierung testen, und anschließend bei einer Tasse Kaffee
  184. dem Plotter beim Zeichnen der Kreise zusehen. Bei vielen solcher
  185. Kreise werden Sie allerdings, wie auch bei einem komplizierten
  186. Füllmuster, bald eine "Time-Out"-Fehlermeldung erhalten.
  187. - in der Prozedur "P_SetLineStyle" wird statt der nicht direkt
  188. programmierbaren Liniendicke der Schrittweitenabstand verwendet. Ich
  189. bin davon ausgegangen, daß die sieben verwendeten Linienarten (0 bis
  190. 6) bei allen Plottern definiert sind. Bei Bedarf ist die maximale
  191. Anzahl entsprechend anzupassen. Einen Sonderfall stellt die
  192. durchgezogene Linie dar. Sie ist nicht als Linienart deklariert, um
  193. wieder von einer verwendeten Linienart auf 'Normalbetrieb' um-
  194. zuschalten, muß der Plotter zurückgesetzt werden. Den Ini-
  195. tialisierungsbefehl "IN" sollte man allerdings vermeiden, da eine
  196. ev. über HPGL gesetzte Skalierung ebenfalls gelöscht wird. Für die
  197. vorliegende Anwendung ist das zwar ohne Belang, aber bereits jetzt
  198. ist vorsorglich der harmlosere Initialisierungsbefehl "DF" im-
  199. plementiert.
  200. - Analog der Graph-Unit sind in der Prozedur "P_SetTextStyle" nur
  201. die vertikale und die horizontale Schriftrichtung ausführbar.
  202. Ebenfalls zu beachten ist in dieser Prozedur, daß die Textgröße in
  203. x- und y- Richtung definiert werden muß; hierbei habe ich für die x-
  204. Richtung die halbe Größe der y-Richtung (Faktor 0.5) gewählt.
  205. - Die Prozedur "CloseGraph" schließlich versetzt den Plotter wieder
  206. in den Ausgangszustand und fährt den Stift zum Ursprung links unten
  207. zurück.
  208.  
  209. Falls Sie die Unit durch zusätzliche Befehle erweitern wollen, noch
  210. ein kleiner Hinweis. Ein Linien-Befehl zum Beispiel sieht für den
  211. Plotter so aus:
  212. ,,l
  213. PU100,100,200,200;
  214.  
  215. Wird diese Anweisung mit Variablen im Programm gegeben, so müssen
  216. natürlich Komma und Strichpunkt ebenfalls mit angegeben werden. Da
  217. mir die ständige Eingabe von "," und ";" zu umständlich war, und das
  218. Listing unübersichtlich wurde, habe ich diese beiden erforderlichen
  219. Eingabewerte als typisierte Konstante "Komma" und "Ende" deklariert.
  220.  
  221.                                   (wr)
  222.  
  223.  
  224.  
  225. PU Stift anheben (und Stift bewegen)
  226. PD Stift senken (und Linie ziehen)
  227. PA Linie in absoluten Koordinaten
  228. PR Linie in relativen Koordinaten
  229. SP Stiftfarbe auswählen
  230. LT Linientyp festlegen
  231. CS Zeichensatz auswählen
  232. DI Richtung der Beschriftung definieren
  233. SI Größe des Zeichensatzes festlegen
  234. LB String 'drucken'
  235.  
  236. (jeweilige Parameter siehe Listings)
  237.