`
zhongkem
  • 浏览: 148708 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

 

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

分享到:
评论
1 楼 xdymzhang 2010-10-15  
你好,我用了您的方法,有个小问题:比如要建立A到B的连接,点击A,鼠标移到B上后出现了shortestPathRouter的连接轨迹,但是点击B后实现的连接却不是按那个轨迹连接的,只是一条直线,请问我的哪块还没有配置好?谢了!

相关推荐

    Draw2D 使用例子

    GEF Draw2D 使用例子,可以直接运行的

    GEF/Draw2D入门例子

    GEF/Draw2D入门例子 主要是Draw2d的几个入门的例子和入门的书籍 对eclipse中图形的绘画讲解

    draw2d,swt

    这是一个Draw2d的开发文档,可以学习一下eclipse插件开发的一些画图技术

    eclipse插件框架GEF之draw2d api

    eclipse插件框架,GEF之draw2d api,eclipse插件框架,GEF之draw2d api

    draw2d/gef入门例子

    GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子GEF的例子

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    GEF-ALL-3.7 GEF-ALL-3.8 官方包。 GEF Draw2d 学习资料

    用draw2d画uml图源码实例

    源码实现用gef 和draw2d画类图和连线,代码相对来说简单易懂,易于扩展

    GEF-ALL-3.2.2

    GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...

    Eclipse GEF+Draw2DAPI

    Eclipse的图形编辑框架GEF的参考API,chm格式

    GEF 开发简单示例

    这是我参考了一些其他资料,自己写的一个GEF示例...1. 在你的Eclipse中要有GEF, Draw2d的包 2. 将此压缩包中的eclipse project引入到你的Eclipse环境中 3. 运行这个插件 4. 看到界面后,点击 Tools -- Open GEF Editor

    网上整理的draw2d资料

    之前学习GEF的开发,发现view层基本用到了draw2d的东西,于是整理了下相关资料,分享下。

    GEF-draw2d-sdk-3.6.1.zip

    对应版本有用,要把解压后的文件复制占到对应的插件目录,就可以使用

    IBM GEF 推广资料

    Agenda Start things off What is GEF? GEF Demo Draw2d Overview Example GEF Overview Break Hands-on Activity: Shapes Example

    GEF 入门操作

    与 其他一些MVC编辑框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架 的局限(不过实际上还是很少有脱离Draw2D的实现)。

    drawjs:eclipse draw2d的端口

    eclipse draw2d的端口 本项目内置可以运行在浏览器端的图形编辑框架。实现基于标签的。 第一版本使用TypeScript实现该库。第二版本使用Rust / C ++语言编写,编译为WebAssembly后,在<canvas> HTML标签上运行。 ...

    GEF 进阶+源码.rar

    GEF 进阶+源码 IBM中文文档

    eclipse及gef相关文档

    eclipse plug-ins pdf文档 eclipse gef pdf 文档 简单易学

    GEF教程及demo源码

    GEF教程及demo源码

    GEF中文教程+代码

    dudu翻译的GEF中文教程,入门最佳资料。附每章代码。

    eclipse中emf,gef,ve的安装

    eclipse中emf,gef,ve的安装

Global site tag (gtag.js) - Google Analytics