Name: | »Filled polygon«
| ||||||||||||||||||||||||||||||||||||||
Line-A Nummer: | $A006
| ||||||||||||||||||||||||||||||||||||||
Binding: | Bindings für filled_polygon
| ||||||||||||||||||||||||||||||||||||||
Beschreibung: | Diese Line-A Funktion zeichnet eine Zeile eine ausgefüllten
Polygons durch Aufrufe der Horizontal line Funktion. Zum Zeichnen des
gesamten Polygons muß diese Funktion für jede mögliche Y-Koordinate
aufgerufen werden. Zusätzlich besteht wie bei Filled rectangle die
Möglichkeit, das Zeichnen des Rechtecks nur in einem zusätzlich
übergebenen Clip-Bereich zuzulassen.
Sämtliche Punkte des Polygons werden in dem Feld ptsin übergeben, die Anzahl der Punkte steht im zweiten Element des contrl Feldes. In C steht damit in contrl[1] die Anzahl Punkte, ptsin[0] die X-Koordinate des ersten Punkts, ptsin[1] die Y-Koordinate des ersten Punkts, ptsin[2] die X-Koordinate des zweiten Punkts, ... Der letzte Punkt in ptsin muß wieder der erste Punkt sein, damit das Polygon geschlossen ist! Die Y-Koordinate der zu zeichnenden Zeile wird in dem Line-A Parameterblock in y1 übergeben. Die folgenden Line-A Variablen werden benutzt:
Das Binding von TC übergibt Linienmuster, Schreibmodus und Farbe nicht an die filled_polygon() Funktion, sondern benutzt separate Funktionen set_fg_bp(), set_wrt_mode(), set_pattern() und set_clipping() zum Setzen der Parameter in dem Line-A Parameterblock. | ||||||||||||||||||||||||||||||||||||||
Ergebnis: | Die Funktion liefert keinen Returnwert.
| ||||||||||||||||||||||||||||||||||||||
Verfügbar: | Alle TOS-Versionen.
| ||||||||||||||||||||||||||||||||||||||
Querverweis: | Binding Horizontal line Filled rectangle
|
Pure-C: | void filled_polygon( int16_t *xy, int16_t count );
|
Assembler: | Es wird angenommen, daß das contrl Feld schon in den Line-A
Parameterblock eingetragen wurde.
; Register retten movem.l D0-D2/A0-A2,-(A7) ; Zeiger Parameterblock LINEA move.l pParamblk,A0 ; contrl nach A1 move.w (4,A0),A1 ; Anzahl Punkte nach contrl[1] move.w count,(2,A1) ; alten Wert des ptsin Feldes retten move.l (12,A0),-(A7) ; Feld mit Koordinaten der Ecken in LINEA.ptsin move.l xy,(12,A0) ; zu zeichnende Zeile, Y-Koordinate in LINEA.y1 move.w y1,(40,A0) ; Bit für erste Plane in LINEA.fg_bp_1 move.w colbit0,(24,A0) ; Bit für erste Plane in LINEA.fg_bp_2 move.w colbit1,(26,A0) ; Bit für erste Plane in LINEA.fg_bp_3 move.w colbit2,(28,A0) ; Bit für erste Plane in LINEA.fg_bp_4 move.w colbit3,(30,A0) ; Writemode in LINEA.wrt_mode move.w wmode,(36,A0) ; Linienmuster in LINEA.patptr move.w patptr,(46,A0) ; Anzahl Muster in LINEA.patmsk move.w patmsk,(50,A0) ; Clipmode in LINEA.clip move.w mode,(54,A0) ; linke obere Clip-Ecke, X-Koordinate in LINEA.xmn_clip move.w cx1,(56,A0) ; linke obere Clip-Ecke, Y-Koordinate in LINEA.ymn_clip move.w cy1,(58,A0) ; rechte untere Clip-Ecke, X-Koordinate in LINEA.xmx_clip move.w cx2,(60,A0) ; rechte untere Clip-Ecke, Y-Koordinate in LINEA.ymx_clip move.w cy2,(62,A0) ; Line-A Opcode dc.w $A006 ; Zeiger Parameterblock LINEA move.l pParamblk,A0 ; alten Wert des ptsin Feldes restaurieren move.l (A7)+,(12,A0) ; Register restaurieren movem.l (A7)+,D0-D2/A0-A2 |