Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Rund um die LCL und andere Komponenten
Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

Hallo

Kennt sich jemand mit fpPDF aus?
Ich möchte einen farbig gefüllten Pie Chart erstellen.
Ich müsste also entweder Bereiche mit Farbe füllen können oder direkt gefüllte Kreissektoren zeichnen.
Die nicht separat eingefärbten "Kuchenstücke" bekomme ich hin.
piechart_pdf.png
piechart_pdf.png (16.74 KiB) 1681 mal betrachtet
Hat da jemand den Durchblick?
Nehme notfalls auch eine andere Komponente.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von Winni »

Hi!

Ich kenne das Ding nicht aber: Hat das einen Canvas?

Wenn nicht auf die doofe Tour:

Zeichne Linien der gewünschten Farbe von MittelPunkt-Anfangswinkel bis MittelPunkt-Endwinkel.

Nach dem Motto: Mit der Zange geht auch ne Bierflasche auf.

Winni

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von wp_xyz »

theo hat geschrieben:
Mo 17. Jan 2022, 14:11
Nehme notfalls auch eine andere Komponente.
Mit TAChart kannst du PieCharts zeichnen. Die kannst du dann als Bitmap, PNG, SVG o.ä. speichern und ins PDF einbinden.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

@Winni: Danke. Nein, hat keinen eigentlichen Canvas.
Ja, das könnte man probieren. Ob das am Ende "sauber" aussieht?
Ich dachte halt, es gäbe vielleicht ein Fill Kommando in PDF, welches man noch implementieren könnte.
Das PDF Format ist ja letztlich auch nur ein "Geschreibsel" à la:

Code: Alles auswählen

16 0 obj
<<
/Type /Font
/Subtype /CIDFontType2
/BaseFont /GRAEAB+Arial
/CIDSystemInfo 17 0 R
/FontDescriptor 18 0 R
/W [ 0 [750] 3 [278] 16 [333] 57 [667] 61 [611] 68 [556] 69 [556] 72 [556] 76 [222] 81 [556] 85 [333] 87 [278] 108 [556]]
/CIDToGIDMap 21 0 R
>>
endobj
@ wp_xyz: Danke. Die Grafik anderweitig zu erstellen (z.B. auch BGRABitmap) und dann einzubinden, hatte ich als Notlösung auf dem Schirm.
Im PDF als Vektorgrafik wäre aber schöner gewesen.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

@Winni: Ja doch, sieht vernünftig aus.
Das hätte ich nicht gedacht.
Mit "Bescheuert" kommt man schneller weiter! :lol:
Dateianhänge
pdf_pie.png
pdf_pie.png (10.72 KiB) 1647 mal betrachtet

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von Winni »

Hi!

Die Dokumentation von fpPDF ist ja mäßig bis saumäßig.

Für Deine Wünsche ist der Source von

fpcsrc/fpc-3.2.0/packages/fcl-pdf/examples/testfppdf.lpr

von Interesse.

Beim diagonalen Überliegen wurde entdeckt:

Die einfachen Formen Rectangle, RoundedRectangle, Ellipse haben einen Parameter Fill, Polygon und sonstiges nicht.

Man kann sich aber einen Pfad schnitzen und den entweder Zeichnen oder Füllen:

procedure StrokePath;
procedure FillStrokePath;

Die Syntax lehnt sich an HTML5 an.

Wieder so eine fpc-Perle, die undokumentiert in der Gosse liegt.

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

Winni hat geschrieben:
Mo 17. Jan 2022, 16:55
Für Deine Wünsche ist der Source von
fpcsrc/fpc-3.2.0/packages/fcl-pdf/examples/testfppdf.lpr
von Interesse.
Klar, sonst wäre ich gar nicht so weit gekommen.
Andere Informationen als dieses Beispiel gibt es ja nicht.
Winni hat geschrieben:
Mo 17. Jan 2022, 16:55
procedure StrokePath;
procedure FillStrokePath;
Habe ich auch gesehen, aber nicht begriffen, wie man das auf einen Kreissektor anwenden könnte.

Bin erst einmal zufrieden. Der PDF-Pie steht.
pdf_pie2.png
pdf_pie2.png (31.63 KiB) 1619 mal betrachtet

