diff options
Diffstat (limited to 'doc/graphic')
-rw-r--r-- | doc/graphic/Altes Handbuch - Teil 10 - Graphik | 831 | ||||
-rw-r--r-- | doc/graphic/GRAPHIK.book | 897 | ||||
-rw-r--r-- | doc/graphic/graphik beschreibung | 661 |
3 files changed, 0 insertions, 2389 deletions
diff --git a/doc/graphic/Altes Handbuch - Teil 10 - Graphik b/doc/graphic/Altes Handbuch - Teil 10 - Graphik deleted file mode 100644 index 36fa31e..0000000 --- a/doc/graphic/Altes Handbuch - Teil 10 - Graphik +++ /dev/null @@ -1,831 +0,0 @@ -#type ("trium10")##limit (13.5)# -#block##start(2.5,2.5)##pagelength(21.0)##pagenr("%",418)##setcount(22)# -#headeven# -% EUMEL-Benutzerhandbuch - - - -#end# -#headodd# - TEIL 10: Graphik % - - - -#end# -#type("triumb14")# -#ib(9)##center#TEIL 10: Graphik#ie(9)# -#type("trium10")# -#free(2.0)# -#on("bold")##ib(9)##type("triumb14")#1. Übersicht#ie(9)# -#type("trium10")# - - #limit(12.0)##on("italics")#Dieser Teil des Benutzer-Handbuchs beschreibt die Graphik- - Möglichkeiten des EUMEL-Systems. Die Graphik-Pakete ge - hören nicht zum EUMEL-Standard, sondern sind Anwender - pakete, die im Quellcode ausgeliefert und von jeder Installation - in das System aufgenommen werden können. Unter Umständen - müssen Programme erstellt werden, die die Anpassungen für - spezielle graphische Geräte einer Installation vornehmen. -#limit(13.5)##off("italics")# - -Das Graphik-System ermöglicht es, durch ELAN-Programme geräteunab -hängige Informationen für Zeichnungen ("#ib#Graphiken#ie#") zu erstellen. Die Graphik -erzeugenden Programme brauchen dabei keine gerätespezifischen Größen sowie -gerätespezifischen Unterprogramme zu enthalten. Sie befassen sich somit -ausschließlich mit der Erzeugung der problemorientierten Information für die -Konstruktion einer Zeichnung. Nach der geräteunabhängigen Erzeugung einer -Graphik kann diese auf unterschiedlichen Geräten ausgegeben werden (z.B. erst -auf einem Terminal zur Kontrolle und dann auf einem Plotter). - -Die EUMEL-Graphik umfaßt zwei- und dreidimensionale Graphik. Dabei -entspricht die Y-Achse bei der zweidimensionalen Graphik der Z-Achse (Höhe) -bei der dreidimensionalen Graphik. Im dreidimensionalen Fall sind perspektivi -sche, orthografische und schiefwinklige Projektionen mit beliebigen Betrach -tungswinkeln möglich. - -Bei der EUMEL-Graphik wird streng zwischen Erzeugung und Manipulation von -Graphiken (Bildern) auf der einen und Darstellung der erzeugten Bilder auf der -anderen Seite unterschieden. Für die Erzeugung und Manipulation der Graphi -ken existiert der Typ PICTURE, für die Darstellung der Bilder gibt es den Typ -PICFILE. Dabei müssen Ausschnitt, Maßstab, Betrachtungswinkel und Pro -jektionsart erst bei der Darstellung festgelegt werden. Diese Konstruktion des -Graphik-Systems hat folgende Vorteile: - -a) Programme, die Graphik-Informationen erzeugen, sind geräteunabhängig. - Das bedeutet, daß Programmierer sich ausschließlich mit einem logischen - Problem zu befassen brauchen und nicht mit gerätespezifischen Besonder - heiten. - -b) Graphiken können auf mehreren unterschiedlich gearteten Geräten mehrmals - dargestellt werden, ohne daß das erzeugende Programm geändert oder neu - gestartet werden muß. Z.B. kann ein Programmierer eine Graphik erst auf - dem Terminal auf Richtigkeit und Größenverhältnisse überprüfen, bevor er die - Zeichnung auf einem Plotter zeichnen läßt. - -c) Graphiken können leicht geändert (z.B. vergrößert oder in eine Richtung - gestreckt) werden, ohne daß das erzeugende Programm erneut durchlaufen - werden muß. Zudem können Graphiken aneinander oder übereinander gelegt - werden. - -d) Graphiken mit unterschiedlichen Farben, Strichen usw. können leicht erzeugt - werden. - -e) Der Anschluß von neuen Graphik-Geräten durch Benutzer ist leicht möglich, - ohne daß die Graphik erzeugenden Programme modifiziert werden müssen. - -f) Plotter können wie Drucker an einen SPOOLER gehängt werden. - -g) Bilder können als PICFILEs gespeichert und versandt werden. -#free(2.0)# -#ib(9)##type("triumb14")#Erzeugung von Bildern#ie(9)# -#type("trium10")# - -Bilder entstehen in Objekten vom Datentyp - -#type("modern12")# - PICTURE -#type("trium10")# - -Diese müssen mit der Prozedur - -#type("modern12")# - nilpicture -#type("trium10")# - -initialisiert werden. Sie enthalten dann ein leeres Bild, dessen Dimension noch -nicht festgelegt ist. Die Dimension eines PICTUREs wird mit dem ersten -Schreibzugriff ('move' oder 'draw') festgelegt. Ein PICTURE kann immer nur -entweder zwei- oder dreidimensional sein. Außerdem kann einem PICTURE mit -der Prozedur - -#type("modern12")# - pen -#type("trium10")# - -genau ein virtueller Stift zugeordnet oder der aktuelle Stift erfragt werden. - -Die Erzeugung eines Bildes basiert auf dem Modell eines Plotters. Der (virtuelle) -Zeichenstift kann mit - -#type("modern12")# - move -#type("trium10")# - -ohne zu zeichnen an beliebige Stellen gefahren werden (reine Positionierung). -Mit - -#type("modern12")# - draw -#type("trium10")# - -wird der Stift veranlaßt, eine Linie von der aktuellen zur angegebenen Zielposi -tion zu zeichnen. 'move' löst also Bewegungen mit gehobenem, 'draw' solche mit -gesenktem Stift aus. Um auch 'relatives' Zeichnen zu ermöglichen, existiert die -Prozedur - -#type("modern12")# - where -#type("trium10")# - -die die aktuelle Stiftposition liefert. -#free(2.0)# -#ib(9)##type("triumb14")#Manipulation von Bildern#ie(9)# -#type("trium10")# - -Erstellte Bilder können als Ganzes manipuliert werden. Die Prozeduren - -#type("modern12")# - translate (* verschieben *) - stretch (* strecken bzw. stauchen *) - rotate (* drehen *) - reflect (* spiegeln *) -#type("trium10")# - -verändern jeweils das ganze Bild. Es ist aber auch möglich, mehrere Bilder -zusammenzufügen. Mit - -#type("modern12")# - CAT -#type("trium10")# - -kann ein weiteres Bild angefügt werden. Dabei müssen allerdings beide -PICTURE die gleiche Dimension haben. In solchen als ganzes manipulierten -Bildern kann man ohne Einschränkung mit 'draw' und 'move' weiterzeichnen. -#free(2.0)# -#ib(9)##type("triumb14")#Darstellung#ie(9)# -#type("trium10")# - -Für die Darstellung der erzeugten Bilder existiert der Typ - -#type("modern12")# - PICFILE -#type("trium10")# - -Dieser besteht aus max. 128 PICTUREs, die mit den Prozeduren - -#type("modern12")# - put - get -#type("trium10")# - -eingegeben bzw. ausgegeben werden können. PICFILE wird durch Datenräume -realisiert, deshalb erfolgt die Assoziation an einen benannten Datenraum ähnlich -wie beim FILE. Dafür wird die Prozedur - -#type("modern12")# - picture file -#type("trium10")# - -verwandt. Ein neuer PICFILE enthält genau ein leeres PICTURE. Die Darstellung -der PICFILEs auf Zeichengeräten erfolgt mit der Prozedur - -#type("modern12")# - plot -#type("trium10")# - -Da die Graphiken aber in "Weltkoordinaten" erzeugt werden und die spätere -Darstellung vollkommen unbeachtet bleibt, müssen gewisse Darstellungspara -meter für die Zeichnung gesetzt werden. Diese Parameter werden im PICFILE -abgelegt und gelten jeweils für den gesamten PICFILE. Dadurch ist es möglich, -einen PICFILE mit spezifizierter Darstellungsart über einen SPOOLER an einen -Plotter zu senden oder die bei der letzten Betrachtung gewählte Darstellung mit -in dem PICFILE gespeichert zu halten. Für die Darstellung können den virtuellen -Stiften mit der Prozedur - -#type("modern12")# - select pen -#type("trium10")# - -reale Stifte zugeordnet werden. Voreingestellt ist für alle virtuellen Stifte: -Standardfarbe, Standardstärke, durchgängige Linie. - -Indem man einigen virtuellen Stiften den leeren Stift als realen Stift zuordnet, -kann man einzelne PICTUREs ausblenden. Sowohl bei der Darstellung von -zwei- als auch dreidimensionaler Graphik kann die gewählte Zeichenfläche auf -dem Endgerät mit der Prozedur - -#type("modern12")# - viewport -#type("trium10")# - -festgelegt werden. Voreingestellt ist das Quadrat mit der größtmöglichen Seiten -länge, d.h. der kürzeren Seite der hardwaremäßigen Zeichenfläche. -#free(2.0)# -#ib(9)##type("triumb14")#Darstellung zweidimensionaler Graphik#ie(9)# -#type("trium10")# - -Bei der Darstellung zweidimensionaler Bilder muß der zu zeichnende Ausschnitt -(das 'Fenster') angegeben werden. Mit der Prozedur - -#type("modern12")# - window -#type("trium10")# - -wird durch Angabe der minimalen und maximalen X- bzw. Y-Koordinaten ein -Fenster definiert. Da das so definierte Fenster auf die ganze (mit 'viewport' -definierbare) Zeichenfläche abgebildet wird, ist der Abbildungsmaßstab durch das -Zusammenspiel von 'viewport' und 'window' bestimmt. Da bei 'viewport' stan -dardmäßig das maximale Zeichenquadrat voreingestellt ist, wird in diesem Fall -durch gleiche X- und Y-Fenstergröße eine winkeltreue Darstellung erreicht. -#free(2.0)# -#ib(9)##type("triumb14")#Darstellung dreidimensionaler Graphik#ie(9)# -#type("trium10")# - -Im dreidimensionalen Fall wird das Fenster ebenfalls mit - -#type("modern12")# - window -#type("trium10")# - -definiert, wobei dann allerdings auch der Bereich der dritten Dimension -(Z-Koordinaten) zu berücksichtigen ist. Da die dreidimensionale Graphik auf -eine zweidimensionale Fläche projiziert wird, können aber noch weitere Darstel -lungsparameter angegeben werden. Der Betrachtungswinkel wird mit Hilfe der -Prozedur - -#type("modern12")# - view -#type("trium10")# - -angegeben. Zur Spezifikation der gewünschten Projektionsart gibt es - -#type("modern12")# - orthographic (* orthographische Projektion *) - perspective (* perspektivische Projektion, - der Fluchtpunkt ist frei wählbar *) - oblique (* schiefwinklige Projektion *) -#type("trium10")# -#free(2.0)# -#ib(9)##type("triumb14")#Beispiel (Sinuskurve)#ie(9)# -#type("modern12")# - - funktion zeichnen; - bild darstellen . - -funktion zeichen : - PICTURE VAR pic :: nilpicture; - REAL VAR x := -pi; - move (pic, x, sin (x)); - REP x INCR 0.1; - draw (pic, x, sin (x)) - UNTIL x >= pi PER . - -bild darstellen : - PICFILE VAR p :: picture file ("sinus"); - window (p, -pi, pi, -1.0, 1.0); - put (p, pic); - plot (p) . -#type("trium10")# -#free(2.0)# -#ib(9)##type("triumb14")#Beispiel (Würfel)#ie(9)# -#type("modern12")# - - wuerfel zeichen; - wuerfel darstellen. - -wuerfel zeichnen : - zeichne vorderseite; - zeichne rueckseite; - zeichne verbindungskanten. - -zeichne vorderseite : - PICTURE VAR vorderseite :: nilpicture; - move (vorderseite, 0.0, 0.0, 0.0); - draw (vorderseite, 1.0, 0.0, 0.0); - draw (vorderseite, 1.0, 0.0, 1.0); - draw (vorderseite, 0.0, 0.0, 1.0); - draw (vorderseite, 0.0, 0.0, 0.0). - -zeichne rueckseite : - PICTURE VAR rueckseite :: translate - (vorderseite, 0.0, 1.0, 0.0). - -zeichne verbindungskanten : - PICTURE VAR verbindungskanten :: nilpicture; - move (verbindungskanten, 0.0, 0.0, 0.0); - draw (verbindungskanten, 0.0, 1.0, 0.0); - - move (verbindungskanten, 1.0, 0.0, 0.0); - draw (verbindungskanten, 1.0, 1.0, 0.0); - - move (verbindungskanten, 1.0, 0.0, 1.0); - draw (verbindungskanten, 1.0, 1.0, 1.0); - - move (verbindungskanten, 0.0, 0.0, 1.0); - draw (verbindungskanten, 0.0, 1.0, 1.0). - -wuerfel darstellen : - PICFILE VAR p := picture file ("wuerfel"); - put (p, vorderseite); - put (p, rueckseite); - put (p, verbindungskanten); - window (p, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0); - view (p, 0.0, 40.0, 20.0); - orthographic (p); - plot (p). -#type("trium10")# -#free(2.0)# -#ib(9)##type("triumb14")#Beschreibung der Graphik-Prozeduren#ie(9)# -#type("trium10")# - - #limit(12.0)##on("italics")#Zweidimensionale PICTUREs brauchen weniger Speicherplatz - als dreidimensionale. Daher werden in einigen Fehlermeldun - gen unterschiedliche Größen angegeben. -#limit(13.5)##off("italics")# - -:= - OP := (PICTURE VAR dest, PICTURE CONST source) - Zweck: Zuweisung - - OP := (PICFILE VAR dest, DATASPACE CONST source) - Zweck: Assoziiert die PICFILE Variable 'dest' mit der DATASPACE CONST - 'source' und initialisiert die PICFILE Variable sofern nötig. - Fehlerfall: - * dataspace is no PICFILE - Der anzukoppelnde Datenraum hat einen falschen Typ. - -#ib#CAT#ie# - OP CAT (PICTURE VAR dest, PICTURE CONST source) - Zweck: Aneinanderfügen von zwei PICTURE's. - Fehlerfälle: - * OP CAT: left dimension <> right dimension - Es können nur PICTUREs mit gleicher Dimension angefügt werden. - * OP CAT: Picture overflow - Die beiden PICTURE überschreiten die maximale Größe eines - Pictures. - -#ib#act picture#ie# - PICTURE PROC act picture (PICFILE VAR p) - Zweck: Liefert das PICTURE des PICFILEs 'p', auf das mit 'backward' o.ä. - positioniert wurde. - -#ib#backward#ie# - PROC backward (PICFILE VAR p) - Zweck: Positioniert den PICFILE 'p' um ein PICTURE zurück. - Fehlerfall: - * backward at begin of file - Es wurde versucht vor den Anfang des PICFILEs zu positionieren. - -#ib#draw#ie# - PROC draw (PICTURE VAR pic, REAL CONST x, y) - Zweck: Die Prozedur zeichnet in dem (zweidimensionalen) Bild 'pic' eine - Linie von der aktuellen Position zur Position (x, y). - Fehlerfälle: - * picture overflow - Zu viele Befehle in einem PICTURE (z. Zeit max. 1927) - * picture is three dimensional - Ein PICTURE kann nur entweder zwei- oder dreidimensional sein. - - PROC draw (PICTURE VAR pic, REAL CONST x, y, z) - Zweck: Die Prozedur zeichnet in dem (dreidimensionalen) Bild 'pic' eine - gerade Linie von der aktuellen Position zur Position (x, y, z). - Fehlerfälle: - * picture overflow - Zu viele Befehle in einem PICTURE (z. Zeit max. 1310) - * picture is only two dimensional - Ein PICTURE kann nur entweder zwei- oder dreidimensional sein. - - PROC draw (PICTURE VAR pic, TEXT CONST text) - Zweck: Der angegebene Text wird in das Bild 'pic' eingetragen. Der Anfang - ist dabei die aktuelle Stiftposition. Diese wird nicht verändert. - Fehlerfall: - * picture overflow - Der Text paßt nicht mehr in das PICTURE. - - PROC draw (PICTURE VAR pic, TEXT CONST text, - REAL CONST angle, height) - Zweck: Der angegebene Text wird unter dem Winkel 'angle' gegenüber der - Waagerechten und in der Größe 'height' in das PICTURE 'pic' - eingetragen. Der Anfang ist dabei die aktuelle Stiftposition. Diese - wird nicht verändert. - Fehlerfall: - * picture overflow - Der Text paßt nicht mehr in das PICTURE. - - PROC draw (PICFILE VAR pic, REAL CONST x, y) - Zweck: Die Prozedur zeichnet in dem aktuellen (zweidimensionalen) - PICTURE des PICFILEs 'p' eine gerade Linie. Der (virtuelle) Stift wird - von der aktuellen Position zur Position (x, y) gefahren. Falls das - aktuelle PICTURE zu voll ist, wird automatisch auf das nächste - umgeschaltet. - Fehlerfälle: - * picfile overflow - Das letzte PICTURE ist voll (z. Zeit max. 128 PICTURE) - * picture is threedimensional - Das aktuelle PICTURE ist dreidimensional. - - PROC draw (PICTFILE VAR pic, REAL CONST x, y, z) - Zweck: s. o. - Fehlerfälle: - * picfile overflow - Das letzte PICTURE ist voll (z. Zeit max. 128) - * picfile is only twodimensional - Das aktuelle PICTURE ist zweidimensional. - - PROC draw (PICTFILE VAR pic, TEXT CONST text) - Zweck: Der angegebene Text wird in das aktuelle PICTURE des PICFILEs 'p' - eingetragen. Falls das aktuelle PICTURE zu voll ist, wird automatisch - auf das nächste umgeschaltet. Der Anfang ist dabei die aktuelle - Stiftposition. Diese wird nicht verändert. - Fehlerfall: - * picfile overflow - Das letzte PICTURE ist voll (z. Zeit max. 128) - - PROC draw (PICFILE VAR pic, TEXT CONST text, - REAL CONST angle, height) - Zweck: Der angegebene Text wird unter dem Winkel 'angle' gegenüber der - Waagerechten und in der Größe 'height' in das aktuelle PICTURE - des PICFILES 'p' eingetragen. Falls das aktuelle PICTURE zu voll ist, - wird automatisch auf das nächste umgeschaltet. Der Anfang ist - dabei die aktuelle Stiftposition. Diese wird nicht verändert. - Fehlerfall: - * picfile overflow - Das letzte PICTURE ist voll (z. Zeit max. 128) - -#ib#eof#ie# - BOOL PROC eof (PICFILE CONST p) - Zweck: Liefert 'TRUE' wenn hinter das Ende des PICFILEs positioniert - wurde. - -#ib#extrema#ie# - PROC extrema (PICTURE CONST p, - REAL VAR x min, x max, y min, y max) - Zweck: Die Prozedur liefert die größten und kleinsten X- und Y-Koordi - naten des PICTUREs 'p'. Diese werden in die Parameter 'x min', 'x - max', 'y min' und 'y max' eingetragen. - - PROC extrema (PICTURE CONST p, - REAL VAR x min, x max, y min, y max, z min, z max) - Zweck: s.o. - - PROC extrema (PICFILE VAR p, REAL VAR x min, x max, y min, y max) - Zweck: s.o. - - PROC extrema (PICFILE VAR p, - REAL VAR x min, x max, y min, y max, z min, z max) - Zweck: s.o. - -#ib#forward#ie# - PROC forward (PICFILE VAR p) - Zweck: Positioniert den PICFILE um ein PICTURE weiter. - Fehlerfall: - * picfile overflow - Es sollte hinter das Ende des PICFILEs positioniert werden. - -#ib#get#ie# - PROC get (PICFILE VAR p, PICTURE VAR pic) - Zweck: Liest ein PICTURE aus einem PICFILE und positioniert auf das - Nächste. - Fehlerfall: - * input after end of picfile - Es sollte nach dem Ende des Picfiles gelesen werden. - -#ib#move#ie# - PROC move (PICTURE VAR pic, REAL CONST x, y) - Zweck: Der (virtuelle) Stift wird zur Position (x, y) gefahren. - Fehlerfälle: - * picture overflow - Zu viele Befehle in einem PICTURE (z. Zeit max. 1927 'moves') - * picture is three dimensional - Ein PICTURE kann nur entweder zwei- oder dreidimensional sein. - - PROC move (PICTURE VAR pic, REAL CONST x, y, z) - Zweck: Der (virtuelle) Stift wird zur Position (x, y, z) gefahren. - Fehlerfälle: - * picture overflow - Zu viele Befehle in einem PICTURE (z. Zeit max. 1310) - * picture is only twodimensional - Ein PICTURE kann nur entweder zwei- oder dreidimensional sein. - - PROC move (PICFILE VAR p, REAL CONST x, y) - Zweck: Der (virtuelle) Stift wird zur Position (x, y) gefahren. Falls das aktuelle - PICTURE des PICFILEs 'p' zu voll ist, wird automatisch auf das - nächste umgeschaltet. - Fehlerfall: - * picfile overflow - Das letzte PICTURE ist voll (z. Zeit max. 128 PICTUREs) - - PROC move (PICFILE VAR p, REAL CONST x, y, z) - Zweck: Der (virtuelle) Stift wird zur Position (x, y, z) gefahren. Falls das - aktuelle PICTURE des PICFILEs 'p' zu voll ist, wird automatisch auf - das nächste umgeschaltet. - Fehlerfall: - * picfile overflow - Das letzte PICTURE ist voll (z. Zeit max. 128 PICTUREs) - -#ib#nilpicture#ie# - PICTURE PROC nilpicture - Zweck: Die Prozedure liefert ein leeres PICTURE zur Initialisierung. - -#ib#oblique#ie# - PROC oblique (PICFILE VAR p, REAL CONST a, b) - Zweck: Bei dem (dreidimensionalen!) Bild 'p' wird 'schiefwinklig' als - gewünschte Projektionsart eingestellt. Dabei ist (a, b) der Punkt in - der X-Y-Ebene, auf den der Einheitsvector in Z-Richtung - abgebildet werden soll. - -#ib#orthographic#ie# - PROC orthographic (PICFILE VAR p) - Zweck: Bei dem (dreidimensionalen!) Bild 'p' wird "orthografisch" als Pro - jektionsart eingestellt. Bei der orthografischen Projektion wird ein - dreidimensionaler Körper mit parallelen Strahlen senkrecht auf die - Projektionsebene abgebildet. - -#ib#pen#ie# - INT PROC pen (PICTURE CONST pic) - Zweck: Liefert die Nummer des 'virtuellen Stifts'. - - PICTURE PROC pen (PICTURE CONST pic, INT CONST pen) - Zweck: Liefert ein PICTURE mit dem Inhalt 'pic' und dem 'virtuellen Stift' mit - der Nummer 'pen'. Möglich sind die Nummern 1 - 16. - Fehlerfälle: - * PROC pen: pen [No] < 1 - Der gewünschte Stift ist kleiner als 1. - * PROC pen: pen [No] > 16 - Der gewünschte Stift ist größer als 16. - -#ib#perspective#ie# - PROC perspective (PICFILE VAR p, REAL CONST cx, cy, cz) - Zweck: Bei den dreidimensionalen PICTUREs des PICFILE's 'p' wird - "perspektivisch" als gewünschte Projektionsart eingestellt. Der Punkt - (cx, cy, cz) ist der Fluchtpunkt der Projektion, d.h. alle Parallelen zur - Blickrichtung schneiden sich in diesem Punkt. - -#ib#pic no#ie# - INT PROC pic no (PICFILE CONST p) - Zweck: Liefert die Nummer des aktuellen PICTUREs. - -#ib#picture file#ie# - DATASPACE PROC picture file (TEXT CONST name) - Zweck: Die Prozedur dient zur Assoziation eines benannten Datenraumes mit - einem PICFILE (s. Operator ':='). - -#ib#plot#ie# - PROC plot (TEXT CONST name) - Zweck: Der PICFILE mit dem Namen 'name' wird entspechend der angege - benen Darstellungsart gezeichnet. Diese Parameter ('perspective', - 'orthographic', 'oblique', 'view', 'window' etc.) müssen vorher - eingestellt werden. - Fehlerfall: - * FILE does not exist - Es existiert kein PICFILE mit dem Namen 'name' - - PROC plot (PICFILE VAR p) - Zweck: Der PICFILE 'p' wird entspechend der angegebenen Darstellungsart - gezeichnet. Diese Parameter müssen vorher eingestellt werden. - - #on("bold")#Zweidimensional: -#off("bold")# - obligat: 'window' (zweidimensional) - optional: 'view' (zweidimensional) - 'select pen' - 'viewport' - - #on("bold")#Dreidimensional: -#off("bold")# - obligat: 'window' (dreidimensional) - optional: 'view' (dreidimensional) - 'orthographic', 'perspective', 'oblique' - 'viewport' - 'select pen' - -#ib#put#ie# - PROC put (PICFILE VAR p, PICTURE CONST pic) - Zweck: Schreibt ein PICTURE in einen PICFILE und positioniert um eins - vor. - Fehlerfall: - * picfile overflow - Der PICFILE ist voll. (z. Z. max. 128 PICTURE) - -#ib#reset#ie# - PROC reset (PICFILE VAR p) - Zweck: Positioniert auf den Anfang eines Picfiles. - -#ib#rotate#ie# - PICTURE PROC rotate (PICTURE CONST pic, REAL CONST alpha) - Zweck: Das PICTURE 'pic' wird um den Punkt (0, 0) um den Winkel 'alpha' - (im Gradmaß) im mathematisch positiven Sinn gedreht. - - PICTURE PROC rotate (PICTURE CONST pic, - REAL CONST alpha, beta, gamma) - Zweck: Das dreidimensionale PICTURE 'pic' wird um den Winkel 'alpha', - 'beta' oder 'gamma' im mathematisch positiven Sinn gedreht. Der - Winkel 'alpha' dreht um die X-Achse, der Winkel 'beta' um die - Y-Achse und 'gamma' um die Z-Achse. Es darf dabei nur jeweils - ein Winkel von 0.0 verschieden sein. Alle Winkel werden im - Gradmaß angegeben. - -#ib#select pen#ie# - PROC select pen (PICFILE VAR p, - INT CONST pen, colour, thickness, linetype) - Zweck: Für die Darstellung des Bildes 'p' soll dem "virtuellen Stift" 'pen' ein - realer Stift zugeordnet werden, der möglichst die Farbe 'colour' und - die Dicke 'thickness' hat und dabei Linien mit dem Typ 'line type' - zeichnet. Es wird die beste Annäherung für das Ausgabegerät für - diese Parameter genommen. Dabei gelten folgende Vereinbarun - gen: - - Farbe: negative Farben setzten den Hintergrund, positive Farben - zeichnen im Vordergrund. - - 0 Löschstift (falls vorhanden) - 1 Standardfarbe des Endgeräts (schwarz oder weiß) - 2 rot - 3 blau - 4 grün - 5 schwarz - 6 weiß > 20 nicht normierte Sonderfarben - - Dicke: 0 - Standardstrichstärke des Endgerätes > 0 - Strichstärke in 1/10 mm - - Typ: - 0 keine sichtbare Linie - 1 durchgängige Linie - 2 gepunktete Linie - 3 kurz gestrichelte Linie - 4 lang gestrichelte Linie - 5 Strichpunktlinie - - Die hier aufgeführten Möglichkeiten müssen nicht an allen grafischen - Endgeräten vorhanden sein. Der geräteabhängige Graphik-Treiber - wählt jeweils die für ihn bestmögliche Annäherung. - - Fehlerfälle: - * pen < 1 - * pen > 16 - -#ib#size#ie# - INT PROC size (PICFILE CONST p) - Zweck: Liefert die aktuelle Größe eines PICFILEs in Bytes. - -#ib#stretch#ie# - PICTURE PROC stretch (PICTURE CONST pic, REAL CONST xc, yc) - Zweck: Das PICTURE 'pic' wird in X-Richtung um den Faktor 'xc', in - Y-Richtung um den Faktor 'yc' gestreckt (bzw. gestaucht). Dabei - bewirkt der Faktor - c > 1 eine Streckung - 0 < c < 1 eine Stauchung - c < 0 zusätzlich eine Achsenspiegelung - - PICTURE PROC stretch (PICTURE CONST pic, REAL CONST xc, yc, zc) - Zweck: Das dreidimensionale PICTURE 'pic' wird entsprechend den - angegeben Faktoren 'xc', 'yc' und 'zc' gestreckt. Wirkung s.o. - -#ib#translate#ie# - PICTURE PROC translate (PICTURE CONST pic, REAL CONST dx, dy) - Zweck: Das PICTURE 'pic' wird um 'dx' und 'dy' verschoben. - Fehlerfall: - * picture is threedimensional - 'pic' ist dreidimensional. - - PICTURE PROC translate (PICTURE CONST pic, REAL CONST dx, dy, dz) - Zweck: Das PICTURE 'pic' wird um 'dx', 'dy' und 'dz' verschoben. - Fehlerfall: - * picture is twodimensional - Das PICTURE 'pic' ist zweidimensional - -#ib#two dimensional#ie# - PROC two dimensional (PICFILE VAR p) - Zweck: Setzt als Projektionsart zweidimensional. - -#ib#view#ie# - PROC view (PICFILE VAR p, REAL CONST alpha, phi, theta) - Zweck: Dreidimensionale Bilder werden häufig nicht direkt von vorne - dargestellt, sondern für die Betrachtung gedreht. Mit der Prozedur - 'view' kann diese Betrachtungsrichtung durch die Polarwinkel 'phi' - und 'theta' angegeben werden. Mit dem Winkel 'alpha' kann dann - das Bild um den Mittelpunkt der Zeichenfläche gedreht werden. - Dadurch kann ein Bild auch auf einem Terminal hochkant gestellt - werden. Voreingestellt ist 'phi = 0, theta = 0 und alpha = 0', d.h. - direkt von oben. - - Im Gegensatz zu 'rotate' hat 'view' keine Wirkung auf das eigentli - che Bild (PICFILE), sondern nur auf die gewählte Darstellung. So - addieren sich zwar aufeinanderfolgende "Rotationen", 'view' aber - geht immer von der Nullstellung aus. Auch kann das Bild durch eine - "Rotation" ganz oder teilweise aus oder in das Darstellungsfenster - ('window') gedreht werden. Bei 'view' verändern sich die Koordina - ten der Punkte nicht, d.h. das Fenster wird mitgedreht. - -#ib#viewport#ie# - PROC viewport (PICFILE VAR p, - REAL CONST hormin, hormax, vertmin, vertmax) - Zweck: Die Zeichenfläche auf dem Endgerät, auf dem das Bild dargestellt - werden soll, wird spezifiziert. Dabei wird sowohl die Größe als auch - die relative Lage der Zeichenfläche definiert. Der linke untere - Eckpunkt der physikalischen Zeichenfläche des Gerätes hat die - Koordinaten (0.0, 0.0). Die definierte Zeichenfläche erstreckt sich - -#type("modern12")# - 'hormin' - 'hormax' in der Horizontalen, - 'vertmin' - 'vertmax' in der Vertikalen. -#type("trium10")# - - So liegt der linke untere Eckpunkt dann bei (hormin, vertmin), der - rechte obere bei (hormax, vertmax). - - Damit sowohl geräteunabhängige als auch maßstabsgerechte - Zeichnungen möglich sind, können die Koordinaten in zwei Arten - spezifiziert werden : - - a) Gerätekoordinaten - Die Koordinaten können Werte von 0.0 bis 2.0 annehmen. Dabei - hat die kürzere Seite der physikalischen Zeichenfläche defini - tionsgemäß die Länge 1.0. - - b) absolute Koordinaten - Die Werte werden in cm angegeben. Für die Maximalwerte sind - nur Werte größer als 2.0 möglich. - - Voreingestellt ist - -#type("modern12")# - viewport (0.0, 1.0, 0.0, 1.0), -#type("trium10")# - - d.h. das größtmöglichste Quadrat, beginnend in der linken unteren - Ecke der physikalischen Zeichenfläche. In vielen Fällen wird diese - Einstellung ausreichen, so daß der Anwender kein eigenes 'viewport' - definieren muß. - - Der Abbildungsmaßstab wird durch das Zusammenspiel von 'view - port' und 'window' festgelegt (siehe dort). Dabei ist insbesondere - darauf zu achten, daß winkeltreue Darstellungen nur bei gleichem - X- und Y-Maßstab möglich sind. Da man oft quadratische Fenster - ('window') verwendet, wurde als Standardfall auch ein quadratisches - 'viewport' gewählt. - -#ib#where#ie# - PROC where (PICTURE CONST pic, REAL VAR x, y) - Zweck: Die aktuelle Stiftposition wird in 'x' und 'y' eingetragen. - Fehlerfall: - * picture is threedimensional - Das PICTURE 'pic' ist dreidimensional - - PROC where (PICTURE CONST pic, REAL VAR x, y, z) - Zweck: Die aktuelle Stiftposition wird in 'x', 'y' und 'z' eingetragen. - Fehlerfall: - * picture is twodimensional - Das PICTURE 'pic' ist zweidimensional - -#ib#window#ie# - PROC window (PICFILE VAR p, REAL CONST x min, x max, y min, y max) - Zweck: Für die Darstellung eines zweidimensionalen Bildes wird das - darzustellende Fenster definiert. Alle Bildpunkte, deren X-Koordi - naten im Intervall [x min, x max] und deren Y-Koordinaten im - Intervall [y min, y max] liegen, gehören zum definierten Fenster. - Vektoren, die über dieses Fenster hinausgehen, werden abge - schnitten. Dieses Fenster wird auf die spezifizierte Zeichenfläche - abgebildet. (Das ist standardmäßig das größtmögliche Quadrat auf - dem ausgewählten Gerät). - - Der Darstellungsmaßstab ergibt sich als - -#type("modern12")# - x max - x min - ----------------------------------------- - horizontale Seitenlänge der Zeichenfläche - - y max - y min - ----------------------------------------- - vertikale Seitenlänge der Zeichenfläche -#type("trium10")# - - Für eine winkeltreue Darstellung müssen X- und Y-Maßstab - gleich sein! Einfach können winkeltreue Darstellung erreicht - werden, wenn das Fenster eine quadratische Form hat. Die - Zeichenfläche ('viewport') ist dementsprechend als Quadrat vorein - gestellt. - - PROC window (PICFILE VAR p, - REAL CONST x min, x max, y min, y max, z min, z max) - Zweck: Für die Darstellung eines dreidimensionalen Bildes wird das darzu - stellende Fenster definiert. Alle Bildpunkte, deren X-Koordinaten im - Intervall [x min, x max] und deren Y-Koordinaten im Intervall [y min, - y max] und deren Z-Koordinaten im Intervall [z min, z max] liegen, - gehören zum definierten Fenster. Dieses dreidimensionale Fenster - (Quader) wird entsprechend der eingestellten Projektionsart (ortho - grafisch, perspektivisch oder schiefwinklig) und den Betrachtungs - winkeln (s. 'view') auf die spezifizierte Zeichenfläche abgebildet. (Das - ist standardmäßig das größtmögliche Quadrat auf dem ausgewählten - Gerät.) Linien, die außerhalb dieses Quadrates liegen, werden - abgeschnitten. - - Anders als im zweidimensionalen Fall ist das Problem der Maßstäbe - nicht mehr nur durch das Zusammenspiel von 'window' und 'view - port' zu beschreiben. Hier spielen auch Projektionsart und Dar - stellungswinkel eine Rolle. Falls alle Darstellungswinkel den Wert 0.0 - haben, gilt das für den zweidimensionalen Fall gesagte für die Ebene - (y = 0.0) entsprechend. - -#ib#write is possible#ie# - BOOL PROC write is possible (PICTURE CONST pic, INT CONST space) - Zweck: Liefert 'TRUE', falls 'space' Bytes Platz in 'pic' vorhanden ist. - - - - - - diff --git a/doc/graphic/GRAPHIK.book b/doc/graphic/GRAPHIK.book deleted file mode 100644 index 435d9e4..0000000 --- a/doc/graphic/GRAPHIK.book +++ /dev/null @@ -1,897 +0,0 @@ -#type ("times8")##limit (11.0)##start (2.2, 1.5)##pagelength (17.4)##block# - -#head# -#type ("triumb14")# -#center#EUMEL-Grafik-System - -#type ("times8")# -#end# -#type ("triumb14")# Teil 10: Graphik#type ("times8")# - - -#type ("trium12")# -#on("b")#1. Übersicht#off("b")# -#type ("times8")# - -#limit (7.0)##type("times6")# - #on("i")#Dieser Teil des Benutzer-Handbuchs beschreibt die Graphik- - Fähigkeiten des EUMEL-Systems. Die Graphik-Pakete gehö - ren nicht zum Eumel-Standard, sondern sind Anwenderpake - te, die im Quellcode ausgeliefert und von jeder Installation in das - System aufgenommen werden können. #off("i")# -#limit (11.0)# -#foot# - Eventuell müssen Programme erstellt werden, die die Anpassungen für spezielle graphische Geräte einer Installation - vornehmen, soweit diese nicht von den EUMEL-Anbietern bezogen werden können. -#end# - -#type("times8")# - Das #on("b")#Graphik-System#off("b")# ermöglicht es, durch ELAN-Programme geräteunabhängige Infor - mationen für Zeichnungen (#on("i")#Graphiken#off("i")#) zu erstellen. Die Graphik erzeugenden Programme - brauchen dabei keine geräteabhängigen Größen oder Unterprogramme zu enthalten. Sie - befassen sich somit ausschließlich mit der Erzeugung der problemorientierten Information - für die Konstruktion einer Zeichnung. Nach der geräteunabhängigen Erzeugung einer - Graphik kann diese auf unterschiedlichen Geräten ausgegeben werden (z.B. erst auf einem - Terminal zur Kontrolle und dann auf einem Plotter). - - Die EUMEL-Graphik umfaßt zwei- und dreidimensionale Graphik. Im dreidimensiona - len Fall sind perspektivische, orthografische und schiefwinklige Projektionen mit beliebi - gen Betrachtungswinkeln möglich. - - Bei der EUMEL-Graphik wird streng zwischen Erzeugung und Manipulation von Gra - phiken auf der einen und der Darstellung der erzeugten Bilder auf der anderen Seite - unterschieden. Für die Erzeugung und Manipulation der Graphiken wird von den Paketen - #on("i")#picture#off("i")# und #on("i")#picfile#off("i")# der Datentype #on("b")#PICTURE#off("b")# bzw. #on("b")#PICFILE#off("b")# zur Verfügung gestellt. Dabei - müssen Ausschnitt, Maßstab, Betrachtungswinkel und Projektionsart erst bei der Darstel - lung festgelegt werden. Diese Konstruktion des Graphik-Systems hat folgende Vorteile: - - a) Programme, die Graphik-Information erzeugen, sind geräteunabhängig. Das bedeu - tet, das der Programmierer sich ausschließlich mit einem logischen Problem befassen - muß und nicht mit gerätespezifischen Besonderheiten. - - b) Graphiken können auf mehreren unterschiedlich gearteten Geräten mehrmals darge - stellt werden, ohne daß das erzeugende Programm geändert oder neu gestartet werden - muß. Z.B. kann ein Programmierer eine Graphik erst auf dem Terminal überprüfen, - bevor er die Graphik auf einem Plotter zeichnen läßt. - - c) Graphiken können leicht geändert (z. B. vergrößert oder in eine Richtung gestreckt - o.ä.) werden, ohne daß sie erneut erzeugt werden müssen. Zudem können Graphiken - aneinander oder übereinander gelegt werden. - - d) Graphiken mit unterschiedlichen Farben, Strichen usw. können leicht erzeugt werden. - - e) Der Anschluß von neuen Graphik.Geräten durch Benutzer ist leicht möglich, ohe daß - die Graphik-Programme geändert werden müssen. - - f) Plotter können wie Drucker an einen Spooler gehängt werden. - - g) Bilder können als PICFILEs gespeichert und versandt werden. - - h) Es können auch auf Systemen ohne graphische Ausgabegeräte Graphiken erzeugt - werden. - - i) Es können mit einfachen Mitteln universelle Unterprogrammpakete erstellt werden, - um die Standardzeichnungen (Darstellen einer Funktion, Balken oder Liniendiagram - me, Achsen etc.) zu erstellen. - - -#type ("trium12")# -#on("b")#2. Erzeugung von Bildern#off("b")# -#type ("times8")# - - Bilder entstehen in Objektion vom Datentyp #on("b")#PICTURE#off("b")#. Diese müssen mit der Prozedur - #on("i")#nilpicture#off("i")# initialisiert werden. Sie enthalten dann ein leeres Bild, dessen Dimension noch - nicht festgelegt ist. Die Dimension eines #on("i")#PICTURE#off("i")#s wird mit dem ersten Schreibzugriff - (#on("i")#move, draw#off("i")# o.ä.) festgelegt. Ein #on("i")#PICTURE#off("i")# kann immer nur entweder zwei- oder - dreidimensional sein. - Außerdem kann einem #on("i")#PICTURE#off("i")# mit der Prozedur #on("i")#pen#off("i")# genau ein virtueller Stift zugeord - net oder der aktuelle Stift erfragt werden (Standardeinstellung: 1). - - Für Erzeugung eines Bildes wird ein virtueller Zeichenstift benutzt, dem bei der Darstel - lung jeweils genau ein realer Stift zugeordnet wird. Dieser Stift kann mit der Prozedur - #on("b")#move#off("b")# oder #on("b")#move r #off("b")#auf eine bestimmte Stelle positioniert werden ohne zu zeichnen. Mit - #on("b")#draw#off("b")# oder #on("b")#draw r#off("b")# wird eine Linie von der letzten Position zur angegebene Position - gezeichnet. Die aktuelle Stiftposition kann dabei mit #on("b")#where#off("b")# abgefragt werden. - Außerdem existiert noch die Prozedur #on("b")#draw#off("b")# die einen Text zur Beschriftung der Zeich - nung darstellt, sowie #on("b")#bar#off("b")# zum Zeichnen eines Balkens für Balkendiagramme, #on("b")#circle#off("b")# zum - Zeichnen eines Kreisbogens für Kreisdiagramme und #on("b")#mark#off("b")# zum Markiern von Positionen. - Dabei wird die aktuelle Stiftposition aber nicht verändert. - -#type ("trium12")# -#on("b")#3. Manipulation von PICTUREs#off("b")# -#type ("times8")# - - Erstellte PICTUREs können auch als Ganzes manipuliert werde. Dazu dienen die Prozedu - ren #on("b")#translate, stretch#off("b")# und #on("b")#rotate#off("b")#. Es ist auch möglich mehrere PICTURE mit dem Opera - tor #on("b")#CAT#off("b")# aneinanderzufügen, wenn beide PICTURE die gleiche Dimension haben. In - solcherart manipulierten Bildern kann ohne Einschränkung weitergezeichnet werden, - solange die maximale Größe nicht überschritten wird. - -#type ("trium12")# -#on("b")#4. Darstellung und Speicherung #off("b")# -#type ("times8")# - - Für die Darstellung und Speicherung der erzeugten Bilder existiert der Typ #on("b")#PICFILE#off("b")#. - Dieser besteht aus eienm Datenraum mit max. 1024 PICTUREs, die mit den Prozeduren #on("b")# - delete picture, insert picture, read picture, write picture, get picture#off("b")# und #on("b")#put picture#off("b")# einge - geben bzw. ausgegeben werden können. - Für die Positionierung innerhalb eines PICFILES stehen die Prozeduren #on("b")#to pic, up, down, - eof, picture no, pictures#off("b")# zur Verfügung. - Für die Assoziation mit einem benannten Datenraum existiert ähnlich wie beim Datentyp - FILE die Prozedur #on("b")#picture file#off("b")#; unbenannte Datenräume können mit dem Operator #on("b")#:=#off("b")# - assoziert werden. - Die Darstellung des PICFILES auf einem Zeichengerät erfolgt mit der Prozdur #on("b")#plot#off("b")#. - Da die Graphiken aber in #on("i")#Weltkoordinaten#off("i")# erzeugt werden und die spätere Darstellung - vollkommen unbeachtet bleibt, müssen gewisse Darstellungsparameter für die Zeichnung - gesetzt werden. Dies Parameter werden im PICFILE abgelegt und gelten jeweils für alle - darin enthaltenen PICTURE. Dadurch ist es möglich, einen PICFILE mit spezifierter - Darstellungsart über einen SPOOLER an einen Plotter zu senden oder die bei der letzten - Betrachtung gewählte Darstellung beizubehalten oder zu ändern. - Für die Darstellung können den virtuellen Stiften mit der Prozedur #on("b")#select pen#off("b")# reale Stifte - zugeordnet werden. Voreingestellt ist für alle virtuellen Stifte die Standardfarbe, Standard - stärke und durchgängige Linie. Mit #on("b")#background#off("b")# kann eine bestimmte Hintergrundfarbe - gewählt werden. - Indem man einem PICTURE den Stift 0 zuordnet, kann man dieses auch Ausblenden - wenn es bei dieser Darstellung stört. - Die Größe der realen Zeichenfläche kann mit #on("b")#viewport#off("b")# eingestellt werden, wobei die - gesamte Zeichenfäche voreingestellt ist. Dadurch können auch mehrere PICFILE auf ein - Blatt oder einen Bildschirm gezeichnet werden, wenn man durch Angabe von #on("i")#background - (0)#off("i")# das Löschen der Zeichenfläche unterdrückt. - - -#type ("trium12")# -#on("b")#5. Darstellung zweidimensionaler Graphik#off("b")# -#type ("times8")# - - Bei der Darstellung zweidimensionaler Bilder muß der zu zeichnende Ausschnitt (das - #on("i")#Fenster#off("i")#) angegeben werden. Mit der Prozedur #on("b")#window#off("b")# wird durch Angabe der minimalen - und maximalen X- bzw. Y-Koordinaten ein Fenster definiert. Linien, die über dieses - Fenster hinausgehen, werden abgeschnitten. Dadurch kann man einen beliebigen Detailaus - schnitt eines Bildes ausgeben, ohne das Bild neu generieren zu müssen. - Da das so definierte Fenster auf die mit #on("i")#viewport#off("i")# definierte Zeichenfläche abgebildet wird, - ist der Abbildungsmaßstab durch das Zusammenspiel von #on("i")#viewport#off("i")# und #on("i")#window#off("i")# bestimmt. - Wenn eine Winkeltreue Darstellung erreicht werdenn soll, muß das Verhältnis der durch - #on("i")#viewport#off("i")# eingestellten Breite und Höhe und das Verhältnis des durch #on("i")#window#off("i")# eingestellten - Ausschnitts gleich sein. - -#type ("trium12")# -#on("b")#6. Darstellung dreidimensionaler Graphik#off("b")# -#type ("times8")# - - Bei dreidimensionalen Zeichnungen wird das Fenster ebenfalls mit #on("b")#window#off("b")# definiert, - wobei dann allerdings auch der Wertebereich der dritten Dimension (Z-Koordinaten) zu - berücksichtigen ist. Auch hierbei werden Linien, die über die spezifierte Darstellungs - fläche hinausgehen abgeschnitten. Das Abschneiden erfolgt allerdings erst nach der Projek - tion auf die Darstellungsfläche, so daß auch Vektoren zu sehen sind, die über das mit - #on("i")#window#off("i")# angegebene Quader hinausgehen, wenn ihre Projektion innerhalb der Zeichen - fläche liegt. - Da die dreidimensionale Graphik auf eine zweidimensionale Fläche projeziert wird, - können aber noch weitere Darstellungsparameter angegeben werden. Der Betrachtungswin - kel wird mit Hilfe der Prozedur #on("b")#view#off("b")# angegeben. Ebenfalls kann mit #on("b")#view#off("b")# der Winkel der - Y-Achse zur Horizontalen angegeben werden. - Zur Spezifikation der gewünschten Projektionsart existieren #on("b")#orthographic#off("b")# (orthographische - Projektion), #on("b")#perspective#off("b")# (perspektivische Projektion, der Fluchtpunkt ist frei wählbar) und - #on("b")#oblique#off("b")# (schiefwinklige Projektion). - -#page# -#type ("trium12")# -#on("b")#7. Beispiele#off("b")# -#type ("times8")# - - #on("u")#Sinuskurve#off("u")# - -#type("micro")# -initialisiere picfile; -zeichne überschrift; -zeichne achsen; -zeichne sinuskurve; -wähle darstellung; -plot (p) . - -initialisiere picfile: - PICFILE VAR p :: picture file ("SINUS") . - -zeichne überschrift: - PICTURE VAR überschrift :: nilpicture; - move (überschrift, -pi/2.0, 1.0); - draw (überschrift, "sinus (x) [-pi, +pi]", 0.0, 1.0, 0.6); - put picture (p, überschrift) . - - zeichne achsen: - PICTURE VAR achsen :: nilpicture; - zeichne x achse; - zeichne y achse; - put picture (p, achsen) . - - zeichne x achse: - move (achsen, -pi, 0.0); - draw (achsen, pi, 0.0) . - - zeichne y achse: - move (achsen, 0.0, -1.0); - draw (achsen, 0.0, +1.0) . - - zeichne sinuskurve: - PICTURE VAR sinus :: nilpicture; - REAL VAR x :: -pi; - - move (sinus, x, sin (x)); - REP x INCR 0.1; - draw (sinus, x, sin (x)) - UNTIL x >= pi PER; - - put picture (p, sinus) . - - wähle darstellung: - window (p, -pi, pi, -1.0, 1.3); - viewport (p, 0.0, 0.0, 0.0, 0.0) . - -#page# -#type ("times8")# - #on("u")#Achsenkreuz#off("u")# - -#type("micro")# -initialisiere picfile; -zeichne die x achse; -zeichne die y achse; -zeichne die z achse; -stelle das achsenkreuz dar . - -initialisiere picfile: - PICFILE VAR p :: picture file ("KREUZ") . - - zeichne die x achse: - PICTURE VAR x achse := nilpicture; - move (x achse, -1.0, 0.0, 0.0); - draw (x achse, "-X", 0.0, 0.0, 0.0); - draw (x achse, 1.0, 0.0, 0.0); - draw (x achse, "+X", 0.0, 0.0, 0.0); - put picture (p, x achse) . - - zeichne die y achse: - PICTURE VAR y achse := nilpicture; - move (y achse, 0. 0, -1.0, 0.0); - draw (y achse, "-Y", 0.0, 0.0, 0.0); - draw (y achse, 0.0, 1.0, 0.0); - draw (y achse, "+Y", 0.0, 0.0, 0.0); - put picture (p, y achse) . - - zeichne die z achse: - PICTURE VAR z achse := nilpicture; - move (z achse, 0. 0, 0.0, -1.0); - draw (z achse, "-Z", 0.0, 0.0, 0.0); - draw (z achse, 0.0, 0.0, 1.0); - draw (z achse, "+Z", 0.0, 0.0, 0.0); - put picture (p, z achse) . - - stelle das achsenkreuz dar: - viewport (p, 0. 0, 1.0, 0.0, 1.0); - window (p, -1.1, 1.1, -1.1, 1.1); - oblique (p, 0.25, 0.15); - plot (p) . - -#foot# - #type("times6")# - Diese beiden Beispielprogramme befinden sich ebenfalls auf dem STD-Archive unter dem Namen #on("i")#Beispiel.Sinus#off("i")# und - #on("i")#Beispiel.Kreuz#off("i")#. -#end# - -#page# -#type ("triumb14")# Beschreibung der Graphik-Prozeduren -#type ("times8")# - - -#type ("trium12")# -#on("b")#1. PICTURE-Prozeduren#off("b")# -#type ("times8")# - -#limit (7.0)##type("times6")# - #on("i")#Zweidimensionale PICTURES brauchen weniger Speicherplatz - als dreidimensionale. Daher werden in einigen Fehlermeldungen - unterschiedliche Größen angegeben. - -#limit (11.0)##type("times8")# - -#type("times10")##on("b")#:=#off("b")##type("times8")# - OP := (PICTURE VAR l, PICTURE CONST r) - Zweck: Zuweisung - -#type("times10")##on("b")#CAT#off("b")##type("times8")# - OP CAT (PICTURE VAR l, PICTURE CONST r) - Zweck: Aneinanderfügen von zwei PICTURE. - Fehlerfälle: - * left dimension <> right dimension - Es können nur PICTURE mit gleicher Dimension angefügt werden. - * Picture overflow - Die beiden PICTURE überschreiten die maximale Größe eines PICTURE. - -#type("times10")##on("b")#nilpicture#off("b")##type("times8")# - PICTURE PROC nilpicture - Zweck: Die Prozedur liefert ein leeres PICTURE zur Initialisierung. - - PICTURE PROC nilpicture (INT CONST pen) - Zweck: Die Prozedur liefert ein leeres PICTURE mit dem Stift #on("i")#pen#off("i")# zur Initialisierung. - -#type("times10")##on("b")#draw#off("b")##type("times8")# - PROC draw (PICTURE VAR p, TEXT CONST text, REAL CONST angle, height, - width) - Zweck: Der angegebene Text wird unter dem Winkel #on("i")#angle#off("i")# gegenüber der Waagerech - ten mit der Zeichenhöhe #on("i")#hight#off("i")# und der Breite #on("i")#width#off("i")# gezeichnet. #on("i")#angle#off("i")# wird in - Winkelgrad angegeben. #on("i")#height#off("i")# und #on("i")#width#off("i")# werden in #on("i")#Prozenten#off("i")# der Breite bzw. - Höhe der Zeichenfläche angegeben, bei 0 wird - die Standardhöhe- und breite angenommen. - Der Anfang ist dabei die aktuelle Stiftposition, die nicht verändert wird. Es könne - auch die Steuerzeichen ""1"", ""2"", ""3"", ""10"", ""13"" benutzt werden, - wobei sie immer in der Richtung #on("i")#angle#off("i")# wirken. - Fehlerfälle: - * Picture overflow - Der Text paßt nicht mehr in das PICTURE. - -#type("times10")##on("b")#draw#off("b")##type("times8")# - PROC draw (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Zeichnen einer Linie von der aktuellen Position zur Position (x, y, z). - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC draw (PICTURE VAR p, REAL CONST x, y) - Zweck: Zeichnen einer Linie von der aktuellen Position zur Position (x, y). - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -#type("times10")##on("b")#draw r#off("b")##type("times8")# - PROC draw r (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Zeichnen einer Linie der Länge (x, y, z) relativ zur aktuellen Position. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC draw r (PICTURE VAR p, REAL CONST x, y) - Zweck: Zeichnen einer Linie der Länge (x, y) relativ zur aktuellen Position. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -#type("times10")##on("b")#move#off("b")##type("times8")# - PROC move (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Die aktuelle Position wird auf (x, y, z) gesetzt. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC move (PICTURE VAR p, REAL CONST x, y) - Zweck: Die aktuelle Position wird auf (x, y) gesetzt. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -#type("times10")##on("b")#move r#off("b")##type("times8")# - PROC move r (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Die aktuelle Position wird um (x, y, z) erhöht. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC move r (PICTURE VAR p, REAL CONST x, y) - Zweck: Die aktuelle Position wird um (x, y) erhöht. - Position. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - - -#type("times10")##on("b")#bar#off("b")##type("times8")# - PROC bar (PICTURE VAR p, REAL CONST width, hight, INT CONST pattern): - Zweck: Die Prozedur zeichnet an der aktuellen Position einen Balken mit dem Muster - #on("i")#pattern#off("i")#: - 0 = Leerer Balken - 1 = Gepunkteter Balken - 2 = Gefüllter Balken - 3 = Horizontale Linien - 4 = Vertikale Linien - 5 = Gekreuzte Linien - 6 = Diagonale Linien von Links nach Rechts - 7 = Diagonale Linien von Rechts nach Links - 8 = Gekreuzte diagonale Linien - > 8 = nicht normiertes Sondermuster - Die aktuelle Stiftposition wird dabei nicht verändert. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - - PROC bar (PICTURE VAR p, REAL CONST from, to, hight, INT CONST pattern): - Zweck: Die Prozedur zeichnet einen Balken von der Position #on("i")#from#off("i")# zur Position #on("i")#to#off("i")# und der - Höhe #on("i")#height#off("i")# mit dem Muster #on("i")#pattern#off("i")#. - s.o. - -#type("times10")##on("b")#circle#off("b")##type("times8")# - PROC circle (PICTURE VAR p, REAL CONST radius, from, to, INT CONST pattern) - Zweck: Die Prozedur zeichnet an der aktuellen Position ein Kreissegment vom Winkel - #on("i")#from#off("i")# bis #on("i")#to#off("i")# (im Gradmaß) mit dem Muster #on("i")#pattern#off("i")# (s.o.). Der #on("i")#radius#off("i")# wird in - Prozenten der Diagonalen der Zeichenfläche angegeben. - Die aktuelle Stiftposition wird dabei nicht verändert. Dieses Kreissegment ist in - jedem Fall 2-dimensional, so das es durch Drehungen nicht verändert wird. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -#type("times10")##on("b")#mark#off("b")##type("times8")# - PROC mark (PICTURE VAR p, REAL CONST size, INT CONST no) - Zweck: Es wird ein Marker mit der Größe #on("i")#size#off("i")# in Prozenten der Diagonalen der Zeichen - fläche an der aktuellen Stiftposition ausgegeben, ohne diese zu verändern. Es - sollten dabei mindestens 10 verschiedene Marker gewählt werden können. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - -#type("times10")##on("b")#dim#off("b")##type("times8")# - INT PROC dim (PICTURE CONST pic) - Zweck: Liefert die Dimension eines PICTURE. - -#type("times10")##on("b")#pen#off("b")##type("times8")# - INT PROC pen (PICTURE CONST p) - Zweck: Liefert den virtuellen Stift des PICTURE - - PICTURE PROC pen (PICTURE CONST p, INT CONST pen) - Zweck: Setzen des (virtuellen) Stiftes eines PICTURE. - Bei #on("i")#pen#off("i")# = 0 wird das Picture nicht gezeichnet. - Fehlerfälle: - * pen out of range - Der gewünschte Stift ist kleiner als 0 oder größer als 16. - -#type("times10")##on("b")#extrema#off("b")##type("times8")# - PROC extrema (PICTURE CONST p, REAL VAR x min, x max, y min, y max) - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICTURE. - Fehlerfälle: - * Picture is three dimensional - - PROC extrema (PICTURE CONST p, REAL VAR x min, x max, y min, y max, - z min, z max) - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICTURE. - Fehlerfälle: - * Picture is two dimensional - -#type("times10")##on("b")#where#off("b")##type("times8")# - PROC where (PICTURE CONST p, REAL VAR x, y, z) - Zweck: Die Prozedur liefert die aktuelle Stiftposition. - Fehlerfälle: - * Picture is two dimensional - - PROC where (PICTURE CONST p, REAL VAR x, y, z) - Zweck: Die Prozedur liefert die aktuelle Stiftposition. Fehlerfälle: - * Picture is three dimensional - -#type("times10")##on("b")#rotate#off("b")##type("times8")# - PROC rotate (PICTURE VAR p, REAL CONST angle) - Zweck: Das PICTURE wird um den Punkt (0, 0) um den Winkel #on("i")#angle#off("i")# (im Gradmaß) im - mathematisch positiven Sinn gedreht. - - PROC rotate (PICTURE CONST p, REAL CONST phi, theta, lambda) - Zweck: Das PICTURE wird um den Winkel #on("i")#lambda#off("i")# um die Drehachse #on("i")#(phi, theta)#off("i")# ge - dreht. - -#type("times10")##on("b")#stretch#off("b")##type("times8")# - PROC stretch (PICTURE VAR pic, REAL CONST sx, sy) - Zweck: Das PICTURE wird in X-Richtung um den Faktor #on("i")#sx#off("i")#, in Y-Richtung um den - Faktor #on("i")#sy#off("i")# gestreckt (bzw. gestaucht). Dabei bewirkt der Faktor - s > 1 eine Streckung - 0 < s < 1 eine Stauchung - s < 0 zusätzlich eine Achsenspiegelung. - Fehlerfälle: - * Picture is three dimensional - - PROC stretch (PICTURE VAR p, REAL CONST sx, sy, sz) - Zweck: s. o. - Fehlerfälle: - * Picture is two dimensional - -#type("times10")##on("b")#translate#off("b")##type("times8")# - PROC translate (PICTURE VAR p, REAL CONST dx, dy) - Zweck: Das PICTURE wird um #on("i")#dx#off("i")# und #on("i")#dy#off("i")# verschoben. Fehlerfälle: - * Picture is three dimensional - - PROC translate (PICTURE VAR p, REAL CONST dx, dy, dz) - Zweck: Das PICTURE wird um #on("i")#dx, dy#off("i")# und #on("i")#dz#off("i")# verschoben. Fehlerfälle: - * Picture is two dimensional - - -#type ("trium12")# -#on("b")#2. PICFILE-Prozeduren#off("b")# -#type ("times8")# - -#type("times10")##on("b")#plot#off("b")##type("times8")# - PROC plot (TEXT CONST name) - Zweck: Der PICFILE mit dem Namen #on("i")#name#off("i")# wird entsprechend der angegebenen Dar - stellungsart gezeichnet. Diese Parameter (#on("i")#perspective, orthographic, oblique, view, - window etc.#off("i")#) müssen vorher eingestellt werden. - Fehlerfälle: - * PICFILE does not exist - Es existiert kein PICFILE mit dem Namen #on("i")#name#off("i")# - - PROC plot (PICFILE VAR p) - Zweck: Der PICFILE #on("i")#p#off("i")# wird entsprechend der angegebenen Darstellungsart gezeichnet. - Diese Parameter müssen vorher eingestellt werden: - - #on("b")#zweidimensional:#off("b")# - obligat: #on("i")#window#off("i")# (zweidimensional) - optional: #on("i")#view#off("i")# (zweidimensional) - #on("i")#viewport#off("i")# - #on("i")#select pen#off("i")# - - #on("b")#dreidimensional:#off("b")# - obligat: #on("i")#window#off("i")# (dreidimensional) - optional: #on("i")#view#off("i")# (dreidimensional) - #on("i")#orthographic | perspective | oblique#off("i")# - #on("i")#viewport#off("i")# - #on("i")#select pen#off("i")# - - -#type("times10")##on("b")#select pen#off("b")##type("times8")# - PROC select pen (PICFILE VAR p, INT CONST pen, colour, thickness, line type) - Zweck: Für die Darstellung des Bildes #on("i")#p#off("i")# soll dem #on("i")#virtuellen#off("i")# Stift #on("i")#pen#off("i")# ein realer Stift - zugeordnet werden, der möglichst die Farbe #on("i")#colour#off("i")# und die Dicke #on("i")#thickness#off("i")# hat - und dabei Linien mit dem Typ #on("i")#line type#off("i")# zeichnet. Es wird die beste Annäherung - für das Ausgabegerät genommen. - Dabei gelten folgende Vereinbarungen: - - #on("b")#Farbe:#off("b")# Negative Farben werden XOR gezeichnet (dunkel wird hell und hell wird - dunkel), Farbe 0 ist der Löschstift und positive Farben überschreiben - (ersetzen) den alten Punkt mit folgenden Werten: - - 1 Standardfarbe des Endgerätes - 2 rot - 3 blau - 4 grün - 5 schwarz - 6 weiß - > 6 nicht normierte Sonderfarben - - - #on("b")#Dicke:#off("b")# 0 Standardstrichstärke des Endgerätes - > 0 Strichstärke in 1/10 mm. - - - #on("b")#Linientyp:#off("b")# - 0 keine sichtbare Linie - 1 durchgängige Linie - 2 gepunktete Linie - 3 kurz gestrichelte Linie - 4 lang gestrichelte Linie - 5 Strichpunktlinie - > 5 nicht normierte Linie - - - Die hier aufgeführten Möglichkeiten müssen nicht an allen graphischen Endge - räten vorhanden sein. Der geräteabhängige Graphik-Treiber wählt jeweils die - bestmögliche Annäherung. - - Fehlerfälle: - * pen out of range - #on("i")#pen#off("i")# muss im Bereich 1-16 sein. - -#type("times10")##on("b")#background#off("b")##type("times8")# - PROC background (PICFILE VAR p, INT CONST colour) - Zweck: Der Hintergrund wird auf die Farbe #on("i")#colour#off("i")# (s.o.) gesetzt wenn möglich. - Bei der Angabe #on("i")#background (p, 0)#off("i")# wird das Löschen des Bildschirms unterdrückt, - so daß das Zeichen mehrerer PICFILE auf einem Blatt möglich wird. - - INT PROC background (PICFILE CONST p): - Zweck: Liefert die eingestellte Hintergrundfarbe. - -#type("times10")##on("b")#view#off("b")##type("times8")# - PROC view (PICFILE VAR p, REAL CONST alpha) - Zweck: Setzt den Winkel der Y-Achse zur Senkrechten auf #on("i")#alpha#off("i")# Grad, falls diese nicht - senkrecht auf der Betrachtungsebene steht. - - PROC view (PICFILE VAR p, REAL CONST phi, theta) - Zweck: Dreidimensionale Bilder werden häufig nicht direkt von vorne dargestellt, son - dern für die Betrachtung gedreht. Mit der Prozedur #on("i")#view#off("i")# kann die Betrachtungs - richtung durch die Polarwinkel #on("i")#phi#off("i")# und #on("i")#theta#off("i")# (im Gradmass) angegeben werden. - Voreingestellt ist #on("i")#phi#off("i")# = 0 und #on("i")#theta#off("i")# = 0, d.h. senkrecht von oben (Die #on("i")#X- - Achse#off("i")# bildet die Horizontale und die #on("i")#Y-Achse#off("i")# bildet die Vertikale). - Im Gegensatz zu #on("i")#rotate#off("i")# hat #on("i")#view#off("i")# keine Wirkung auf das eigentliche Bild (die - PICTURE werden nicht verändert), sondern nur auf die gewählte Darstellung. So - addieren sich zwar aufeinanderfolgende #on("i")#Rotationen#off("i")#, #on("i")#view#off("i")# aber geht immer von der - Nullstellung aus. Auch kann das Bild durch eine #on("i")#Rotation#off("i")# ganz oder teilweise aus - oder in das Darstellungsfenster (#on("i")#window#off("i")# gedreht werden. Bei #on("i")#view#off("i")# verändern sich - die Koordinaten der Punkte nicht, d. h. das Fenster wird mitgedreht. - - PROC view (PICFILE VAR p, REAL CONST x, y, z) - Zweck: Wie oben, nur werden die Winkel nicht in Polarkoordinaten angegeben, sondern - es wird die Blickrichtung als Vektor in Karthesischen Koordinaten angegeben. - (Der Betrachtungsvektor muß nicht normiert sein). - -#type("times10")##on("b")#viewport#off("b")##type("times8")# - PROC viewport (PICFILE VAR p, REAL CONST hormin, hormax, vertmin, vertmax) - Zweck: Die Zeichenfläche auf dem Endgerät, auf dem das Bild dargestellt werden soll, - wird spezifiziert. Dabei wird sowohl die Größe als auch die relative Lage der - Zeichenfläche definiert. Der linke untere Eckpunkt der physikalischen Zeichen - fläche des Gerätes hat die Koordinaten (0, 0). Die definierte Zeichenfläche er - streckt sich - - #on("i")#hormin - hormax#off("i")# in der Horizontalen, - #on("i")#vertmin - vertmax#off("i")# in der Vertikalen. - - So liegt der linke untere Eckpunkt dann bei (#on("i")#hormin, hormax#off("i")#), der rechte obere - Eckpunkt bei (#on("i")#hormax, vertmax#off("i")#). - - Damit sowohl geräteunabhängige als auch maßstabgetreue Zeichnungen möglich - sind, können die Koordinaten in drei Arten spezifiziert werden: - a) #on("b")#Gerätekoordinaten#off("b")# - Die Koordinaten können Werte von 0.0 bis 2.0 annehmen. Dabei hat die - kürzere Seite der physikalischen Zeichenfläche definitionsgemäß die Länge - 1.0. - b) #on("b")#Absolute Koordinaten#off("b")# - Die Werte werden in #on("i")#cm#off("i")# angegeben. Dabei müssen die Maximalwerte aber - größer als 2.0 sein, da sonst Fall a) angenommen wird. - c) #on("b")#Maximale Zeichenfläche#off("b")# Bei der Angabe (0.0, 0.0, 0.0, 0.0) wird die maxi - male physikalische Zeichenfläche eingestellt. - - Voreingestellt ist - viewport (0.0, 0.0, 0.0, 0.0) - d.h. die größtmögliche physikalische Zeichenfläche, beginnend mit der linken - unteren Ecke. - Der Abbildungsmaßstab wird durch das Zusammenspiel von #on("i")#viewport#off("i")# und - #on("i")#window#off("i")# festgelegt (s. dort). Dabei ist insbesondere darauf zu achten, daß winkel - treue Darstellung nur bei gleichen Verhältnissen von X-Bereich und Breite bzw. - von Y-Bereich und Höhe möglich ist. - - -#type("times10")##on("b")#window#off("b")##type("times8")# - PROC window (PICFILE VAR p, REAL CONST x min, x max, y min, y max) - Zweck: Für die Darstellung eines zweidimensionalen Bildes wird das darzustellende - Fenster definiert. Alle Bildpunkte, deren X-Koordinaten im Intervall [#on("i")#x min, x - max#off("i")#] und deren Y-Koordinaten im Bereich [#on("i")#y min, y max#off("i")#] liegen, gehören zum - definierten Fenster.Vektoren, die außerhalb dieses Fensters liegen, gehen über die - durch #on("i")#viewport#off("i")# Fläche hinaus und werden abgeschnitten. - - Der Darstellungsmaßstab ergibt sich als - - #ub# x max - x min #ue# - horizontale Seitenlänge der Zeichenfläche - - - #ub# y max - y min #ue# - vertikale Seitenlänge der Zeichenfläche - - PROC window (PICFILE VAR p, REAL CONST x min, x max, y min, y max, - z min, z max) - - Zweck: Für die darstellung eines dreidimensionalen Bildes wird das darzustellende Fenster - definiert. Alle Bildpunkte, deren X-Koordinaten im Intervall [#on("i")#x min, x max#off("i")#], - deren Y-Koordinaten im Bereich [#on("i")#y min, y max#off("i")#] und deren Z-Koordinaten im - Bereich [#on("i")#z min, z max#off("i")#] liegen, gehören zum definierten Fenster. Dieses dreidi - mensionale Fenster (#on("i")#Quader#off("i")#) wird entsprechend der eingestellten Projektionsart - (orthographisch, perspektivisch oder schiefwinklig) und den Betrachtungswinkeln - (s. #on("i")#view#off("i")#) auf die spezifizierte Zeichenfläche abgebildet. - Anders als im zweidimensionalen Fall ist das Problem der Maßstaäbe nicht mehr - nur durch das Zusammenspiel von #on("i")#window#off("i")# und #on("i")#viewport#off("i")# zu beschreiben. Hier - spielen auch die Projektionsart und Darstellungswinkel herein. - -#type("times10")##on("b")#oblique#off("b")##type("times8")# - PROC oblique (PICFILE VAR p, REAL CONST a, b) - Zweck: Bei dem (dreidimensionalen) Bild #on("i")#p#off("i")# wird #on("u")#schiefwinklig#off("u")# als gewünschte Projek - tionsart eingestellt. Dabei ist (#on("i")#a, b#off("i")#) der Punkt auf der X-Y-Ebene, auf den der - EinheitsVektor der Z-Richtung abgebildet werden soll. - -#type("times10")##on("b")#orthographic#off("b")##type("times8")# - PROC orthographic (PICFILE VAR p) - Zweck: Bei dem (dreidimensionalen) Bild #on("i")#p#off("i")# wird #on("u")#orthographisch#off("u")# als gewünschte Projek - tionsart eingestellt. Bei der orthographischen Projektion wird ein dreidimensio - naler Körper mit parallelen Strahlen senkrecht auf der Projektionsebene abge - bildet. - -#type("times10")##on("b")#perpective#off("b")##type("times8")# - PROC perspective (PICFILE VAR p, REAL CONST cx, cy, cz) - Zweck: Bei dem (dreidimensionalen) Bild #on("i")#p#off("i")# wird #on("u")#perspektivisch#off("u")# als gewünschte Projek - tionsart eingestellt. Der Punkt (#on("i")#cx, 1/cy, cz#off("i")#) ist der Fluchtpunkt der Projektion, - d. h. alle Parallen zur Z-Achse schneiden sich in diesem Punkt. - -#type("times10")##on("b")#extrema#off("b")##type("times8")# - PROC extrema (PICFILE VAR p, REAL VAR x min, x max, y min, y max) - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICFILE. - - PROC extrema (PICFILE VAR p, REAL VAR x min,x max,y min,y max,z min,z max) - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICFILE. - -#type ("trium12")# -#on("b")#3. Prozeduren zur Manipulation von PICFILE#off("b")# -#type("times 8")# - -#type("times10")##on("b")#:=#off("b")##type("times8")# - OP := (PICFILE VAR l, PICFILE CONST r) - Zweck: Zuweisung des PIFILEs #on("i")#r#off("i")# an das PICFILE #on("i")#l#off("i")# - - OP := (PICFILE VAR p, DATASPACE CONST d) - Zweck: Assoziert die PICFILE Variable #on("i")#p#off("i")# mit dem Datenraum #on("i")#d#off("i")# und initialisiert die - Variable, wenn nötig. - Fehlerfälle: - * dataspace is no PICFILE - Der anzukoppelnde Datenraum hat einen unzulässigen Typ - -#type("times10")##on("b")#picture file#off("b")##type("times8")# - DATASPACE PROC picture file (TEXT CONST name) - Zweck: Assoziaten eines benannten Datenraumes mit einem PICFILE (s.o.). - -#type("times10")##on("b")#to pic#off("b")##type("times8")# - PROC to pic (PICFILE VAR p, INT CONST pos) - Zweck: Positioniert auf das PICTURE Nummer #on("i")#pos#off("i")#. - Fehlerfälle: - * Position underflow - Es wurde eine Position kleiner Null angegeben. - * Position after eof - Es wurde versucht, hinter das Ende eines PICFILE zu positionieren. Die letzte - erlaubte Position ist #on("i")#pictures (p)+1#off("i")#. - -#type("times10")##on("b")#up#off("b")##type("times8")# - PROC up (PICFILE VAR p) - Zweck: Positioniert genau ein PICTURE zurück. - Fehlerfall: - * Position underflow - Es wurde versucht, vor das erste PICTURE zu positionieren - - PROC up (PICFILE VAR p, INT CONST n) - Zweck: Positioniert genau #on("i")#n#off("i")# Picture zurück. - Fehlerfall: - * Position underflow - Es wurde versucht, vor das erste PICTURE zu positionieren - -#type("times10")##on("b")#down#off("b")##type("times8")# - PROC down (PICFILE VAR p) - Zweck: Positioniert genau ein PICTURE vorwärts. - Fehlerfall: - * Position after eof - Es wurde versucht, hinter das Ende eines PICFILE zu positionieren. Die letzte - erlaubte Position ist #on("i")#pictures (p)+1#off("i")#. - - PROC down (PICFILE VAR p, INT CONST n) - Zweck: Positioniert genau #on("i")#n#off("i")# Picture vorwärts. - Fehlerfall: - * Position after eof - Es wurde versucht, hinter das Ende eines PICFILE zu positionieren Die letzte - erlaubte Position ist #on("i")#pictures (p)+1#off("i")#. - -#type("times10")##on("b")#delete picture#off("b")##type("times8")# - PROC delete picture (PICFILE VAR p) - Zweck: Löscht das aktuelle PICTURE - -#type("times10")##on("b")#insert picture#off("b")##type("times8")# - PROC insert picture (PICFILE VAR p) - Zweck: Fügt ein PICTURE #on("u")#vor#off("u")# der aktuellen Position ein. - -#type("times10")##on("b")#read picture#off("b")##type("times8")# - PROC read picture (PICFILE CONST p, PICTURE VAR pic) - Zweck: Liest das aktuelle PICTURE. - -#type("times10")##on("b")#write picture#off("b")##type("times8")# - PROC write picture (PICFILE VAR p, PICTURE CONST pic) - Zweck: Schreibt das PICTURE #on("i")#pic#off("i")# auf der aktuellen Position. - -#type("times10")##on("b")#put picture#off("b")##type("times8")# - PROC put picture (PICFILE VAR p, PICTURE CONST pic) - Zweck: Schreibt das PICTURE #on("i")#pic#off("i")# an die aktuelle Position und erhöht diese um 1. - -#type("times10")##on("b")#get picture#off("b")##type("times8")# - PROC get picture (PICFILE VAR p, PICTURE VAR pic) - Zweck: Liest das PICTURE #on("i")#pic#off("i")# an dir aktuellen Position und erhöht diese um 1. - -#type("times10")##on("b")#eof#off("b")##type("times8")# - BOOL PROC eof (PICFILE CONST p) - Zweck: Liefert genau dann #on("i")#TRUE#off("i")#, wenn das Ende eines PICFILE erreicht ist. - -#type("times10")##on("b")#picture no#off("b")##type("times8")# - INT PROC picture no (PICFILE CONST p) - Zweck: Liefert die Nummer des aktuellen PICTURE. - -#type("times10")##on("b")#pictures#off("b")##type("times8")# - INT PROC pictures (PICFILE CONST p) - Zweck: Liefert die Anzahl PICTURE eines PICFILE. - - -#page# -#type ("trium12")# -#on("b")#4. Auslieferungsumfang#off("b")# -#type ("times8")# - - Die EUMEL-GRAPHIK wird auf einer Diskette mit folgendem Inhalt ausgeliefert. - Archive #on("i")#Graphik#off("i")#: - - "gen Graphik" - "gen Plotter" - "GRAPHIK.book" - "GRAPHIK.Picfile" - "GRAPHIK.Transform" - "GRAPHIK.Plot" - "GRAPHIK.Plotter" - "GRAPHIK.Server" - "GRAPHIK.vektor plot" - "ZEICHENSATZ" - "PC.plot" - "HP7475.plot" - "Beispiel.Kreuz" - "Beispiel.Sinus" - - - - #on("u")#Dateiinhalte#off("u")# - - 1. "gen Graphik" Installationsprogramm für Terminals - 2. "gen Plotter" Installationsprogramm für Plotter - 3. "GRAPHIK.book" enthält diese Beschreibung. - 4. "GRAPHIK.Picfile" enthält die Pakete #on("i")#picture#off("i")# und #on("i")#picfile#off("i")#. - 5. "GRAPHIK.Transform" stellt das Paket #on("i")#transformation#off("i")# zur Verfügung, in dem - interne Prozeduren zur Projektion definiert werden. - 6. "GRAPHIK.Plot" definiert die Prozedur #on("i")#plot#off("i")# zur Darstellung eines - PICFILES auf dem Terminal - 7. "GRAPHIK.Plotter" definiert die Prozedur #on("i")#plotter#off("i")# zur Darstellung eines - PICFILES auf dem Plotter - 8. "GRAPHIK.Server" Server für einen Plotter-Spool - 9. "GRAPHIK.vektor plot" enthält Hilfsprogramme, die bei der Erstellung einer - eigenen Terminalanpassung benutzt werden können. - 10. "ZEICHENSATZ" enthält einen Zeichensatz für Terminals die im Graphik - Modus keinen Text ausgeben können. - 11. "PC.plot" Terminalanpassung für IBM-PC und ähnliche. - 12. "HP7475.plot" Terminalanpassung für HP7474-Plotter und Geräte mit - HP-GL. - 13. "Beispiel.Kreuz" Beispielprogramm - 14. "Beispiel.Sinus" Beispielprogramm - -#type ("trium12")# -#on("b")#5. Installation#off("b")# -#type ("times8")# - - - In der Datei #on("i")#gen Graphik#off("i")# ist ein Installationspragramm enthalten. Nach dem Starten des - Programms mit #on("i")#run ("gen Graphik")#off("i")# fragt es nach dem Dateinamen der Terminalanpas - sung. - Steht keine Terminalanpassung für ein Endgerät zur Verfügung (und kann auch nicht - beschafft werden) so kann man durch Insertieren der Datei #on("i")#GRAPHIK.Picfile#off("i")# lediglich die - Leistungen der Pakete #on("i")#Picture#off("i")# und #on("i")#Picfile#off("i")# nutzen, ohne die erzeugten Graphiken darstellen - zu können. - Zur Benutzung eines #on("i")#Plotters#off("i")# über einen Spooler wird die Datei #on("i")#gen Plotter#off("i")# gestartet. - - - Beispiel: - 1. archive ("Graphik") - 2. fetch all (archive) - 3. release (archive) - 4. run ("gen Graphik") - <-- PC.Plot - - -#type ("trium12")# -#on("b")#6. Besonderheiten der PC.plot-Anpassung#off("b")# -#type ("times8")# - - - Da der IBM-PC verschiedene Graphik- und Text-Modi kennt, wird durch das Pro - gramm #on("i")#PC.plot#off("i")# die Prozedur #on("i")#graphik#off("i")# zusätzlich zur Verfügung gestellt. Sie erlaubt es den - PC in verschiedenen Graphik-Modi zu betreiben. - - PROC graphik (INT CONST modus, pause) - - Modus: 0 --- Keine Graphik (normaler Textmodus) - 1 --- hochauflösende Graphik, 50 Zeilen, - 640 * 400 Punkte, einfarbig - 2 --- hochauflösende Graphik, 25 Zeilen, - 640 * 400 Punkte, einfarbig - 3 --- mittlere Auflösung, 640 * 200 Punkte, 3 Farben - 4 --- IBM-PC Auflösung, 320 * 200 Punkte, 3 Farben. - - Pause: Da der PC bei #on("i")#end plot#off("i")# wieder in den Normalmodus umschaltet und die Graphik - dann nicht mehr zu sehen ist, kann man eine #on("i")#pause#off("i")# angeben. Die hier eingestellte - Zeit ist aber nicht die Länge der Pause, sondern der Kehrwert der Blinkfrequenz - proportional. - - diff --git a/doc/graphic/graphik beschreibung b/doc/graphic/graphik beschreibung deleted file mode 100644 index 53ebe49..0000000 --- a/doc/graphic/graphik beschreibung +++ /dev/null @@ -1,661 +0,0 @@ -#type ("basker12")##limit (16.0)##block# - -#head# -#type ("triumb18")# -#center#EUMEL-Grafik-System -#type ("basker12")# -#end# - #on("italics")#gescheit, gescheiter, - gescheitert#off("italics")# - -#type ("basker14")# -#on("bold")#Beschreibung der Graphik-Prozeduren#off("bold")# -#type ("basker12")# - - #on("italics")#Zweidimensionale PICTURE brauchen weniger Speicherplatz als dreidimen - sionale. Daher werden in einigen Fehlermeldungen unterschiedliche Größen - angegeben.#off("italics")# - -#on("underline")#Picture-Prozeduren#off("underline")# -PICTURE - - -:= - OP := (PICTURE VAR l, PICTURE CONST r) - Zweck: Zuweisung - -CAT - OP CAT (PICTURE VAR l, PICTURE CONST r) - Zweck: Aneinanderfügen von zwei PICTURE. - Fehlerfälle: - * left dimension <> right dimension - Es können nur PICTURE mit gleicher Dimension angefügt werden. - * Picture overflow - Die beiden PICTURE überschreiten die maximale Größe eines - PICTURE. - -nilpicture - PICTURE PROC nilpicture - Zweck: Die Prozedur liefert ein leeres PICTURE zur Initialisierung. - -draw - PROC draw (PICTURE VAR p, TEXT CONST text) - Zweck: Der angegebene Text wird gezeichnet. Der Anfang ist dabei die aktuelle - Stiftposition, die nicht verändert wird. - Fehlerfälle: - * Picture overflow - Der Text paßt nicht mehr in das PICTURE. - - PROC draw (PICTURE VAR p, TEXT CONST text, REAL CONST angle, - height, bright) - Zweck: Der angegebene Text wird unter dem Winkel #on("italics")#angle#off("italics")# gegenüber der - Waagerechten mit der Zeichenhöhe #on("italics")#hight#off("italics")# und der Breite #on("italics")#bright#off("italics")# gezeich - net. Der Anfang ist dabei die aktuelle Stiftposition, die nicht verändert - wird. - Fehlerfälle: - * Picture overflow - Der Text paßt nicht mehr in das PICTURE. - - PROC draw (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Zeichnen einer Linie von der aktuellen Position zur Position (x, y, z). - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC draw (PICTURE VAR p, REAL CONST x, y) - Zweck: Zeichnen einer Linie von der aktuellen Position zur Position (x, y). - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -draw r PROC draw r (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Zeichnen einer Linie der Länge (x, y, z) relativ zur aktuellen Position. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC draw r (PICTURE VAR p, REAL CONST x, y) - Zweck: Zeichnen einer Linie der Länge (x, y) relativ zur aktuellen Position. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -draw cm - PROC draw cm (PICTURE VAR p, REAL CONST x, y) - Zweck: Zeichnen einer Linie von der aktuellen Position zur Position (x, y) cm. - Dabei werden die angegebenen Projektionsparameter nicht beachtet, - sondern die Angaben in #on("bold")#Zentimeter#off("bold")# berechnet. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - -draw cm r - PROC draw cm r (PICTURE VAR p, REAL CONST x, y) - Zweck: Zeichnen einer Linie der Länge (x, y) cm relativ zur aktuellen Position. - Dabei werden die angegebenen Projektionsparameter nicht beachtet, - sondern die Angaben in #on("bold")#Zentimeter#off("bold")# berechnet. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - -move - PROC move (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Die aktuelle Position wird auf (x, y, z) gesetzt. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC move (PICTURE VAR p, REAL CONST x, y) - Zweck: Die aktuelle Position wird auf (x, y) gesetzt. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -move r - PROC move r (PICTURE VAR p, REAL CONST x, y, z) - Zweck: Die aktuelle Position wird um (x, y, z) erhöht. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is two dimensional - - PROC move r (PICTURE VAR p, REAL CONST x, y) - Zweck: Die aktuelle Position wird um (x, y) erhöht. - Position. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - -move cm - PROC move cm (PICTURE VAR p, REAL CONST x, y) - Zweck: Die aktuelle Position wird auf (x, y) cm gesetzt. Dabei werden die an - gegebenen Projektionsparameter nicht beachtet, sondern die Angaben in #on("bold")# - Zentimeter#off("bold")# berechnet. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - -move cm r - PROC move cm r (PICTURE VAR p, REAL CONST x, y) - Zweck: Die aktuelle Position wird um (x, y) cm erhöht. Dabei werden die an - gegebenen Projektionsparameter nicht beachtet, sondern die Angaben in #on("bold")# - Zentimeter#off("bold")# berechnet. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - -bar - PROC bar (PICTURE VAR p, REAL CONST width, hight, INT CONST - pattern): - Zweck: Die Prozedur zeichnet an der aktuellen Position einen Balken mit dem - Muster #on("italics")#pattern#off("italics")#: 0 = Leerer Balken - 1 = Gepunkteter Balken - 2 = Gefüllter Balken - 3 = Horizontale Linien - 4 = Vertikale Linien - 5 = Gekreuzte Linien - 6 = Diagonale Linien von Links nach Rechts - 7 = Diagonale Linien von Rechts nach Links - 8 = Gekreuzte diagonale Linien. - Die aktuelle Stiftposition wird dabei nicht verändert. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - * Unknown pattern - Das angegebene Muster liegt nicht im Bereich 0-8 - -circle - PROC circle (PICTURE VAR p, REAL CONST from, to, INT CONST - pattern) - Zweck: Die Prozedur zeichnet an der aktuellen Position ein Kreissegment vom - Winkel #on("italics")#from#off("italics")# bis #on("italics")#to#off("italics")# (im Gradmaß) mit dem Muster #on("italics")#pattern#off("italics")# (s.o.). Die - aktuelle Stiftposition wird dabei nicht verändert. - Fehlerfälle: - * Picture overflow - Zu viele Befehle in einem PICTURE - * Picture is three dimensional - * Unknown pattern - Das angegebene Muster liegt nicht im Bereich 0-8 - -dim - INT PROC dim (PICTURE CONST pic) - Zweck: Liefert die Dimension eines PICTURE. - -pen - INT PROC pen (PICTURE CONST p) - Zweck: Liefert den virtuellen Stift des PICTURE - - PROC pen (PICTURE VAR p, INT CONST pen) - Zweck: Setzen des (virtuellen) Stiftes eines PICTURE. Bei pen=0 wird das - Picture nicht gezeichnet. - Fehlerfälle: - * pen out of range - Der gewünschte Stift ist kleiner als 0 oder größer als 16. - -extrema - PROC extrema (PICTURE CONST p, REAL VAR x min, x max, y min, y - max) - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICTURE. - Fehlerfälle: - * Picture is three dimensional - - PROC extrema (PICTURE CONST p, REAL VAR x min, x max, y min, y - max, z min, z max) - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICTURE. - Fehlerfälle: - * Picture is two dimensional - -where - PROC where (PICTURE CONST p, REAL VAR x, y, z) - Zweck: Die Prozedur liefert die aktuelle Stiftposition (Angaben mit #on("italics")#cm#off("italics")# werden - dabei nicht berücksichtigt). - Fehlerfälle: - * Picture is two dimensional - - PROC where (PICTURE CONST p, REAL VAR x, y, z) - Zweck: Die Prozedur liefert die aktuelle Stiftposition (Angaben mit #on("italics")#cm#off("italics")# werden - dabei nicht berücksichtigt). - Fehlerfälle: - * Picture is three dimensional - -rotate: - PROC rotate (PICTURE VAR p, REAL CONST angle) - Zweck: Das PICTURE wird um den Punkt (0, 0) um den Winkel #on("italics")#angle#off("italics")# (im - Gradmaß) im mathematisch positiven Sinn gedreht. - Dabei werden nur die Werte von #on("italics")#draw, draw r, move #off("italics")# und #on("italics")#move r#off("italics")# - verändert. - - PROC rotate (PICTURE CONST p, REAL CONST phi, theta, lambda ) : - PICTURE 1-397 - Zweck: Das PICTURE wird um den Winkel #on("italics")#lambda#off("italics")# um die Drehachse #on("italics")#(phi, - theta)#off("italics")# gedreht. - Dabei werden nur die Werte von #on("italics")#draw, draw r, move #off("italics")# und #on("italics")#move r#off("italics")# - verändert. - -stretch - PROC stretch (PICTURE VAR pic, REAL CONST sx, sy) - Zweck: Das PICTURE wird in X-Richtung um den Faktor #on("italics")#sx#off("italics")#, in Y-Rich - tung um den Faktor #on("italics")#sy#off("italics")# gestreckt (bzw. gestaucht). Dabei bewirkt der - Faktor - s > 1 eine Streckung - 0 < s < 1 eine Stauchung - s < 0 zusätzlich eine Achsenspiegelung. - Dabei werden nur die Werte von #on("italics")#draw, draw r, move #off("italics")# und #on("italics")#move r#off("italics")# - verändert. - Fehlerfälle: - * Picture is three dimensional - - PROC stretch (PICTURE VAR p, REAL CONST sx, sy, sz) - Zweck: s. o. - Fehlerfälle: - * Picture is two dimensional - -translate - PROC translate (PICTURE VAR p, REAL CONST dx, dy) - Zweck: Das PICTURE wird um #on("italics")#dx#off("italics")# und #on("italics")#dy#off("italics")# verschoben. - Dabei werden nur die Werte von #on("italics")#draw, draw r, move #off("italics")# und #on("italics")#move r#off("italics")# - verändert. - Fehlerfälle: - * Picture is three dimensional - - PROC translate (PICTURE VAR p, REAL CONST dx, dy, dz) - Zweck: s. o. - Fehlerfälle: - * Picture is two dimensional - -plot PROC plot (PICTURE CONST p) - Zweck: Das Picfile wird gezeichnet. - Achtung: Es wird kein #on("italics")#begin plot#off("italics")# oder #on("italics")#end plot#off("italics")# durchgeführt. Es wird - auch kein Stift gsetzt und die Projektionsparameter bleiben - unverändert. - - -#on("underline")#Graphische PICFILE-Prozeduren#off("underline")# -plot - PROC plot (TEXT CONST name) - Zweck: Der PICFILE mit dem Namen #on("italics")#name#off("italics")# wird entsprechend der angegebenen - Darstellungsart gezeichnet. Diese Parameter (#on("italics")#perspective, orthographic, - oblique, view, window etc.#off("italics")#) müssen vorher eingestellt werden. - Fehlerfälle: - * PICFILE does not exist - Es existiert kein PICFILE mit dem Namen #on("italics")#name#off("underline")# - - PROC plot (PICFILE VAR p) - Zweck: Der PICFILE #on("italics")#p#off("italics")# wird entsprechend der angegebenen Darstellungsart ge - zeichnet. Diese Parameter müssen vorher eingestellt werden: - - #on("bold")#zweidimensional:#off("bold")# - obligat: #on("italics")#window#off("italics")# (zweidimensional) - optional: #on("italics")#view#off("italics")# (zweidimensional) - #on("italics")#viewport#off("italics")# - #on("italics")#select pen#off("italics")# - - #on("bold")#dreidimensional:#off("bold")# - obligat: #on("italics")#window#off("italics")# (dreidimensional) - optional: #on("italics")#view#off("italics")# (dreidimensional) - #on("italics")#orthographic | perspective | oblique#off("italics")# - #on("italics")#viewport#off("italics")# - #on("italics")#select pen#off("italics")# - - -select pen - PROC select pen (PICFILE VAR p, INT CONST pen, colour, thickness, line - type, - BOOL VAR hidden lines) Zweck: Für die - Darstellung des Bildes #on("italics")#p#off("italics")# soll dem #on("italics")#virtuellen#off("italics")# Stift #on("italics")#pen#off("italics")# ein realer Stift - zugeordnet werden, der möglichst die Farbe #on("italics")#colour#off("italics")# und die Dicke #on("italics")#thick - ness#off("italics")# hat und dabei Linien mit dem Typ #on("italics")#line type#off("italics")# zeichnet. Es wird die - beste Annäherung für das Ausgabegerät genommen. - Wenn #on("italics")#hidden lines#off("italics")# auf TRUE gesetzt wird, werden bei dreidimensionalen - Zeichnungen die verdeckten Linien mitgezeichnet, ansonsten werden sie - unterdrückt. Um sicherzustellen, das der Algorithmus auch funktioniert, - müssen die Linien allerdings von vorn nach hinten gezeichnet werden. Es - ist also nicht möglich, das Bild so zu drehen, das die hinteren Linien - zuerst gezeichnet werden. - Dabei gelten folgende Vereinbarungen: - - #on("bold")#Farbe:#off("bold")# Negative Farben werden XOR gezeichnet (dunkel wird hell und - hell wird dunkel), Farbe 0 ist der Löschstift und positive Farben - überschreiben (ersetzen) den alten Punkt mit folgenden Werten: - - 1 Standardfarbe des Endgerätes - 2 rot - 3 blau - 4 grün - 5 schwarz - 6 weiß - > 6 nicht normierte Sonderfarben - - - #on("bold")#Dicke:#off("bold")# 0 Standardstrichstärke des Endgerätes, ansonsten Strichstärke in - 1/10 mm. - - - #on("bold")#Linientyp:#off("bold")# - 0 keine sichtbare Linie - 1 durchgängige Linie - 2 gepunktete Linie - 3 kurz gestrichelte Linie - 4 lang gestrichelte Linie - 5 Strichpunktlinie - > 5 nicht normierte Linie - - #on("bold")#Verdeckte Linien:#off("bold")# - TRUE Verdeckte Linien werden mitgezeichnet - FALSE Verdeckte Linien werden unterdrückt (nur bei drei - dimensionalen PICTURE) - - Die hier aufgeführten Möglichkeiten müssen nicht an allen graphischen - Endgeräten vorhanden sein. Der geräteabhängige Graphik-Treiber wählt - jeweils die bestmögliche Annäherung. - - Fehlerfälle: - * pen out of range - #on("italics")#pen#off("italics")# muss im Bereich 1-16 sein. - -background - PROC background (PICFILE VAR p, INT CONST colour) - Zweck: Der Hintergrund wird auf die Farbe #on("italics")#colour#off("italics")# (s.o.) gesetzt wenn möglich. - - INT PROC background (PICFILE CONST p): - Zweck: Liefert die eingestellte Hintergrundfarbe. - -view - PROC view (PICFILE VAR p, REAL CONST alpha) - Zweck: Setzt den Winkel der Y-Achse zur Senkrechten auf #on("italics")#alpha#off("italics")# Grad, falls - diese nicht senkrecht zur Betrachtungsebene steht. - - PROC view (PICFILE VAR p, REAL CONST phi, theta) - Zweck: Dreidimensionale Bilder werden häufig nicht direkt von vorne dargestellt, - sondern für die Betrachtung gedreht. Mit der Prozedur #on("italics")#view#off("italics")# kann die - Betrachtungsrichtung durch die Polarwinkel #on("italics")#phi#off("italics")# und #on("italics")#theta#off("italics")# (im Gradmass) - angegeben werden. Voreingestellt ist #on("italics")#phi#off("italics")# = 0 und #on("italics")#theta#off("bold")# = 0, d.h. senk - recht von oben. - - Im Gegensatz zu #on("italics")#rotate#off("italics")# hat #on("italics")#view#off("italics")# keine Wirkung auf das eigentliche Bild - (PICFILE), sondern nur auf die gewählte Darstellung. So addieren sich - zwar aufeinanderfolgende #on("italics")#Rotationen#off("italics")#, #on("italics")#view#off("italics")# aber geht immer von der - Nullstellung aus. Auch kann das Bild durch eine #on("italics")#Rotation#off("italics")# ganz oder - teilweise aus oder in das Darstellungsfenster (#on("italics")#window#off("italics")# gedreht werden. Bei - #on("italics")#view#off("italics")# verändern sich die Koordinaten der Punkte nicht, d. h. das Fenster - wird mitgedreht. - - PROC view (PICFILE VAR p, REAL CONST x, y, z) - Zweck: Wie oben, nur werden die Winkel nicht in Polarkoordinaten angegeben, - sondern es wird die Blickrichtung als Vektor in Karthesischen Koordina - ten angegeben. (Die Länge darf ungleich 1 sein). - -viewport - PROC viewport (PICFILE VAR p, REAL CONST hormin, hormax, vertmin, - vertmax) : 1-709 - Zweck: Die Zeichenfläche auf dem Endgerät, auf dem das Bild dargestellt werden - soll, wird spezifiziert. Dabei wird sowohl die Größe als auch die relative - Lage der Zeichenfläche definiert. Der linke untere Eckpunkt der physi - kalischen Zeichenfläche des Gerätes hat die Koordinaten (0, 0). Die - definierte Zeichenfläche erstreckt sich - - #on("italics")#hormin - hormax#off("italics")# in der Horizontalen, - #on("italics")#vertmin - vertmax#off("italics")# in der Vertikalen. - - So liegt der linke untere Eckpunkt dann bei (#on("italics")#hormin, hormax#off("italics")#), der rechte - obere Eckpunkt bei (#on("italics")#hormax, vertmax#off("italics")#). - - Damit sowohl geräteunabhängige als auch maßstabgetreue Zeichnungen - möglich sind, können die Koordinaten in zwei Arten spezifiziert werden: - a) #on("bold")#Gerätekoordinaten#off("bold")# - Die Koordinaten können Werte von 0.0 bis 2.0 annehmen. Dabei - hat die kürzere Seite der physikalischen Zeichenfläche definitionsge - mäß die Länge 1.0. - b) #on("bold")#Absolute Koordinaten#off("bold")# - Die Werte werden in #on("italics")#cm#off("italics")# angegeben. Dabei müssen die Maximal - werte aber größer als 2.0 sein, da sonst Fall a) angenommen wird. - - Voreingestellt ist - - viewport (0.0, 1.0, 0.0, 1.0) - - d.h. das größtmögliche Quadrat, beginnend mit der linken unteren Ecke - der physikalischen Zeichenfläche. In vielen Fällen wird diese Einstellung - ausreichen, so daß der Anwender kein eigenes #on("italics")#viewport#off("italics")# definieren muss. - - Der Abbildungsmaßstab wird durch das Zusammenspiel von #on("italics")#viewport#off("italics")# und - #on("italics")#window#off("italics")# festgelegt (s. dort). Dabei ist insbesondere darauf zu achten, daß - winkeltreue Darstellung nur bei gleichen X- und Y-Maßstab möglich - ist. Da man oft quadratische Fenster (#on("italics")#window#off("italics")#) verwendet, wurde als - Standardeinstellung auch ein quadratisches #on("italics")#viewport#off("italics")# gewählt. - - Hinweis: Mit der Prozedur #on("italics")#check limit#off("italics")# aus dem PACKET #on("italics")#basis plot#off("italics")# kann die - Überprüfung der Grenzen des eingestellten #on("italics")#viewport#off("italics")#-Bereiches ein- - bzw. ausgeschaltet werden. Bei eingeschateter Überprüfung, werden - Linien, die den Bereich überschreiten, am Rand abgetrennt. - - -window - PROC window (PICFILE VAR p, REAL CONST x min, x max, y min, y max) - Zweck: Für die Darstellung eines zweidimensionalen Bildes wird das darzustel - lende Fenster definiert. Alle Bildpunkte, deren X-Koordinaten im In- - tervall [#on("italics")#x min, x max#off("italics")#] und deren Y-Koordinaten im Bereich [#on("italics")#y min, y - max#off("italics")#] liegen, gehören zum definierten Fenster.Vektoren, die außerhalb - dieses Fensters liegen, gehen über die durch #on("italics")#viewport#off("italics")# Fläche hinaus - (s.dort). - - Der Darstellungsmaßstab ergibt sich als - - #ub# x max - x min #ue# - horizontale Seitenlänge der Zeichenfläche - - - #ub# y max - y min #ue# - vertikale Seitenlänge der Zeichenfläche - - PROC window (PICFILE VAR p, REAL CONST x min, x max, y min, y max, - z min, z max) - - Zweck: Für die darstellung eines dreidimensionalen Bildes wird das darzustellende - Fenster definiert. Alle Bildpunkte, deren X-Koordinaten im Intervall [#on("italics")#x - min, x max#off("italics")#], deren Y-Koordinaten im Bereich [#on("italics")#y min, y max#off("italics")#] und - deren Z-Koordinaten im Bereich [#on("italics")#z min, z max#off("italics")#] liegen, gehören zum - definierten Fenster. Dieses dreidimensionale Fenster (#on("italics")#Quader#off("italics")#) wird ent - sprechend der eingestellten Projektionsart (orthographisch, perspektivisch - oder schiefwinklig) und den Betrachtungswinkeln (s. #on("italics")#view#off("italics")#) auf die spezi - fizierte Zeichenfläche abgebildet. - Anders als im zweidimensionalen Fall ist das Problem der Maßstaäbe - nicht mehr nur durch das Zusammenspiel von #on("italics")#window#off("italics")# und #on("italics")#viewport#off("italics")# zu - beschreiben. Hier spielen auch die Projektionsart und Darstellungswinkel - herein. - -oblique: - PROC oblique (PICFILE VAR p, REAL CONST a, b) - Zweck: Bei dem (dreidimensionalen) Bild #on("italics")#p#off("italics")# wir #on("underline")#schiefwinklig#off("underline")# als gewünschte - Projektionsart eingestellt. Dabei ist (#on("italics")#a, b#off("italics")#) der Punkt auf der X-Y- - Ebene, auf den der Einheitsvektor der Z-Richtung abgebildet werden - soll. - -orthographic - PROC orthographic (PICFILE VAR p) - Zweck: Bei dem (dreidimensionalen) Bild #on("italics")#p#off("italics")# wir #on("underline")#orthographisch#off("underline")# als gewünschte - Projektionsart eingestellt. Bei der orthographischen Projektion wird ein - dreidimensionaler Körper mit parallelen Strahlen senkrecht auf der Pro - jektionsebene dabgebildet. - -perpective - PROC perspective (PICFILE VAR p, REAL CONST cx, cy, cz) - Zweck: Bei dem (dreidimensionalen) Bild #on("italics")#p#off("italics")# wir #on("underline")#perspectivisch#off("underline")# als gewünschte - Projektionsart eingestellt. Der Punkt (#on("italics")#cx, 1/cy, cz#off("underline")#) ist der Fluchtpunkt der - Projektion, d. h. alle Parallen zur Z-Achse schneiden sich in diesem - Punkt. - -extrema - PROC extrema (PICFILE VAR p, REAL VAR x min, x max, y min, y max) - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICFILE. - - PROC extrema (PICFILE VAR p, REAL VAR x min,x max,y min,y max,z - min,z max) : 1-651 - Zweck: Die Prozedur liefert die größten und kleinsten Werte des PICFILE. - - -#on("underline")#Prozeduren zur Manipulation von PICFILE#off("underline")# -:= - OP := (PICFILE VAR p, DATASPACE CONST d) - Zweck: Assoziert die PICFILE Variable #on("italics")#p#off("italics")# mit dem Datenraum #on("italics")#d#off("italics")# und initialisiert - die Variable, wenn nötig. - Fehlerfälle: - * dataspace is no PICFILE - Der anzukoppelnde Datenraum hat einen unzulässigen Typ - -picture file - DATASPACE PROC picture file (TEXT CONST name) - Zweck: Assoziaten eines benannten Datenraumes mit einem PICFILE (s.o.). - -put - PROC put (FILE VAR f, PICFILE VAR p) - Zweck: Schreibt den Inhalt eines PICFILE in ein FILE. Die Informationen - werden im internen Format abgelegt. - -get - PROC get (PICFILE VAR p, FILE VAR f) - Zweck: Liest den Inhalt eines PICFILE aus einem FILE. Die Informationen - müssen mit #on("italics")#put#off("italics")# geschrieben worden sein. - Fehlerfall: - * Picfile overflow - Es können nur maximal 1024 Picture (Sätze) in einem PICFILE abgelegt - werden. - -to first pic - PROC to first pic (PICFILE VAR p) - Zweck: Positioniert auf das erste PICTURE. - -to eof - PROC to last pic (PICFILE VAR p) - Zweck: Positioniert hinter das letzte PICTURE. - -to pic - PROC to pic (PICFILE VAR p, INT CONST pos) - Zweck: Positioniert auf das PICTURE Nummer #on("italics")#pos#off("italics")#. - Fehlerfälle: - * Position underflow - Es wurde eine Position kleiner Null angegeben. * Position after - eof Es wurde versucht, hinter das Ende eines PICFILE zu positionieren - -up - PROC up (PICFILE VAR p) - Zweck: Positioniert genau ein PICTURE zurück. - Fehlerfall: - * Position underflow - Es wurde versucht, vor das erste PICTURE zu positionieren - - PROC up (PICFILE VAR p, INT CONST n) - Zweck: Positioniert genau #on("italics")#n#off("italics")# Picture zurück. - Fehlerfall: - * Position underflow - Es wurde versucht, vor das erste PICTURE zu positionieren - -down - PROC down (PICFILE VAR p) - Zweck: Positioniert genau ein PICTURE vorwärts. - Fehlerfall: - * Position after eof - Es wurde versucht, hinter das Ende eines PICFILE zu positionieren - - PROC down (PICFILE VAR p, INT CONST n) - Zweck: Positioniert genau #on("italics")#n#off("italics")# Picture vorwärts. - Fehlerfall: - * Position after eof - Es wurde versucht, hinter das Ende eines PICFILE zu positionieren - -is first picture - BOOL PROC is first picture (PICFILE CONST p) - Zweck: Liefert genau dann #on("italics")#TRUE#off("italics")#, wenn das erste PICTURE erreicht ist. - -eof - BOOL PROC eof (PICFILE CONST p) - Zweck: Liefert genau dann #on("italics")#TRUE#off("italics")#, wenn das Ende eines PICFILE erreicht ist. - -picture no - INT PROC picture no (PICFILE CONST p) - Zweck: Liefert die Nummer des aktuellen PICTURE. - -pictures - INT PROC pictures (PICFILE CONST p) - Zweck: Liefert die Anzahl PICTURE eines PICFILE. - -delete picture - PROC delete picture (PICFILE VAR p) - Zweck: Löscht das aktuelle PICTURE - -insert picture - PROC insert picture (PICFILE VAR p) - Zweck: Fügt ein PICTURE #on("underline")#vor#off("underline")# der aktuellen Position ein. - -read picture - PROC read picture (PICFILE CONST p, PICTURE VAR pic) - Zweck: Liest das aktuelle PICTURE. - -write picture - PROC write picture (PICFILE VAR p, PICTURE CONST pic) - Zweck: Schreibt das PICTURE #on("italics")#pic#off("italics")# auf der aktuellen Position. - -put picture - PROC write picture (PICFILE VAR p, PICTURE CONST pic) - Zweck: Schreibt das PICTURE #on("italics")#pic#off("italics")# hinter das letzte PICTURE des PICFILE. - Die aktuelle Position wird nicht verändert. - -#page# - #on("italics")#Wo wir sind, da klappt nichts, - aber wir können nicht überall sein !#off("italics")# - -#type ("basker14")# -#on("bold")#Kurzbeschreibung des Graphik-Editors#off("bold")# -#type ("basker12")# - -In der Kommondozeile werden folgende Informationen angezeigt: - -#on("revers")#LEN nnnnn <...Name...> DIM n PEN nn Picture nnnn -#off("revers")# - - -Folgende Kommandos stehen zur Verfügung: - - PICTURE PROC pic neu - PICFILE PROC picfile neu - PROC neu zeichnen - - OP UP n (n PICTURE up) - OP DOWN n (n PICTURE down) - OP T n (to PICTURE n) - - PROC oblique (REAL CONST a, b) - PROC orthographic - PROC perspective (REAL CONST cx, cy, cz) - PROC window (BOOL CONST dev) - PROC window (REAL CONST x min, x max, y min, y max) - PROC window (REAL CONST x min, x max, y min, y max, z min, z max) - PROC viewport (REAL CONST h min, h max, v min, v max) - PROC view (REAL CONST alpha) - PROC view (REAL CONST phi, theta) - PROC view (REAL CONST x, y, z) - - PROC pen (INT CONST n) - PROC select pen (INT CONST pen, colour, thickness, line type, BOOL CONST - hidden) - PROC background (INT CONST colour) - - PROC extrema pic - PROC extrema picfile - PROC selected pen - - PROC rotate (REAL CONST angle) - PROC rotate (REAL CONST phi, theta, lambda ) - PROC stretch (REAL CONST sx, sy) - PROC stretch (REAL CONST sx, sy, sz) - PROC translate (REAL CONST dx, dy) - PROC translate (REAL CONST dx, dy, dz) - |