![]() |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Liste der Anhänge anzeigen (Anzahl: 1)
So, um eines Vorweg zu nehmen, danke für Eure bisherigen Antworten.
Ich arbeite mich grade erst in die Materie ein. ANFÄNGER!!!! Ich bin wieder in die Delhpipraxis-Community zurückgekehrt, da ich früher hier sehr gute Erfahrungen gemacht habe. Ich entwickle unter OS X mit ![]() Von vorne: Die Beispieldatenbank hat folgende Tabellen:
Was mich also beschäftigt ist zum einen, wie baue ich um meinen Probanden, der stets zentriert im Fokus der grafischen Ausgabe sein soll, alles andere um ihn herum? Deswegen auch die Frage mit den Scrollbars! Vielleicht besteht die Möglichkeit, dass wir hier Step by Step, Tutorialartig so etwas gemeinsam definieren können, das fände ich klasse ;) So würde die grafische Ausgabe zum Beispiel mal ausschauen: |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Was hast du denn bisher?
Zeig mal Quelltext! Der Ansatz von Namenloser mit den Layern ist eigentlich ganz knuffig. |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Meine Gedanken (der Einfachheit halber mal eingedeutscht):
Delphi-Quellcode:
Ist das ein prinzipiell falscher Ansatz?
// es gibt mehrere Möglichkeiten der Darstellung, die mir vorschweben
// // 1. der Proband ist eine Partnerschaft // 2. der Proband ist eine einzelne Person // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // zu 1. (Nachteil hier, es werden keine weiteren Partner & Geschwister angezeigt) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TPerson = class const Width: 200; Height: 75; public Name: String; Vater: TPerson; Mutter: TPerson; procedure Draw(Canvas, TCanvas; x, y: Integer); end; TPartnerschaft = class // im Falle 1. wäre Partnerschaft dann der "Proband" public PartnerA: TPerson; // Mann oder Frau bei gleichgeschlechtlichen Partnerschaften PartnerB: TPerson; // Frau " Kinder: TList<TPerson>; // Reihenfolge der Kinder kann schon bei der SQL-Abfrage erfolgen procedure Draw(Canvas: TCanvas); end; procedure TPerson.Draw(Canvas: TCanvas; x, y: Integer); begin Canvas.DrawRectangle(x, y, Width, Height); // später kann hier noch der Name der Person ausgegeben werden if Vater <> nil and Mother <> nil then begin // Eltern zeichnen dementsprechend versetzt über dem Probanden (x, y müssen angepasst werden) end else if Vater <> nil and Mother = nil then begin // nur Vater zeichnen end else if Vater = nil and Mother <> Nil then begin // nur Mutter zeichnen end; end; procedure TPartnerschaft.Draw(Canvas: TCanvas); begin // hier wird es nun kompliziert, da zunächst alle Kinder gezählt werden müssen, um den Probanden oberhalb zu zentrieren, ABER // sollte die Breite der Elterngenerationen (Eltern, Großeltern) breiter sein, als die der Kinder, so orientiert sich die Ausrichtung an diesen if PartnerA <> nil and PartnerB <> nil then begin // iterativ alle Elterngenerationen zeichnen, aber wie finde ich heraus, wieviele das sind, also durch Iteration? PartnerA.Draw(Canvas, x, y); // ??????? end else if PartnerA <> nil and PartnerB = nil then begin // nur PartnerA zeichnen end else if PartnerA = nil and PartnerB <> Nil then begin // nur PartnerB zeichnen end; for i as Integer = 0 to Kinder.Count do begin // auch hier müssen Koordinaten ausfindig gemacht werden, damit die Kinder unter dem Probanden und jeweils nebeneinander gezeichnet werden können end; end; // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // zu 2. (Partner & Geschwister können angezeigt werden) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // um diesen soll sich dann alles drehen, also der Stammbaum aufbauen TProband = class(TPerson) public Geschwister: TList<TPerson>; Partner: TList<TPerson>; Kinder: TList<TPerson>; // Draw-Methoden müssten analog zu oben sein end; TStammbaum = class(TCanvas) puclic Proband: TProband; // oder eben TPartnerschaft // Draw-Methoden müssten analog zu oben sein end; |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Wenn ich mir das Bild so anschaue, dann kann man die Daten zu dieser Anzeige hiermit abbilden (die Bilder habe ich jetzt mal weggelassen):
Delphi-Quellcode:
unit Unit2;
interface uses System.Generics.Collections; type TLocationDateTime = record Location: string; Timestamp: TDateTime; end; TPersonViewModel = class private FID: TGUID; FLastName: string; FFirstName: string; FBorn: TLocationDateTime; FDied: TLocationDateTime; public property ID: TGUID read FID write FID; property LastName: string read FLastName; property FirstName: string read FFirstName; property Born: TLocationDateTime read FBorn; property Died: TLocationDateTime read FDied; end; TParentViewModel = class( TPersonViewModel ) private FFather: TPersonViewModel; FMother: TPersonViewModel; public property Father: TPersonViewModel read FFather; property Mother: TPersonViewModel read FMother; end; TChildViewModel = class( TPersonViewModel ) private FEngagedTo: TList<TPersonViewModel>; public property EngagedTo: TList<TPersonViewModel> read FEngagedTo; end; TRelationViewModel = class( TPersonViewModel ) private FChildren: TList<TChildViewModel>; public property Children: TList<TChildViewModel> read FChildren; end; TSelectedPersonViewModel = class( TPersonViewModel ) private FFather: TParentViewModel; FMother: TParentViewModel; FRelations: TList<TRelationViewModel>; FSiblings: TList<TChildViewModel>; public property Father: TParentViewModel read FFather; property Mother: TParentViewModel read FMother; property Siblings: TList<TChildViewModel> read FSiblings; property Relations: TList<TRelationViewModel> read FRelations; end; implementation end. |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Zitat:
Bleibt nach wie vor zu klären, wie man den Baum "günstig" grafisch in einer Paintbox ausgibt, sodass er sich auch scrollen lässt (Zoom wäre natürlich super). ;) und, wie lässt es sich umsetzen, bei so einem verschachtelten Modell, dass jeder Eintrag sich auf der Zeichenfläche anklicken lässt? P.S. Was macht EngagedTo? |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Das war nur eine begriffliche Entgleisung und sollte MarriedWith, oder welche Art der Beziehung du dort abbilden möchtest.
Siehe Geschwister und Kinder auf dem Bild, da sind noch 0..2 Personen darunter. |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Zum Zeichnen:
Die Paintbox in eine ScrollBox packen und schon scrollt das, wenn die ScrollBox kleiner als die Paintbox wird. Die Größe der Paintbox lässt sich einfach berechnen, denn jeder Eintrag hat eine feste Größe und somit ist es fast ein simples Multiplizieren und Addieren. |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Hallo lieber Community,
ich möchte dieses Thema erneut aufgreifen, da ich keinen Schritt weitergekommen bin. Wie gesagt, ich bin Hobby-Entwickler und kann daher oft nicht jeden Gedanken problemlos nachvollziehen. Ich sage das nur, damit die Antworten gern „normalofreundlich“ ausfallen, ohne Fachbegriffe bzw. diese erklärt. Zitat:
Zitat:
Was ist in dem Fall, dass eine Ausgangsperson bzw. deren Geschwister mehrere Partner hatte? Die müssen ja dann auch in dem Layer dargestellt werden und die Kinder der einzelnen Beziehungen darunter. Zitat:
Zitat:
Ich würde mich sehr freuen, wenn wir das Step-by-Step behandeln könnten, damit ich es verstehe und dann auch zu dem, juhu, wie ich Mathematik geliebt habe :( , Berechnungen der Koordinaten kommen. Ich danke sehr im Voraus. |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Also erst einmal hierzu:
Zitat:
Willst Du hingegen die Möglichkeiten die sich juristisch ergeben können, wirst Du nicht umhin kommen deine Daten in einer solchen (oder ähnlichen) Struktur abzulegen:
Delphi-Quellcode:
Gruß
TRelPerson =class
relatedPersID : tID; reltype : Treltype; end; TPerson = class relpersonslist: tlistofRelPerson; Name: String; end; K-H |
AW: konzeptionelle Gedanken optische Darstellung Stammbaum
Zitat:
Wie gesagt, mir bereitet eher die Datenstruktur und deren grafische Ausgabe Kopfzerbrechen, ein normaler Baum kommt hier nicht in Frage und ich denke, Namenloser hat mit seiner Graphen-Argumentation recht. Nur ist diese Materie mir völlig fremd. Ich weiß nur, dass man da nicht unbedingt auf Rekursion zurückgreifen muss. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 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 by Thomas Breitkreuz