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.movem.l D0-D2/A0-A2,-(A7) ; Register retten move.l pParamblk,A0 ; Zeiger Parameterblock LINEA move.w (4,A0),A1 ; contrl nach A1 move.w count,(2,A1) ; Anzahl Punkte nach contrl[1] move.l (12,A0),-(A7) ; alten Wert des ptsin Feldes retten move.l xy,(12,A0) ; Feld mit Koordinaten der Ecken in LINEA.ptsin move.w y1,(40,A0) ; zu zeichnende Zeile, Y-Koordinate in LINEA.y1 move.w colbit0,(24,A0) ; Bit für erste Plane in LINEA.fg_bp_1 move.w colbit1,(26,A0) ; Bit für erste Plane in LINEA.fg_bp_2 move.w colbit2,(28,A0) ; Bit für erste Plane in LINEA.fg_bp_3 move.w colbit3,(30,A0) ; Bit für erste Plane in LINEA.fg_bp_4 move.w wmode,(36,A0) ; Writemode in LINEA.wrt_mode move.w patptr,(46,A0) ; Linienmuster in LINEA.patptr move.w patmsk,(50,A0) ; Anzahl Muster in LINEA.patmsk move.w mode,(54,A0) ; Clipmode in LINEA.clip move.w cx1,(56,A0) ; linke obere Clip-Ecke, X-Koordinate in LINEA.xmn_clip move.w cy1,(58,A0) ; linke obere Clip-Ecke, Y-Koordinate in LINEA.ymn_clip move.w cx2,(60,A0) ; rechte untere Clip-Ecke, X-Koordinate in LINEA.xmx_clip move.w cy2,(62,A0) ; rechte untere Clip-Ecke, Y-Koordinate in LINEA.ymx_clip dc.w $A006 ; Line-A Opcode move.l pParamblk,A0 ; Zeiger Parameterblock LINEA move.l (A7)+,(12,A0) ; alten Wert des ptsin Feldes restaurieren movem.l (A7)+,D0-D2/A0-A2 ; Register restaurieren |