Draw2d中的连线路由器及gef中连线抗锯齿

前两天也是在javaEye中看到一位大哥关于gef中连线抗锯齿的文章,学习之后感觉效果不错,如果你也正在用gef这个框架开发东西,不妨把下面这些代码加入,一定会让你的连线视觉效果好些~~

 

protected void refreshVisuals() {  
  super.refreshVisuals();
  //以下这些代码是设置连接线抗锯齿
  ConnectionLayer connectionLayer = (ConnectionLayer) getLayer(LayerConstants.CONNECTION_LAYER);
  connectionLayer.setConnectionRouter(new ShortestPathConnectionRouter(figure));
  //new ManhattanConnectionRouter()只能画垂直和水平线
  //new FanRouter()若两结点间有两条线,就把他们分开表示~~
      if ((getViewer().getControl().getStyle() & SWT.MIRRORED ) == 0)
          connectionLayer.setAntialias(SWT.ON); 
      Animation.run(400);
 }

 

首先说下上面这段代码加到哪里,一般来说用gef画图都会有一个容器类,也就是包含其它所有图形模型的模型,这样的话序列化反序列化都会很容易。那么就在这个容器模型对应的EditPart中覆盖registerVisuals() 方法,加上上面这些代码就可以了~~~是不是很简单。。。

 

再说说draw2d中的连线路由器ConnectionRouter,连线路由器决定了图形之间连线的路线。主要有以下几种

1.AutomaticRouter,这是一个抽象类,要用的话得用它的实现类FanRouter ,这个路由会判断两结点间是否有重复线,有的话会把重复的线分开,  变成两条线~~

2.BendpointConnectionRouter,增加连接线的路由点 ,让你的连线有路由点,从而可以方便的改变方向

3. ConnectionRouter.NullConnectionRouter,这是默认的路由,没增加特殊功能,一般用null表示就行,如下面的代码设成connectionLayer.setConnectionRouter(null),就可以了。

4. ManhattanConnectionRouter,这个路由能保证画出来的线是垂直或水平的,如果你需要这样的效果就可以设置成这个路由。

5. ShortestPathConnectionRouter 最短路径路由器,这个路由还是比较强大的,可以方便的避免连线穿越结点,它会以最近的路径绕开其它结点,完成连线。

当然了,如果以上这些路由都不能满足你的要求,你可以自定义一个路由器,只要实现ConnectionRouter接口即可,详细教程请参考http://www.ibm.com/developerworks/cn/opensource/os-ecl-gef/part2/index.html

 

希望对大家有帮助~~~欢迎一起探讨~~

你可能感兴趣的:(html,框架,OS,IBM,OpenSource)