Eclipse GEF 风扇路由器
Eclipse GEF FanRouter
我正在使用 GEF 创建一个可视化文件之间依赖关系的工具。我成功地建立了节点之间的连接,我还可以切换功能以使用 ManhattenConnectionRouter
.
但是我发现使用 FanRouter
有问题。
我尝试按照 GEF 提供的逻辑示例进行操作,但我仍然遇到问题。遗憾的是,没有其他教程展示如何实现 FanRouter
。
以下是我的代码摘录:
基础class,实现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-class 就没有遇到任何问题。 (没有修改DependencyGraphPart
)
这是我积极使用任何 Router
的两个地方。
不幸的是,我不太了解 draw2d and/or GEF,无法找到我的问题。
FanRouter 是处理冲突的路由器。它需要 "next" 路由器,它可以是 BendpointConnectionRouter,例如,它可以完成布置连接的所有艰苦工作。
一旦 Fanrouter 布局了一个连接,它将首先使用 "next" 路由器进行实际的连接布局,然后检查该连接是否与具有相同源和目标的任何其他连接重叠,如果是,它将引入额外的弯点以确保连接不会相互重叠。
下面是正确使用 FanRouter 的例子:
AutomaticRouter router = new FanRouter();
router.setNextRouter(new BendpointConnectionRouter());
connectionLayer.setConnectionRouter(router);
我正在使用 GEF 创建一个可视化文件之间依赖关系的工具。我成功地建立了节点之间的连接,我还可以切换功能以使用 ManhattenConnectionRouter
.
但是我发现使用 FanRouter
有问题。
我尝试按照 GEF 提供的逻辑示例进行操作,但我仍然遇到问题。遗憾的是,没有其他教程展示如何实现 FanRouter
。
以下是我的代码摘录:
基础class,实现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-class 就没有遇到任何问题。 (没有修改DependencyGraphPart
)
这是我积极使用任何 Router
的两个地方。
不幸的是,我不太了解 draw2d and/or GEF,无法找到我的问题。
FanRouter 是处理冲突的路由器。它需要 "next" 路由器,它可以是 BendpointConnectionRouter,例如,它可以完成布置连接的所有艰苦工作。 一旦 Fanrouter 布局了一个连接,它将首先使用 "next" 路由器进行实际的连接布局,然后检查该连接是否与具有相同源和目标的任何其他连接重叠,如果是,它将引入额外的弯点以确保连接不会相互重叠。 下面是正确使用 FanRouter 的例子:
AutomaticRouter router = new FanRouter();
router.setNextRouter(new BendpointConnectionRouter());
connectionLayer.setConnectionRouter(router);