GEF中同時使用兩個Router

                 gef中經常會有很多連線,這些連線如何和每個node連接,允不允許交叉等等都是用router來控制的.網上有篇文章對這個做了一些介紹:
          http://www-128.ibm.com/developerworks/cn/opensource/os-ecl-gef/part2/
                 我現在做的這個項目需要在兩個node之間同時存在多根線,如果不使用router的話就只能看見一根,在diagram的 figure里面set一個FanRouter作為缺省的router就可以解決這個問題.兩個node之間如果存在多根連線的話,FanRouter會把它們分布成扇形,每根連線都可以看見.但是FanRouter好像只能在diagram的figure里面設置,如果每根connection你都設置成FanRouter,反而不會啟效果,這可能跟它的handlecollision方法的算法有關.
                  但是設置成FanRouter之后有一個問題:我的項目中還有那種自連接的connection(該connection的source和target是同一個node),原先我是把這種connection的router設置為bendconnectionrouter,但是后來設置了FanRouter之后BendConnectionRouter好像就失效了,不管你的connection上面有多少個bendpoint都看不出來效果.
                  后來終于找到了讓這兩張router和平共處的辦法,只要加一行:fanRouter.setNextRouter(new BendPointConnectionRouter());setNextRouter這個方法有點怪,按照字面的理解,應該是fanrouter的下一個router,按理說應該是先用fanrouter來layout 連線,然后再使用BendPointConnectionRouter來layout 連線,但是它實際上是先用BendPointConnectionRouter來layout 連線,然后再使用fanRouter.

          posted on 2008-08-12 18:06 小牛小蝦 閱讀(1794) 評論(2)  編輯  收藏

          評論

          # re: GEF中同時使用兩個Router 2008-08-12 20:37 Always BaNg.

          其實在Logic Example就有這個實例。

          參見 LogicDiagramEditPart.refreshVisuals

          protected void refreshVisuals() {
          Animation.markBegin();
          ConnectionLayer cLayer = (ConnectionLayer) getLayer(CONNECTION_LAYER);
          if ((getViewer().getControl().getStyle() & SWT.MIRRORED ) == 0)
          cLayer.setAntialias(SWT.ON);

          if (getLogicDiagram().getConnectionRouter().equals(LogicDiagram.ROUTER_MANUAL)) {
          AutomaticRouter router = new FanRouter();
          router.setNextRouter(new BendpointConnectionRouter());
          cLayer.setConnectionRouter(router);
          } else if (getLogicDiagram().getConnectionRouter().equals(LogicDiagram.ROUTER_MANHATTAN))
          cLayer.setConnectionRouter(new ManhattanConnectionRouter());
          else
          cLayer.setConnectionRouter(new ShortestPathConnectionRouter(getFigure()));
          Animation.run(400);
          }

          }  回復  更多評論   

          # re: GEF中同時使用兩個Router 2008-08-13 17:24 yes1983

          @Always BaNg.
          不好意思,沒有完整的看過logic那個例子的源碼,這些都是平常做GEF項目的時候慢慢積累的一些經驗,貽笑大方了,赫赫  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          eclipse

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 丰都县| 南陵县| 资溪县| 泾阳县| 莱阳市| 玉龙| 曲靖市| 闽侯县| 社旗县| 务川| 山阴县| 亳州市| 泗阳县| 东山县| 星子县| 松溪县| 海伦市| 开鲁县| 沂水县| 孟州市| 淮北市| 峨山| 灵台县| 万安县| 迁安市| 南岸区| 庆安县| 荣昌县| 平湖市| 巴中市| 吉水县| 巴里| 青阳县| 西乡县| 安新县| 南川市| 达州市| 板桥市| 辉南县| 高邮市| 泗水县|