В GEF соединения располагаются по умолчанию в Z-порядке поверх фигур.
Каков правильный способ:
1. Показать фигуру в Z-порядке поверх соединения?
2. Установить Z-порядок соединений относительно друг друга?
В GEF соединения располагаются по умолчанию в Z-порядке поверх фигур.
Каков правильный способ:
1. Показать фигуру в Z-порядке поверх соединения?
2. Установить Z-порядок соединений относительно друг друга?
Конечно, вы можете, позвольте мне объяснить, как достичь обеих ваших целей:
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-порядка в соответствующих фигурах.
Я не думаю, что вы можете сделать это. Насколько я знаю, формы и соединения находятся на разных слоях, причем слой форм находится ниже слоя соединений. Вы, вероятно, не сможете изменить Z-порядок соединений, потому что все это управляется фреймворком.
При использовании таких фреймворков, как GEF, вы обмениваете автоматическую функциональность на свободу :-).