Paintbox zoomen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Joh
Lazarusforum e. V.
Beiträge: 288
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Paintbox zoomen

Beitrag von Joh »

Moin,

ich habe hier ein Projekt, bei dem ich Objekte in einem pdf platzieren muß. Genauer: ein Familienstammbaum, Größe DIN A1.
Bisher war das ganze ein manuell erstelltes php-script mit hartcodierten Positionen.
Also auf Pascal umschreiben.
So weit, so gut; aber jetzt möchte ich diese Objekte vorab grafisch anordnen. Der Versuch, das im Canvas einer Paintbox zu machen, klappt schon mal.
Jetzt möchte ich diese Paintbox zoomen.
OK, Paintbox in eine Scrollbox gepackt und???

Muß ich jetzt die Paintbox vergrößern/kleinern und die Schrift/Rechtecke/Linien auch?
Oder gibt es da fertige Zoom-Funktionen?

Letztlich bin ich auch nicht auf die Paintbox angewiesen. Es ist nur recht einfach, dort ein Objekt anzuklicken, nach dem nächsten neuzeichnen rot zu färben und dann zu verschieben.
just my two Beer

ArchChem
Beiträge: 105
Registriert: Mo 11. Jul 2022, 10:41

Re: Paintbox zoomen

Beitrag von ArchChem »

Hallo,

ich würde hier an der Stelle LaTeX mit dem entsprechenden Paket genealogytree empfehlen.
Lass Pascal dir den LaTeX-Code erstellen und nutze dann LaTeX für die PDF-Datei.

Viele Grüße!

Mathias
Beiträge: 6955
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Paintbox zoomen

Beitrag von Mathias »

Genauer: ein Familienstammbaum, Größe DIN A1.
Bei GITHUB ist sowas auch schon eingebaut. Somit müsste es dies schon fertig geben.

https://github.com/sechshelme/Lazarus-F ... ss_Tree.md
Jetzt möchte ich diese Paintbox zoomen.
Evtl. nützt da Cairo Graphics. FPC hat schon einen Header dafür.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Paintbox zoomen

Beitrag von wennerer »

Hallo Joh,
wenn du möchtest kannst mal meinen Selector testen:
Selector.gif
Selector.gif (178.21 KiB) 2524 mal betrachtet
Finden kannst ihn hier:

https://github.com/wennerer/TheOthers

Kleines Testprojekt mit Paintbox angehängt.

Viele Grüße
Bernd
Dateianhänge
project1.zip
(139.91 KiB) 63-mal heruntergeladen

Joh
Lazarusforum e. V.
Beiträge: 288
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Paintbox zoomen

Beitrag von Joh »

ArchChem hat geschrieben: Sa 20. Apr 2024, 07:49 Hallo,

ich würde hier an der Stelle LaTeX mit dem entsprechenden Paket genealogytree empfehlen.
Lass Pascal dir den LaTeX-Code erstellen und nutze dann LaTeX für die PDF-Datei.

Viele Grüße!
Moin,
ja, grundsätzlich passt die Ausgabe... Aber genau bei den Überschneidungen wollte ich ansetzen. Daher die zusätzliche manuelle Ebene zum verteilen der Personen.

Die Struktur soll ählich dieser aussehen, und da gibt es IMHO erstmal nur die manuell-visuelle Komponente...
Unbenannt.PNG
Unbenannt.PNG (51.56 KiB) 2450 mal betrachtet
Ich bin gerade einen kleinen Schritt weiter, werde mir aber erstmal die anderen Ideen testen.
just my two Beer

Joh
Lazarusforum e. V.
Beiträge: 288
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Paintbox zoomen

Beitrag von Joh »

Beim Projekt von Mathias sind die Linien auch nicht so, wie ich es mir vorstelle.

Die Idee von Wennerer ist ja eher eine Idee zur Grafikbearbeitung. Klingt gut, ist abgespeichert, aber passt gerade nicht zum Projekt.

Meine aktueller Plan:
i) ich nehme einen anderen PDF-Renderer: Sumatra PDF; der sperrt die PDF-Datei nicht und zeichnet neu, wenn sich in der PDF-Datei etwas ändert.

ii) ich benutze eine andere Klasse für die pdf-Ausgabe: libjpfpdf; die erzeugt lesbare PDFs
Blöd nur, das ich rounded Rectangle manuell programmieren mußte als Linien und einzelne Bézierkurven, weils keine Kreise gibt... tztztz
Naja. Gar nicht so schwer, wenn man weiß, wie:
Den Cursor positionieren. Mache ich mit dem Zeichnen der letzten Linie:

Code: Alles auswählen

28 -30 l
Zwei Haltepunkte setzen, den Endpunkt als Startpunkt der nächste Linie und fertig

Code: Alles auswählen

29.1 -30 30 -30.9 30 -32 c
Ist letztlich auch nur ein 30-zeiler geworden.
Die Probleme waren dabei eher typisch:
- wo sind x0, y0, x1, ..., y3 => vertauschen der Punkte mit den Haltepunkten gibt lustige Blitze statt Kreise
- Ausgabe der Zahlen mit "," statt mit "." => das PDF erzeugt wilde Striche; danke, FloatToStr()
- Die pdf-Klasse hat als Bezugspunkt oben links, pdf aber unten links; alle y-Werte müssen negativ sein !$grmbl%.

Hier ein kurzer Auszug aus der PDF-Datei mit den Daten einer Person:

Code: Alles auswählen

% @I12935@ INDI
12 -30 m
28 -30 l
29.1 -30 30 -30.9 30 -32 c
30 -66 l
30 -67.1 29.1 -68 28 -68 c
12 -68 l
10.9 -68 10 -67.1 10 -66 c
10 -32 l
10 -30.9 10.9 -30 12 -30 c
S
20 -26 m 20 -30 l S
20 -68 m 20 -72 l S
BT /F1 3.18 Tf ET
BT 11 -33.954 Td (Meyer) Tj ET
BT /F2 3.18 Tf ET
BT 11 -37.954 Td (Bernhard) Tj ET
BT 11 -41.954 Td (Wilhelm) Tj ET
BT 11 -53.954 Td (* 16.1.1796) Tj ET
BT 11 -57.954 Td (Anten) Tj ET
BT 11 -61.954 Td (+ 26.6.1879) Tj ET
BT 11 -65.954 Td (Berge) Tj ET
% /@I12935@ INDI
Am Anfang und am Ende der Daten einer Person jeweils noch einen Kommentar mit der Personen-ID eingefügt: % @I12935@ INDI (Gedcom-Notation)
Damit habe ich einen guten Ausgangspunkt, alle x-Werte einer Person zu verändern ;-)
Das funktioniert in einer ersten Demo schon ganz gut.
Also ein Spielobjekt auf dem Canvas zur Auswahl und das Ergebnis nach dem Speichern direkt im PDf angezeigt.

iii) Jetzt fehlen nur noch die Linien für die Ehen und die Kinder...
Aber das ist ja Fleißarbeit.
just my two Beer

Antworten