GEF中的锚点Anchor
程序员文章站
2024-03-24 11:46:22
...
还是昨晚做的小例子。实现的是给图形添加连线、删除连线以及连线的重新定向。
不过,当我试着把图形换成椭圆时,却发现连线不是太好看:
连线与图形之间竟然会出现空白区域。
原来问题出在锚点(Anchor)上。连线是连接的两个锚点,而不是图形。参考了GEF自带的Shapes例子,在ShapeEditPart类里看见如下变量声明:
private ConnectionAnchor anchor;
而且接下来有一个根据模型类型创建
不同类型锚点的方法:
protected ConnectionAnchor getConnectionAnchor() {
if (anchor == null) {
if (getModel() instanceof EllipticalShape)
anchor = new EllipseAnchor(getFigure());
else if (getModel() instanceof RectangularShape)
anchor = new ChopboxAnchor(getFigure());
else
// if Shapes gets extended the conditions above must be updated
throw new IllegalArgumentException("unexpected model");
}
return anchor;
}
这样,获得锚点的各种方法就可以调用上面的方法:
public ConnectionAnchor getSourceConnectionAnchor(
ConnectionEditPart connection) {
return getConnectionAnchor();
}
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
return getConnectionAnchor();
}
public ConnectionAnchor getTargetConnectionAnchor(
ConnectionEditPart connection) {
return getConnectionAnchor();
}
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
return getConnectionAnchor();
}
从上边的代码使用了两种锚点:EllipseAnchor与ChopboxAnchor。ChopboxAnchor就是我做的例子中原来使用的;EllipseAnchor嘛,看名字应该是为Ellipse量身定制的吧!
参考上边的代码修改我的例子,果然成功了:
好好学习,天天向上!
转载于:https://my.oschina.net/plumsoft/blog/28535