GEF中同時(shí)使用兩個(gè)Router

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

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

          評(píng)論

          # re: GEF中同時(shí)使用兩個(gè)Router 2008-08-12 20:37 Always BaNg.

          其實(shí)在Logic Example就有這個(gè)實(shí)例。

          參見 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);
          }

          }  回復(fù)  更多評(píng)論   

          # re: GEF中同時(shí)使用兩個(gè)Router 2008-08-13 17:24 yes1983

          @Always BaNg.
          不好意思,沒(méi)有完整的看過(guò)logic那個(gè)例子的源碼,這些都是平常做GEF項(xiàng)目的時(shí)候慢慢積累的一些經(jīng)驗(yàn),貽笑大方了,赫赫  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          eclipse

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 合川市| 西青区| 门头沟区| 博客| 陆良县| 康平县| 洞头县| 黄冈市| 宁德市| 山西省| 普洱| 大英县| 怀集县| 海林市| 安宁市| 邵武市| 越西县| 望城县| 黔东| 焦作市| 瓮安县| 红桥区| 慈溪市| 阳西县| 盐池县| 科技| 南靖县| 平舆县| 金堂县| 田东县| 华坪县| 手机| 秀山| 玛纳斯县| 万荣县| 河东区| 永胜县| 漳浦县| 铁岭县| 申扎县| 仙桃市|