![]() |
Graphics32 Zeichne Polygon mit größerer Linienbreite
Nachdem ich mich durch etliche Internet Seiten und Foren gekämpft habe um herauszufinden wie man mit Graphics32 eine Linie zeichnen kann die nicht nur einen Pixel breit ist will ich euch nun das Ergebnis präsentieren.
Standardmäßig unterstützt Graphics32 keine andere Linienbreite als 1! Benötigt man trotzdem eine breitere Linie so muss man mehrere nebeneinander zeichnen oder die Klasse TPolygon32 bemühen und die gewünschte Linie damit zu verbreitern. Um die Arbeit zu erleichtern hab ich dafür eine abgeleitete klasse erstellt.
Delphi-Quellcode:
type
TPolygon32_LineWidth = class(TPolygon32) public procedure DrawLineXS(Bitmap:TCustomBitmap32;LineWidth:Byte;Color:TColor32;Closed:Boolean); procedure DrawLineXSP(Bitmap:TCustomBitmap32;LineWidth:Byte;Closed:Boolean); end; { TPolygon32_LineWidth } procedure TPolygon32_LineWidth.DrawLineXS(Bitmap:TCustomBitmap32;LineWidth:Byte;Color:TColor32;Closed:Boolean); var PolygonOutl, PolygonGrow : TPolygon32; begin if LineWidth <= 1 then PolyPolylineXS(Bitmap,Points,Color,Closed) else begin Self.Closed := Closed; Antialiased := True; PolygonOutl := Outline; PolygonGrow := PolygonOutl.Grow(Fixed(LineWidth/2)); try PolygonGrow.FillMode := pfWinding; PolygonGrow.DrawFill(Bitmap,Color); finally PolygonGrow.Free; PolygonOutl.Free; end; end; end; procedure TPolygon32_LineWidth.DrawLineXSP(Bitmap:TCustomBitmap32;LineWidth:Byte;Closed:Boolean); var Count1, Count2, NextNr, CountLine, Multy, DeltaX, DeltaY : Integer; Strippl_Start : Extended; begin if LineWidth <= 1 then PolyPolylineXSP(Bitmap,Points,Closed) else begin Self.Closed := Closed; BuildNormals; if Assigned(Points) then for Count1 := 0 to High(Points) do begin if Length(Points[Count1]) > 1 then for Count2 := 0 to High(Points[Count1]) do begin NextNr := Count2+1; if Count2 >= High(Points[Count1]) then if Closed then NextNr := 0 else Break; Strippl_Start := Bitmap.StippleCounter; Bitmap.LineXSP(Points[Count1][Count2].X,Points[Count1][Count2].Y,Points[Count1][NextNr].X,Points[Count1][NextNr].Y); for CountLine := 0 to LineWidth-2 do begin Bitmap.StippleCounter := Strippl_Start; if Odd(CountLine) then Multy := (CountLine DIV 2)+1 else Multy := (CountLine DIV 2)+1 * -1; DeltaX := Normals[Count1][Count2].X * Multy; DeltaY := Normals[Count1][Count2].Y * Multy; Bitmap.LineXSP(Points[Count1][Count2].X+DeltaX,Points[Count1][Count2].Y+DeltaY,Points[Count1][NextNr].X+DeltaX,Points[Count1][NextNr].Y+DeltaY); end; end; end; end; end; |
AW: Graphics32 Zeichne Polygon mit größerer Linienbreite
|
AW: Graphics32 Zeichne Polygon mit größerer Linienbreite
Danke damit hat sich das erledigt. Die mühe hät ich mir sparen können.
Hab zwar gesucht aber genau die Seite nicht gefunden. :? |
AW: Graphics32 Zeichne Polygon mit größerer Linienbreite
Die Seite gibt es auch nicht mehr. Das ist so ein absichtlich verwaister Link.
Es wird auch so sein, dass die Lib mit neueren GR32-Versionen nicht funktioniert. In dieser Newsgroup auf graphics32.org gibt es aber von einem Teilnehmer ein Patch, welches die Lib kompatibel macht. |
AW: Graphics32 Zeichne Polygon mit größerer Linienbreite
Übrigens, ich habe da eine neuere Version, die mit den aktuelleren Funktionen von GR32 arbeitet. Die Version kann aber nicht alles das, was TLines32/TText32 kann.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz