BaNg@taobao

          Just Do It!

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            20 Posts :: -1 Stories :: 202 Comments :: 0 Trackbacks
          GEF由于偏向的是以圖形表達模型,所以圖形表達能力一直都沒有java2d強,rotation新聞組從2004年就有人陸續不斷的提,但是3.5好像 也沒有列入,不過社區的力量就是強大,有人了contribute一段支持旋轉的代碼。我拿到代碼之后做了一個例子,由于它的transform不是 draw2d提供的平臺相關性transform(如java2d所做的調用windows system api 驅動硬件),所以rotation的效果不是很好,線條有些模糊。



          安裝:

          打開 https://bugs.eclipse.org/bugs/show_bug.cgi?id=117012,將附件下載下來,解壓縮放到插件目錄 (plugins或者dropins)。由于這是兩個fragements,不能直接加到plugin的dependencies,參見 http://bongyee.blogspot.com/2009/02/plug-in-dependencies-depend-on.html提 供的解決辦法。

          更新代碼支持旋轉

          在GEF中任何特征基本都會在MVC即model, editpart, figure三個層面做改動,rotation也不例外。

          1 在model object上加一個屬性int rotation_angle記錄當前旋轉角度,添加get/set方法,且在set方法中觸發一個event給對應的editpart。

          2 在editpart的createFigure方法中返回一個RotatableRectangleFigure。

          3 稍微有點麻煩的就是修改Editpart了。在diagram editpart中安裝繼承了xylayouteditpolicy的editpolicy都會給child editpart默認安裝一個resizableeditpolicy,這樣選中一個editpart是就會在figure上出現八個handle,用來 move和resize。如果要支持rotation,覆蓋默認的resiableeditpolicy為 RotatableResizableEditPolicy(捐獻提供),覆蓋方式為:

          public class XXDiagramEditPart
          {

          protected void createEditPolicies() {
          .
          installEditPolicy(EditPolicy.LAYOUT_ROLE, 
          new QQQXYLayoutEditPolicy());

           }

          }

          public class QQQXYLayoutEditPolicy
          {

          protected EditPolicy createChildEditPolicy(EditPart child) {
          if (child is RotatableChildEditPart)
          {
          return new RotatableResizableEditPolicy(true){
           旋轉命令
          protected Command getRotateCommand(
          RotatableChangeBoundsRequest request) {
          return new RotateCommand(getHost().getModel(), request.getAngleDelta());
          }

          }
          }
          }

          }

          RotateCommand非常簡單,execute的時候設置模型的角度 += angleDelta,undo的時候 -= angleDelta。

          4 響應模型觸發的rotation事件,更新figure。

          public class MyRotatableEditPart //register as listener for model changing.
          {

          public void propertyChange(PropertyChangeEvent evt) {
          if (evt is Rotation Event)
          {
          //更新figure
          ((RotatableRectangleFigure)getFigure()).setAngle(getModel().getRotationAngle());
          }
          }


          歡迎大家來信msn多多交流
          posted on 2009-02-20 11:04 Always BaNg. 閱讀(2569) 評論(4)  編輯  收藏 所屬分類: JavaEclipse

          Feedback

          # re: GEF社區捐獻的一個圖形旋轉(Rotation)的例子 2009-02-20 13:33 jeasonzhao
          貌似不錯的樣子,關注一下了  回復  更多評論
            

          # re: GEF社區捐獻的一個圖形旋轉(Rotation)的例子 2009-07-15 22:23 madapple
          你好。我最近也在做gef方方面的東西,碰到了和你一樣旋轉的需求,很興奮看到了你帖子。能不能發一份示例代碼給我呢?謝謝  回復  更多評論
            

          # re: GEF社區捐獻的一個圖形旋轉(Rotation)的例子 2013-11-28 16:59 hustgaobo
          樓主 https://bugs.eclipse.org/bugs/show_bug.cgi?id=117012鏈接為何錯誤?能否賜教旋轉問題  回復  更多評論
            

          # re: GEF社區捐獻的一個圖形旋轉(Rotation)的例子 2013-11-29 20:56 hustgaobo
          @madapple你好,你的gef旋轉問題有了解決方法嗎?我正在做這個,能否賜教
            回復  更多評論
            

          主站蜘蛛池模板: 铁岭市| 上高县| 商丘市| 海晏县| 贺兰县| 德阳市| 四平市| 车致| 古丈县| 辽宁省| 绥棱县| 温泉县| 绥化市| 宝应县| 通山县| 伊川县| 恩施市| 莒南县| 淅川县| 灵川县| 华安县| 黑河市| 巴青县| 淮阳县| 临江市| 河东区| 纳雍县| 阳谷县| 收藏| 云南省| 东城区| 台山市| 安庆市| 叶城县| 吉林市| 孟津县| 道孚县| 和田市| 孟村| 颍上县| 双牌县|