home *** CD-ROM | disk | FTP | other *** search
/ Global Amiga Experience / globalamigaexperience.iso / compressed / development / m2mdemopakdisk3.dms / m2mdemopakdisk3.adf / Text / Graphics.zoo / Ham.def < prev    next >
Text File  |  1989-10-14  |  10KB  |  283 lines

  1. DEFINITION MODULE Ham;
  2.  
  3. (*
  4. M2Amiga Graphics Report  Version 1.31  18-Jul-89 
  5.  
  6. Dieses Modul unterstützt das Zeichnen auf einem HAM-Graphic Display.
  7. *)
  8.  
  9.  
  10. FROM SYSTEM IMPORT
  11.        ADDRESS;
  12. FROM Graphics IMPORT
  13.        RastPortPtr;
  14.        
  15.        
  16. TYPE 
  17.   HOrder= INTEGER [1..3];
  18.  
  19.  
  20.  
  21. PROCEDURE HamColor (r,g,b: INTEGER);
  22. PROCEDURE HamOrder (r,g,b: HOrder);
  23. PROCEDURE HamLimit (fix: BOOLEAN);
  24. PROCEDURE HamPixel (rp: RastPortPtr; x,y,limit: INTEGER);
  25. PROCEDURE HamDraw  (rp: RastPortPtr;  x,y,limit: INTEGER);
  26. PROCEDURE HamLine  (rp: RastPortPtr; sx,sy,dx,dy,limit: INTEGER);
  27. PROCEDURE HamRect  (rp: RastPortPtr; sx,sy,dx,dy,limit: INTEGER);
  28. PROCEDURE HamBlock (rp: RastPortPtr; sx,sy,dx,dy,limit: INTEGER);
  29. PROCEDURE HamEllipse (rp: RastPortPtr; x,y,rx,ry,limit: INTEGER);
  30. PROCEDURE HamDisk  (rp: RastPortPtr; x,y,rx,ry,limit: INTEGER);
  31. PROCEDURE HamArea  (rp: RastPortPtr; data: ADDRESS; x,y,num,limit: INTEGER);
  32.  
  33.  
  34. END Ham.
  35.  
  36.  
  37.  
  38.  
  39. @ HamColor (r,g,b: INTEGER)
  40.  
  41.   Funktion
  42.         Diese Prozedur bestimmt in welcher Farbe gezeichnet werden soll.
  43.   Eingabe
  44.         r - Rot-Komponente der Farbe.
  45.         g - Grün-Komponente der Farbe.
  46.         b - Blau-Komponente der Farbe.
  47.  
  48.  
  49.  
  50.  
  51. @ HamOrder (r,g,b: HOrder)
  52.  
  53.   Funktion
  54.         HamOrder bestimmt die Reihenfolge der  Farbeinstellung.  
  55.         Voreingestellt ist die Folge  Rot, Grün, Blau. 
  56.   Eingabe
  57.         r - die Position, an der die Rot-Komponente bestimmt werden soll.
  58.         g - die Position, an der das Grün-Komponente bestimmt werden soll.
  59.         b - die Position, an der das Blau-Komponente bestimmt werden soll.
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66. @ HamLimit (fix: BOOLEAN)
  67.  
  68.   Funktion
  69.         Die Prozedur HamLimit  ermöglicht die Wahl zwischen einer 
  70.         fixierten Breite der Linien von 3 Pixel, oder einer variablen 
  71.         Breite.  
  72.   Eingabe
  73.         fix - TRUE => es werden immer drei Pixel Breite  gezeichnet.
  74.               FALSE => es wird immer nur so breit gezeichnet wird wie es 
  75.               zum Erreichen der  gewünschten  Farbe erforderlich ist.
  76.  
  77.  
  78.  
  79.  
  80. @ HamPixel (rp: RastPortPtr; x,y,limit: INTEGER)
  81.  
  82.   Funktion
  83.         HamPixel zeichnet einen Punkt an angegebenen Position.
  84.   Eingabe
  85.         rp - Zeiger zum RastPort.
  86.         x - Horizontale Position des Punktes.
  87.         y - Vertikale Position des Punktes.
  88.         limit - Farbe der rechten Begrenzung (0..15),
  89.                 oder keine Begrenzung mit (-1)  .
  90.  
  91.  
  92.  
  93.  
  94. @ HamDraw  (rp: RastPortPtr;  x,y,limit: INTEGER)
  95.  
  96.   Funktion
  97.         HamDraw zieht eine Linie von der letzten Zeichenposition zur 
  98.         gegebenen Ziel Position.
  99.   Eingabe
  100.         rp - Zeiger zum RastPort.
  101.         x - Horizontale Ziel Position.
  102.         y - Vertikale Ziel Position.
  103.         limit - Farbe der rechten Begrenzung (0..15),  
  104.                 oder keine Begrenzung mit (-1)  .
  105.  
  106.  
  107.  
  108.  
  109. @ HamLine  (rp: RastPortPtr; sx,sy,dx,dy,limit: INTEGER)
  110.  
  111.   Funktion
  112.         HamLine zieht eine Linie zwischen zwei gegebenen Koordinaten.
  113.   Eingabe
  114.         rp - Zeiger zum RastPort.
  115.         sx - Horizontale Position der Startkoordinate.
  116.         sy - Vertikale Position der Startkoordinate.
  117.         dx - Horizontale Position der Zielkoordinate.
  118.         dy - Vertikale Position der Zielkoordinate.
  119.         limit - Farbe der rechten Begrenzung (0..15),  
  120.                oder keine Begrenzung mit (-1).
  121.  
  122.  
  123.  
  124.  
  125. @ HamRect  (rp: RastPortPtr; sx,sy,dx,dy,limit: INTEGER)
  126.  
  127.   Funktion 
  128.         HamRect zeichnet ein Rechteck an den angegebenen Positionen.
  129.   Eingabe
  130.         rp - Zeiger zum RastPort.
  131.         sx - Horizontale Position der linken Linie.
  132.         sy - Vertikale Position der oberen Linie.
  133.         dx - Horizontale Position der rechten Linie.
  134.         dy - Vertikale Position der unteren Linie.
  135.         limit - Farbe der rechten Begrenzung (0..15),  
  136.                 oder keine Begrenzung mit (-1).
  137.  
  138.  
  139.  
  140.  
  141.   
  142. @ HamBlock (rp: RastPortPtr; sx,sy,dx,dy,limit: INTEGER)
  143.  
  144.   Funktion
  145.         HamBlock zeichnet ein ausgefülltes Rechteck an der gegebenen 
  146.         Position.
  147.   Eingabe
  148.         rp - Zeiger zum RastPort.
  149.         sx - Horizontale Position der linken Kante.
  150.         sy - Vertikale Position der oberen Kante.
  151.         dx - Horizontale Position der rechten Kante.
  152.         dy - Vertikale Position der unteren Kante.
  153.         limit - Farbe der rechten Begrenzung (0..15),  
  154.                oder keine Begrenzung mit (-1).
  155.  
  156.  
  157.  
  158.  
  159. @ HamEllipse (rp: RastPortPtr; x,y,rx,ry,limit: INTEGER)
  160.  
  161.   Funktion
  162.         HamEllipse zeichnet eine Ellipse an der gegebenen Position.
  163.   Eingabe
  164.         rp - Zeiger zum RastPort.
  165.         x - Horizontale Position des Mittelpunkts.
  166.         y - Vertikale Position des Mittelpunkts.
  167.         rx - Radius der X-Achse.
  168.         ry - Radius der Y-Achse.
  169.         limit - Farbe der rechten Begrenzung (0..15),  
  170.                oder keine Begrenzung mit (-1).
  171.  
  172.  
  173.  
  174.  
  175. @ HamDisk (rp: RastPortPtr; x,y,rx,ry,limit: INTEGER)
  176.  
  177.   Funktion
  178.         HamDisk zeichnet einen Ausgefüllten Kreis an der gegebenen
  179.         Position.
  180.   Eingabe
  181.         rp - Zeiger zum RastPort
  182.         x - Horizontale Position des Mittelpunkts.
  183.         y - Vertikale Position des Mittelpunkts.
  184.         rx - Radius der X-Achse.
  185.         ry - Radius der Y-Achse.
  186.         limit - Farbe der rechten Begrenzung (0..15),  
  187.                 oder keine Begrenzung mit (-1).
  188.  
  189.  
  190.  
  191.  
  192. @ HamArea (rp: RastPortPtr; data: ADDRESS; x,y,num,limit: INTEGER)
  193.  
  194.   Funktion 
  195.         HamArea zeichnet ein ausgefülltes Polygon. Die Koordinaten der 
  196.         Ecken des Polygons werden in einem Array  of Cardinal übergeben. 
  197.         Der erste Wert des Arrays ist die erste X-Position, gefolgt von 
  198.         der ersten Y-Position usw (x1,y1,x2,y2,...,xn,yn). 
  199.   Eingabe
  200.         rp - Zeiger zum RastPort
  201.         data - Adresse des Koordinatenfeldes.
  202.         x - Offset wird zu den horizontalen Positionen des Arrays addiert.
  203.         y - Offset wird zu den vertikalen Positionen des Arrays addiert.
  204.         num - Anzahl der Koordinaten.
  205.         limit - Farbe der rechten Begrenzung (0..15),  
  206.                 oder keine Begrenzung mit (-1).
  207.  
  208.  
  209. ---------------------------------------------------------------------------
  210.  
  211.  
  212. Information:
  213.  
  214. Die Prozeduren  dieses  Moduls  unterstützen  das Zeichnen im  Ham-Graphic-
  215. Modus.  Im Ham-Modus können 4096 Farbtöne  gleichzeitig dargestellt werden.
  216. Da der Amiga  hierfür nur maximal 6 Bitplanes einsetzt,  muß ein besonderes 
  217. Verfahren eingesetzt werden. 
  218.  
  219. Um den Farbton  eines  Pixels zu  bestimmen,  werden  zwei  Farbkomponenten
  220. (rot, grün oder blau) vom  dem linken Pixel daneben übernommen und nur eine
  221. Farbkomponente geändert. Um alle Farbkomponenten zu ändern sind also bis zu 
  222. drei  Pixel  erforderlich.  Dieses  wird  von  den Prozeduren dieses Moduls
  223. unterstützt indem die Zeichenroutinen eine Funktion bei Bedarf jeweils  um
  224. ein  Pixel nach rechts versetzt mehrfach ausführen.  Es  ergibt sich daher,
  225. daß eine  senkrechte  Linie bis zu drei Pixel breit ist, oder eine horizon-
  226. tale Linie zwei Pixel weiter  nach  rechts  gezogen  wird  als im Parameter
  227. angegeben wurde.  Ebenso  muß berücksichtigt werden, daß alle geometrischen
  228. Figuren jeweils auch bis zu  zwei  Pixel  nach  recht  versetzt  gezeichnet
  229. werden. 
  230.  
  231. Es sei hier auch  noch  einmal darauf hingewiesen,  das  im  Ham-Modus auch
  232. 'normal' gezeichenet werden kann. Für diesen Zweck  stehen die Farbregister
  233. 0 bis 15 zur Verfügung, deren Farbtöne mit den  üblichen  Color  Prozeduren
  234. bestimmt werden können. Wenn  mit der Prozedur  SetAPen() des Moduls Colors
  235. eines dieser Farbregister gewählt wird,  können  die  allgemeinen  Zeichen-
  236. Prozeduren aus Draw oder Area verwendet werden.  Darüber  hinaus können für
  237. die zusätzlichen 4080 Farbtöne  die  Prozeduren  dieses  Moduls  eingesetzt
  238. werden.
  239.  
  240. Die Prozedur HamColor bestimmt den Farbton  in  dem gezeichnet werden soll.
  241. Es kann jede der  4096 Farbtöne gewählt werden.  Die Parameter der Prozedur
  242. erhalten die Rot Grün und Blau-Komponenten der Farbe. 
  243.  
  244. Die Prozedur HamOrder bestimmt die Reihenfolge der Farbeinstellung. Vorein-
  245. gestellt ist die Folge  Rot, Grün, Blau.  Das bedeutet,  daß zur Erreichung
  246. eines bestimmten Farbtons  zuerst der Rotanteil, dann Grün  und als letztes
  247. der Blauanteil eingestellt wird.  Dadurch  erhalten  die  Objekte eine rot-
  248. gelbe Einfärbung am linken Rand. Es ist daher manchmal sinnvoll die Reihen-
  249. folge zu ändern.  Auf einem blauen  Hintergrund würde die Reihenfolge blau,
  250. grün, rot die Einfärbung reduzieren. Die Parameter des folgenden  Beispiels
  251. würde diese Reihenfolge einstellen.
  252.                               
  253.   HamOrder(3,2,1);
  254.  
  255.  
  256. Die  Prozedur HamLimit  ermöglicht die Wahl zwischen einer fixierten Breite
  257. der Linien von 3 Pixeln, oder einer variablen Breite.  Eine rote Linie kann
  258. zum Beispiel mit einer Breite von einem Pixel gezeichnet werden, da nur ein
  259. Farbteil bestimmt werden muß.  Wenn HamLimit(TRUE)  gewählt  wurde,  werden
  260. jedoch immer drei Pixel Breite  gezeichnet,  um  ein  einheitliches  Maß zu
  261. gewährleisten.  Das  gleiche  gilt entsprechen beim Überzeichnen der geome-
  262. trischen Figuren. Nach der Wahl von HamLimit(FALSE) wird immer nur so breit
  263. gezeichnet,  wie es zum Erreichen der  gewünschten  Farbe erforderlich ist.
  264. Voreingestellt ist der Wert TRUE.
  265.  
  266. Der Parameter  »limit« hat bei allen Prozeduren die gleiche Funktion.  Wenn
  267. in  »limit«  die  Nummer  eines  der  Farbregister 0 bis 15 übergeben wird,
  268. zeichnet  die Prozedur am rechten  Rand  des  Objekts  eine  Linie  in  der
  269. entsprechenden Farbe. Damit kann verhindert werden, daß beim überlappen von 
  270. Ham-Objekten die eingestellten Farbtöne vom rechts  liegenden  Objekt über-
  271. nommen  werden.  Es  kommt  so  lediglich  zu  einer Einfärbung des rechten
  272. Randes.  Wenn  in »limit« = (-1) eingesetzt wird, ist diese Funktion ausge-
  273. schaltet. Eine Änderung der Farbe, des rechts liegenden  Objekts ist trotz-
  274. dem möglich,  wenn dessen Farbinformationen teilweise überschrieben werden.
  275. Es muß im Einzelfall entschieden  werden,  welche  Einstellung  die  besten
  276. Ergebnisse bringt. 
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.