2015-08-10 12 views
14

Próbuję zaimplementować wykres sieciowy mapy koncepcji za pomocą d3.js. Próbka wykresu jest dostępna tutaj w js-fiddle.Sieciowa sieć koncepcyjna - problem z węzłem

js-fiddle

Fiddle Code kierunku, w którym węzeł jest skierowany tylko z lewym kierunku. Wszystkie węzły po prawej stronie mają linie od tyłu prostokąta. Chcę wyświetlić wszystkie punkty węzłów po lewej i prawej stronie.

Oczekiwany Wykres: Concept Map Expected Graph

+0

Trudno zinterpretować swoje pożądane zachowanie, ale to brzmi jak żądane zachowanie jest : gdy umieścisz kursor nad dowolnym węzłem "A", zaznacz wszystkie węzły połączone z węzłami root skojarzonymi z literą "A". W pierwszym przykładzie oznacza to, że najechanie kursorem na "1to1media.com" podświetli na przykład prawie każdy węzeł na stronie, ponieważ katalog główny "1to1media.com" to "webmetro.com", który jest powiązany z prawie każdym innym węzeł. Czy o to prosisz? – Palpatim

+0

Witam Palpatim, zaktualizowałem moje pytanie. życzliwie przejrzyj to. Daj mi znać, jeśli masz jakieś rozwiązanie. –

Odpowiedz

3

Znalazłem rozwiązanie, sprawdzając pozycję krzywej, używając tego kodu.

if(af.x>180) 
{ 
    af.xOffset = -S; 
}else 
{ 
    af.xOffset = S; 
} 

oraz sprawdzenie stanu dla funkcji Push

if (ab.x > 180) { 
        H.push({ 
         source: ae, 
         target: ab, 
         key: aa, 
         canonicalKey: aa, 
         x1: ae.x + (ab.type === "theme" ? 0 : U), 
         y1: ae.y + K/2, 
         x2: Math.cos(Y) * X + ab.xOffset, 
         y2: Math.sin(Y) * X 
        }) 
       } 
       else if (ae.x < 180) { 
        H.push({ 
         source: ae, 
         target: ab, 
         key: aa, 
         canonicalKey: aa, 
         x1: ae.x + (ab.type === "theme" ? U : 0), 
         y1: ae.y + K/2, 
         x2: Math.cos(Y) * X + ab.xOffset, 
         y2: Math.sin(Y) * X 
        }) 
       } 

oczekiwany wynik był

enter image description here

2

Problem masz to, że linki do przyłączenia węzła lewym górnym rogu. tej centralnej kolumny.

Musisz:

  1. znaleźć źródło wszystkich linków udających się do prawej strony.
  2. Przesunięcie źródła x położenia o szerokość środkowej kolumny.

Możliwe, że zmieniłem źródło i cel. Kod wygląda na częściowo zminimalizowany, więc trudno go odczytać. Można uzyskać szerokość elementu stosunkowo łatwo (Example).

Możesz rozpoznać, czy link powinien zostać zmieniony poprzez porównanie pozycji źródłowej i docelowej x.

Alternatywnie można spojrzeć na węzły, które łączą się z czymś, co znajduje się po prawej stronie, co może okazać się nieco bardziej złożone, ale rozpoznać łącza, które wymagają zmiany dokładniej.

EDIT:

Można także spróbować wiążący do centrum węzła, zamiast rogu.

+0

Jest bardzo trudno zidentyfikować węzeł, który jest po prawej stronie, i jak rozpoznać przesunięcie dla każdego węzła? –

+0

Myślę, że byłoby łatwiej spojrzeć na linki, mają one źródło i miejsce docelowe. Tak więc, jeśli source.x> źródło.x, dostosuj source.x. Jeśli nadal masz problemy, po prostu zmuszaj każde łącze do wiązania się z centrum węzła - to powinno dać dobry efekt. –