`
longgangbai
  • 浏览: 7330700 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

gef中几何对齐功能原理以及实现

阅读更多

 几何对齐功能也是为了方便用户排列图形元素的,如果打开了此功能,当用户拖动的图形有某个边靠近另一图形的某个平行边延长线时,会自动吸附到这条延长线上;若两个图形的中心线(通过图形中心点的水平或垂直线)平行靠近时也会产生吸附效果。例如下图中,Subject1的左边与 Subject2的右边是吸附在一起的,Subject3原本是与Subject2水平中心线吸附的,而用户在拖动的过程中它的上边吸附到 Subject1的底边。

 

     
                              
4 几何对齐

 

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

 

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

在编辑器类中:

设置各种编辑视图的信息:

   protectedvoid configureGraphicalViewer() {

      super.configureGraphicalViewer();

      getGraphicalViewer().setRootEditPart(new ScalableFreeformRootEditPart());

     getGraphicalViewer().setProperty(

SnapToGrid.PROPERTY_GRID_VISIBLE, false);

     getGraphicalViewer().setProperty(

SnapToGrid.PROPERTY_GRID_ENABLED, false);

      getGraphicalViewer().setProperty(

SnapToGeometry.PROPERTY_SNAP_ENABLED, true);      //getGraphicalViewer().setProperty(

SnapToGeometry.KEY_EAST_ANCHOR, true);

     //getGraphicalViewer().setProperty(

SnapToGeometry.KEY_NORTH_ANCHOR, true);

      //getGraphicalViewer().setProperty(

SnapToGeometry.KEY_SOUTH_ANCHOR, true);

      //getGraphicalViewer().setProperty(

SnapToGeometry.KEY_WEST_ANCHOR, true);

      // set the factory to use for creating EditParts

// for elements in the model

      getGraphicalViewer().setEditPartFactory(new PartFactory());

      getGraphicalViewer().setKeyHandler(new GraphicalViewerKeyHandler(getGraphicalViewer()).setParent(getCommonKeyHandler()));

   }

 

/**

    * 根据判断创建相关的适配器类对象

    */

   @SuppressWarnings("unchecked")

@Override

   public Object getAdapter(Class type){

      //大纲视图

       if (type == IContentOutlinePage.class)

      {

      returnnew OutlinePage();

      //几何对齐

      }elseif(type==SnapToHelper.class)

      {

      List snapStrategies=new ArrayList();

      

      Boolean val=(Boolean)getGraphicalViewer().getProperty(

RulerProvider.PROPERTY_RULER_VISIBILITY);

      if(val!=null&&val.booleanValue())

      {

        snapStrategies.add(new SnapToGuides((GraphicalEditPart)this));

      }       

 val=(Boolean)getGraphicalViewer().getProperty(

SnapToGeometry.PROPERTY_SNAP_ENABLED);

      if(val!=null&&val.booleanValue())

      {

    snapStrategies.add(new SnapToGeometry((GraphicalEditPart)this));

      }

      //网格辅助

val=(Boolean)getGraphicalViewer().getProperty(

SnapToGrid.PROPERTY_GRID_ENABLED);

      if(val!=null&&val.booleanValue())

      {

          snapStrategies.add(new SnapToGrid((GraphicalEditPart)this));

      }

      if(snapStrategies.size()==0)

        {

          returnnull;

        }

        if(snapStrategies.size()==1)

        {

          return (SnapToHelper)snapStrategies.get(0);

        }      

    SnapToHelper[] sth=new SnapToHelper[snapStrategies.size()];

    for (int i = 0; i < snapStrategies.size(); i++) {

           sth[i]=(SnapToHelper)snapStrategies.get(i);

       }

    returnnew CompoundSnapToHelper(sth);

      }

      returnsuper.getAdapter(type);

   }

分享到:
评论
2 楼 longgangbai 2011-11-29  
pkptzx 写道
你成功了?为什么我不成功呢?help me~

我当时确实实现了,但是现在好长时间没有使用gef了,基本忘记差不多了
1 楼 pkptzx 2011-11-18  
你成功了?为什么我不成功呢?help me~

相关推荐

    GEF实现拷贝粘贴

    实现拷贝粘贴功能在GEF中涉及到以下几个关键步骤: 1. **定义CopyCommand和PasteCommand**:你需要创建自定义的CopyCommand和PasteCommand类,继承自GEF提供的基础命令类,如DirectEditCommand或EditCommand。这些...

    GEF中属性页面的实现

    本文将深入探讨如何在GEF中实现属性视图,并通过一个处理器(Processor)模型的例子来阐述具体步骤。 1. **属性视图的概述** - 属性视图用于展示图形模型的相关属性,如处理器的温度、IP地址和类型等。 - 当图形...

    gef 转折线的相关方法实现和 GEF的API chm 格式

    在gef中,转折线的实现涉及到PathFigure和Segment类的使用。PathFigure用于定义一个图形的轮廓,而Segment则代表了轮廓中的一段线段。通过添加和调整Segment实例,我们可以构建出具有转折点的线条。 实现gef转折线...

    GEF中文教程+代码

    在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...

    GEF典型实现例子

    这两篇文章可能分别由CSDN博主和博客园博主分享了他们在使用GEF和相关技术,如Draw2D(用于在GEF中绘制2D图形的库)时的经验和技巧。 在深入理解GEF时,我们需要关注以下几个核心概念: 1. **模型-视图-控制器(MVC...

    RCP与GEF课件,介绍RCP和GEF各组成部分和工作原理

    通过RCP和GEF结合,开发者可以快速创建出功能强大的图形化应用程序,例如数据库建模工具、UML建模工具或者是软件工程中的配置管理工具。理解并掌握这两个框架的工作原理和组件,对于开发高质量的桌面应用至关重要。...

    GEF 入门版中文教程 源码

    4. **命令(Command)**:GEF中的命令模式用于封装对模型的修改操作,使得撤销/重做功能得以实现。命令对象记录了更改前后的状态,便于执行回滚或重复操作。 5. **图元(Figure)**和**绘图(Drawing)**:GEF通过SWT...

    GEF学习资料整理(含GEF项目搭建、简单示例、常用功能经典实现)

    在GEF中,模型负责存储数据,视图负责显示图形,控制器处理用户交互。具体来说,模型由自定义的Java类定义,视图由Part类及其子类实现,控制器则由Command类和EditPolicy类实现。 - **Command**:负责执行和撤销/...

    GEF原理的详细介绍+程序实例和程序源码

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。GEF提供了一套全面的API和模型,帮助开发者快速构建可定制的、交互式的图形用户界面。该框架的核心...

    eclipse gef原理的详细介绍PPT,很有参考价值

    **GEF(Graphical Editing Framework)深度解析** GEF,全称为Graphical Editing Framework,是Eclipse平台下用于构建图形编辑器的...通过深入理解GEF的原理和实践,开发者可以更高效地构建出功能丰富的图形编辑应用。

    GEF入门学习例子

    在GEF中,可以通过自定义小部件并集成到视图中来实现这一功能。 7. **文件名称列表**: `gef.tutorial.step2`可能代表了一个逐步教程的第二步,通常包含了一些示例代码和配置文件,用于演示上述概念的实现。 学习这...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    **插件开发** 在Eclipse中至关重要,因为它是实现功能扩展的主要方式。GEF插件开发涉及创建模型、视图和控制器(MVC)组件,其中模型定义数据结构,视图负责显示,而控制器处理用户的交互。开发者需要理解Eclipse...

    GEF锚点鼠标定位

    在GEF中,锚点的定位直接影响到连接线的形状和行为,特别是当用户通过鼠标进行交互时。"GEF锚点鼠标定位"这个主题主要探讨的是如何使锚点跟随鼠标移动,从而提供更加灵活和直观的用户操作体验。 1. **GEF框架基础**...

    基于GEF框架的SVG制作工具设计与实现

    ### 基于GEF框架的SVG制作工具设计与实现 #### 摘要与引言 本文聚焦于探讨一种新型SVG(可缩放矢量图形)制作工具的设计与实现,该工具基于Eclipse平台的GEF(Graphic Editor Framework)框架。SVG作为一种基于XML...

    GEF教程及demo源码GEF_RCP_DEMO.zip

    GEF中的Figure类负责图形绘制,通过重写paint()方法实现自定义图形的绘制,同时支持事件监听和交互。 5. **编辑操作与命令模式** GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户...

    GEF_Demo_Code20170307

    这个项目旨在演示如何利用GEF进行图形界面开发,并且特别关注了通过适配器(Adapter)扩展点来实现属性页配置以及在非Editor的ViewPart中使用GEF。 GEF是Eclipse平台下的一个开源库,专门用于构建可自定义的、图形...

    GEF快速入门教程和EMF教程

    - **Draw2D**: 版本3.1.0或以上,通常包含在GEF中 - **EMF**: 版本2.1.0或以上 ### 创建RCP项目 1. **初始化项目**: - 打开Eclipse并选择“File” &gt; “New” &gt; “Other” &gt; “Plug-in Project”。 - 为项目命名`...

    GEF入门实例代码2《Eclipse插件开发》中实例

    此外,理解MVC(模型-视图-控制器)模式和MVC在GEF中的应用对于提升开发效率至关重要。 总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的...

Global site tag (gtag.js) - Google Analytics