Ich erstelle einen interaktiven Stammbaumersteller, im Gegensatz zu einfacheren Versionen, die einfache Ahnentafel/Bäume sind.Wie kann ich Überlappungen in einem Stammbaumgenerator verhindern?
Die Anforderungen für Mine (basierend auf familyecho.com) sind:
- mehrere Partner vs nur ein einfaches 2 Elternteil 1 Kind, die Sie normalerweise sehen.
- mehrere Geschwister
- Partner nicht unbedingt Kinder haben müssen
- es muss nicht immer ein Elternteil „Paar“ sein, kann es nur eine einzige Vater/Mutter sein
Das Problem Ich begegne ist: Ich erzeuge die Offsets basierend auf dem "aktuellen" Knoten/Familienmitglied und wenn ich über die erste Generation mit sagen, 2 Eltern, es überlappt.
Beispiel der Überlappung sowie Partner nicht auf der gleichen X-Achse gezogen wird:
Hier ist die actual app und main js file, wo ich das Problem habe. Und hier ist ein simplified jsfiddle Ich erstellt, dass das Eltern/Offset-Problem, obwohl ich wirklich Überschneidungen für diese im Allgemeinen lösen muss, zusätzlich zu sicherzustellen, dass Partner auf der gleichen x-Achse wie andere Partner gezeichnet werden.
Wie kann ich diese und mögliche Konflikte in der Zukunft lösen? Benötige ich irgendeine Art von Neuzeichnungsfunktion, die collisions erkennt und die Offsets jedes Blocks bei der Erkennung anpasst? Ich versuche, es nahtlos zu machen, so dass nur ein begrenztes Neuzeichnen möglich ist.
Ein Beispiel zum „Kontext“ versetzt Berechnung oder aktuellen Knoten:
var offset = getCurrentNodeOffset();
if (relationship == RELATIONSHIPS.PARTNER) {
var t = offset.top; // same level
var l = offset.left + (blockWidth + 25);
} else {
var t = offset.top - (blockHeight + 123); // higher
var l = offset.left - (blockWidth - 25);
}
Um die Frage der überlappenden Opa/Oma, alles, was Sie tun müssen, ist die Entfernung zwischen den Eltern in Frage, vielleicht? – Rodrigo
Haben Sie versucht, Knoten von oben nach unten auszulegen, anstatt nach dem aktuellen Bottom-Up-Ansatz? Sie erhalten eine Überschneidung, weil Sie (zumindest im JavaScript-Beispiel) die Eltern basierend auf der Position des Kindes positionieren. Das scheitert, weil Geschwisterknoten nicht berücksichtigt werden, wenn die neuen Eltern hinzugefügt werden, es wird nur dort abgelegt und hofft auf das Beste. – aroth
@Rodrigo - Ich glaube, ich habe das versucht, bin aber auf etwas anderes gestoßen.Ich werde versuchen, es in einer anderen Geige nachzubauen. –