Eclipse GEF FanRouter
Я использую GEF для создания инструмента, который визуализирует зависимости между файлами. Мне удалось установить соединения между узлами, и я также могу переключить функциональность, чтобы использовать ManhattenConnectionRouter
,
Однако я нахожу проблемы с использованием FanRouter
,
Я попытался следовать логическому примеру, который предоставляет GEF, но у меня все еще есть проблемы. К сожалению, нет другого учебника, который показывает, как реализовать FanRouter
,
Вот выдержки из моего кода:
Базовый класс, реализующий FreeformLayer
:
public class DependencyGraphPart extends AbstractGraphicalEditPart implements LayerConstants {
private DependencyGraphAdapter adapter;
public DependencyGraphPart(){
super();
adapter = new DependencyGraphAdapter();
}
@Override protected IFigure createFigure() {
FreeformLayer layer = new FreeformLayer();
layer.setLayoutManager(new FreeformLayout());
layer.setBorder(new LineBorder(1));
return layer;
}
@Override protected void refreshVisuals(){
ConnectionLayer cLayer = (ConnectionLayer) getLayer(CONNECTION_LAYER);
cLayer.setAntialias(SWT.ON);
AutomaticRouter frouter = new FanRouter();
cLayer.setConnectionRouter(frouter);
}
И вот мой ConnectionClass:
public class DCDependencyPart extends AbstractConnectionEditPart{
private DCDependencyAdapter adapter;
private Label label;
public DCDependencyPart() {
super();
adapter = new DCDependencyAdapter();
}
@Override protected void createEditPolicies() {
installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new ConnectionEndpointEditPolicy());
}
@Override
protected IFigure createFigure(){
PolylineConnection conn = new PolylineConnection();
conn.setLineWidth(conn.getLineWidth()*2);
conn.setConnectionRouter(new FanRouter());
conn.setTargetDecoration(new PolylineDecoration());
conn.setToolTip(new TooltipFigure());
label = new Label("1");
label.setOpaque(true);
label.setBackgroundColor(ColorConstants.buttonLightest);
label.setBorder(new LineBorder());
conn.add(label, new MidpointLocator (conn, 0));
return conn;
}
Когда я попытался реализовать ManhattenConnectionRouter
У меня не было проблем с этим, просто добавив его в класс Connection. (Без изменений DependencyGraphPart
)
Это два места, где я активно использую любой Router
, К сожалению, я недостаточно хорошо знаю draw2d и / или GEF, чтобы найти мою проблему.
1 ответ
FanRouter - это маршрутизатор для обработки коллизий. Это требует "следующего" маршрутизатора, который может быть BendpointConnectionRouter, например, который сделает всю тяжелую работу для установления соединения. После того, как Fanrouter разметит соединение, он сначала будет использовать "следующий" маршрутизатор для выполнения фактической разметки соединения, а после этого проверит, перекрывается ли это соединение с любыми другими соединениями с тем же источником и назначением, и если да, то он привнес бы дополнительные точки изгиба для убедитесь, что соединения не перекрывают друг друга. Ниже приведен пример правильного использования FanRouter:
AutomaticRouter router = new FanRouter();
router.setNextRouter(new BendpointConnectionRouter());
connectionLayer.setConnectionRouter(router);