Как установить Z-порядок соединений в GEF?

В GEF соединения располагаются по умолчанию в Z-порядке поверх фигур.

Каков правильный способ:
1. Показать фигуру в Z-порядке поверх соединения?
2. Установить Z-порядок соединений относительно друг друга?


person Hendrik Jan van Randen    schedule 19.03.2013    source источник


Ответы (2)


Конечно, вы можете, позвольте мне объяснить, как достичь обеих ваших целей:

GEF/Draw2d использует отдельные слои для форм/соединений, они идентифицируются соответственно константами LayerConstants.PRIMARY_LAYER и LayerConstants.CONNECTION_LAYER. Вы можете изменить Z-порядок между фигурами и соединениями, изменив порядок добавления их слоев в LayeredPane в вашем RootEditPart.

Например, переопределите ScalableRootEditPart.createPrintableLayers() следующий способ инвертирования рисования слоя:

protected LayeredPane createPrintableLayers() {
    LayeredPane pane = new LayeredPane();

    Layer layer = new ConnectionLayer();
    layer.setPreferredSize(new Dimension(5, 5));
    pane.add(layer, CONNECTION_LAYER);

    layer = new Layer();
    layer.setLayoutManager(new StackLayout());
    pane.add(layer, PRIMARY_LAYER);

    return pane;
}

Чтобы достичь второй цели, вам нужно изменить алгоритм рисования соединений, переопределив ConnectionLayer.paintChidren(), поскольку все фигуры соединений являются дочерними фигурами ConnectionLayer (обратите внимание, что реализация по умолчанию наследуется от Figure.paintChidren()).

Я предлагаю вам добавить целочисленное свойство Z-порядка к фигурам соединения (те, которые созданы вашими частями соединения), чтобы алгоритм использовал их для фактического рисования их в правильном порядке. Затем реализуйте в своих частях соединения стратегию относительного упорядочения, которая будет нести ответственность за обновление свойства Z-порядка в соответствующих фигурах.

person e.persiani    schedule 24.03.2013

Я не думаю, что вы можете сделать это. Насколько я знаю, формы и соединения находятся на разных слоях, причем слой форм находится ниже слоя соединений. Вы, вероятно, не сможете изменить Z-порядок соединений, потому что все это управляется фреймворком.

При использовании таких фреймворков, как GEF, вы обмениваете автоматическую функциональность на свободу :-).

person vainolo    schedule 21.03.2013