Danke!

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

P.S. Es gibt natürlich auf diese Weise schon ein Problemchen.
Da es kein Bitmap ist, enthält das PDF natürlich Zeichenanweisungen für jeden Strich, den ich mache.
Nun muss ich natürlich ausreichend Striche zeichnen, damit das ganze gefüllt und nicht wie ein Stern aussieht.

Bei einer Stroke Dicke von 1.0 gibt es in der Mitte des Kuchens einen Versatz zwischen den Linien, der hässlich aussieht.
Wenn ich die Strichdicke 0.1 mache, ist dieser Versatz kaum noch sichtbar, aber dann muss ich noch mehr Linien zeichnen, damit alles bedeckt ist.

Bei 1000 Linien z.B. merkt man das im PDF Reader durch ein Lagging. Der "Pie" baut dann langsamer auf.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von Winni »

Hi!

Kenn ich aus frühen Corel-Draw-Versionen, wenn man einen PDF-Export getätigt hatte und vorher z.B. was extrudiert hatte. Da wurde ALLES exportiert und nicht nur, was sichtbar war. Haben wir manchmal den Belichter in der Druckerei gecrasht ....

Aber zu dem Pfad in fpPDF

* die TPDFCoord snd auch nur ein TPointF, also zwei Singles

* Die TPDFPage müsste so damit umgehen:
- ResetPath;
Ein Polygon = APoints: array of TPDFCoord bauen :
MittelPunkt - AnfangswinkelPunkt
Dann ein Punkt für jedes Grad zwischen Anfangswinkel und Endwinkel
Mittelpunkt (theoretisch nicht notwendig - aber wer weiss ....
Danach DrawPolygon
closePath
Dann entweder
StrokePath oder
Fillstrokepath

fertig

Natürlich noch Farben, PenStyle, lineStyle usw. setzen

So geht das jedenfalls in HTML5 und BGRAcanvas2D der sich an HTML5 anlehnt.

Ich würde mir ne Procedure Pie bauen:

Code: Alles auswählen

procedure pie (Center: TPDFCoord, radius: single; color: TColor; StartAngle, StopAngle: Integer);

Oder so ähnlich.

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

@Winni: Danke für den Tipp.
Ja so könnte es tatsächlich klappen und das wäre wesentlich sauberer.
Ich dachte zuerst, dieser Weg wäre mir zu kompliziert, aber wenn man es "richtig" lösen will, dann muss das wohl so.
Ein erster Test schaut schon vielversprechend aus:
pdf_pie3_poly.png
pdf_pie3_poly.png (3.52 KiB) 1580 mal betrachtet

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von Winni »

Hi!

Na geht doch!

Die HTML5 Syntax ist echt gewöhnungsbedürftig und sehr anders als das, was man sonst von Grafik-Bibliotheken kennt.

Aber wenn man sich dran gewöhnt hat, ist es in sich schlüssig.

Was noch fehlt ist der Paramer "clockwise" und "counterclockwise", kurz cw oder ccw.

Will meinen: Zählen wir die Winkel mit der Uhr oder andersrum. Da herrscht große Uneinigkeit. Die Canvas.font.orientation läuft z.B. gegen die Uhr.

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

Mittlerweile sieht es vernünftig aus.
Mit DrawPolyLine und FillStrokePath funktioniert das zufriedenstellend.
Beschriftung wird auch so langsam. :D

pdf_pie4_poly_text.png
pdf_pie4_poly_text.png (17.71 KiB) 1545 mal betrachtet

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von Winni »

Hi!

Sehr schön!

Aber Kalender-Reform? Ohne "Tanz in den Mai"???

Und bittesehr:

Jan: kaltes hellblau
Feb: Karnevals-Orange
Mar: lindgrün
Apr : sattgrün
....

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von theo »

Vom Mai haben wir keine Daten.
Und das war das Corona Jahr 2021. Grau in Grau trifft's doch. :mrgreen:

kirchfritz
Beiträge: 169
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: Kreisdiagramm bzw. farbige Kreissektoren mit fpPDF

Beitrag von kirchfritz »

@theo: Gibt's zu dem pdf_pie4_poly_text.png auch den Lazarus/FPC Quellcode zum Download?

Antworten