AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Graphics32 Zeichne Polygon mit größerer Linienbreite

Graphics32 Zeichne Polygon mit größerer Linienbreite

Ein Thema von Jakson · begonnen am 20. Feb 2015 · letzter Beitrag vom 20. Feb 2015
Antwort Antwort
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#1

Graphics32 Zeichne Polygon mit größerer Linienbreite

  Alt 20. Feb 2015, 09:48
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;
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#2

AW: Graphics32 Zeichne Polygon mit größerer Linienbreite

  Alt 20. Feb 2015, 12:23
Text und Linien
Davon gibt es auch schon neuere Versionen
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#3

AW: Graphics32 Zeichne Polygon mit größerer Linienbreite

  Alt 20. Feb 2015, 12:30
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.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#4

AW: Graphics32 Zeichne Polygon mit größerer Linienbreite

  Alt 20. Feb 2015, 12:34
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.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#5

AW: Graphics32 Zeichne Polygon mit größerer Linienbreite

  Alt 20. Feb 2015, 12:39
Ü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.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz