Алгоритмы линейной маршрутизации GEF / draw2d - PullRequest
0 голосов
/ 08 марта 2011

Я использую GEF и Draw2d для создания графика.

У меня есть трехуровневая структура, которую я хочу показать, что означает:

RootEditPart
/
Level1EditPart
/
Level2EditPart
/
Level3EditPart

Там, где у Level2 есть несколько дочерних элементов.

Я хочу нарисовать связи между Level3EditParts (в контейнере Level2).

Что меня смущает, так это где я задаю алгоритм линейной маршрутизации для этих соединений и как он наследуется через иерархию родителей / дочерних элементов EditPart / Figure.

В идеале, я бынравится использовать ShortestPathConnectionRouter.Я попытался использовать это, установив это как маршрутизатор соединения для уровня соединения, используя рисунок из моего Level2EditPart.Насколько я понимаю, тогда он будет использовать детей этой фигуры в качестве препятствий, которых следует избегать (поэтому он не будет рисовать линии через мои другие Уровни 3, но попытаться их избежать).

Хотя это не работает так,когда я отлаживаю код, похоже, что в ShortestPathRoutingAlgorithm используется одна система координат для фигуры соединения (я предполагаю, что это система координат для уровня соединений), а другая для фигур уровня 3 (координатаСистема ординат их родителей. Рисунок 2-го уровня).Это означает, что ему никогда не удастся сработать, когда он пересекает один из моих уровней 3, поэтому никогда не пытаюсь их избегать.

Так что я либо неправильно понимаю возможности ShortestPathConnectionRouter, либо я его неправильно настроил.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 14 сентября 2011

Вы не можете установить ShortestPathConnectionRouter в качестве маршрутизатора уровня соединения, так как вы должны предоставить ему родительскую фигуру в конструкторе. Чтобы использовать этот маршрутизатор, вы должны установить его для каждого соединения, где вы хотите его использовать, и вы также должны предоставить родительскую фигуру, которую можно легко получить, например:

if(getSource().getParent() instanceof MyNodeEditPart) {
    MyNodeEditPart parent = (MyNodeEditPart) getSource().getParent();
    conn.setConnectionRouter(new ShortestPathConnectionRouter(parent.getFigure()));
}

Так будет работать.

...