GEF学习系列之二:网格吸附与几何对齐

来源:互联网 发布:战姬天下武将成长数据 编辑:程序博客网 时间:2024/05/16 11:21

  

网格辅助

    网格是一般图形编辑系统中的常用辅 助功能,它可以帮我们定位画布上的图形元素,当被拖动的图元接近网格线时会自动吸附在网格线上,这样大大减少了图形编辑软件的易用性,在 GEF 中也提供了这样的功能。效 果如图所示:


    是否显示网格以及是否打开吸附功能是由 GraphicalViewer 的两个布尔类型的属性( property )值决定的,它们分别是 SnapToGrid.PROPERTY_GRID_VISIBLE SnapToGrid.PROPERTY_GRID_ENABLED ,这些属性是通过 GriaphicalViewer.getProperty() setProperty() 方法来操作的。 GEF 为我们提供了一个 ToggleGridAction 用来同时切换它们的值(保 持这两个值同步确实符合一般使用习惯),但没有像缩放功能那样提供对应的RetargetAction ,不知道 GEF 是出于什么考虑。另外因为这个 Action 没有预先设置的图标,所以 把它直接添加到工具条上会很不好看,所以要么把它只放在菜单中,要么为它设置一个图标,至于添加到菜单的方法这里不赘述了。

    要想在保存模型时同时记录当前网格线是否显示,必须在画布模型里增加一个布尔类型变量,并在打开模型和保存模型的方法中增加处理它的代码。

几何对齐

  这个功能也是为了方便用户 排列图形元素的,如果打开了此功能,当用户拖动的图形有某个边靠近另一图形的某个平行边延长线时,会自动吸附到这条延长线上;若两个图形的中心线(通过图形中心点的水平或垂直线)平行靠近时也会产生吸附效果。

   几何对齐也是通过 GraphicalViewer 的属性来控制是否打开的, 属性的名称是 SnapToGeometry.PROPERTY_SNAP_ENABLED ,值为布尔类型。在程序里 增加吸附对齐切换的功能和前面说的增加网格切换功能基本是一样的,记住 GEF 为它提供的 Action ToggleSnapToGeometryAction

   要实现对齐功能,还有一个重要的步骤,那就是在画布所对应的 EditPart getAdapter() 方法里增加对 SnapToHelper 类的回应,像下面这样:

 


 

 

原创粉丝点击