GEF总结

GEF初学者指南 1 必须具备知识:在学习GEF之前必须了解Eclipse这个平台的架构体系,所以先讲述Eclipse平台的架构体系.1.1 Eclipse架构体系:图表 1 1 eclipse架构体系正如上面所叙述: Eclipse Platform包括以下插件: 1. platform runtime: 注意这个插件是必须要的,启动eclipse需要他.2. workspace3. debug4. help5 阅读详情

    先介绍一下GEF要用到的设计模式.
   在学GEF中给我感受最深的是,设计模式无处不在,除了上章中说的观察者模式外.GEF框架还运用了COMMAND(命令)模式,Policy(策略)模式.这两个模式,策略模式,貌似本团对有人介绍过了,而command模式是我现研究的(也许会单独写个随笔,谈谈心得).
  好了,我们言归正传.先说一下,GEF控制器的实现原理.
控制器是由一组EditPart对象共同组成的,每一个模型对象都对应一个EditPart对象。应用程序中需要有一个EditPartFactory对象负责根据给定模型对象创建对应的EditPart对象,这个工厂类将在创建模型时被调用。
控制器是GEF中最复杂的一部分,GEF把控制器完成的工作又分成了几个部分,包括请求和编辑策略及引申出来的命令模式,如下图:


用户的编辑操作被转换为一系列请求(Request),Eclipse中有很多种类的请求,这些种类在GEF里被成为角色(Role)。在GEF里有图形 化和非图形化这两大类角色,前者如“LayoutRole”对应和布局有关的操作,后者如“ConnectionRole”对应和连接有关的操作等。角色 这个概念是通过编辑策略(EditPolicy)来实现的,EditPolicy的主要功能是根据请求创建相应的命令(Command),而后者会直接操 作模型对象。
对每一个EditPart,用户都可以“安装”一些EditPolicy。用户对这个EditPart的特定操作会被交给已安装的对应EditPolicy处理。这样做的直接好处是可以在不同EditPart之间共享一些重复操作。
   这样说有点抽象,还是用代码说话,接着上回那个DEMO来所,该是editpart部分了.

   对于模型的每个独立部分,我们都必须定义控制器。所谓“独立”,指的是这个实体 都可以作为用户操作的对象。一个比较好的原则就是任何可以被选择,或删除的对象 都应该有它自己的编辑部件(来自于IBM)。

        所有的部件均实现了createFigure()(返回模型在视图中的图形表示), createEditPolicies()(安装相应的策略),refreshVisuals() (刷新视图), propertyChange()(接受模型改变并执行不同的操作,刷新视图) ,activate()(自 己加入设为监听器) 和  deactivate()(将自己从监听器的列表中移除)五个方法。

 所以由上回的模型,我们就可以建立控制器了,首先我们将他也抽象化:
现建基类SpecificPart

package  hya.gef.demo.shapes.parts;

import  hya.gef.demo.shapes.models.ElementModel;

import  java.beans.PropertyChangeListener;

import  org.eclipse.gef.editparts.AbstractGraphicalEditPart;


/**
 * editpart基类
 * 主要为注册自己为模型改变的监听者
 * 
@author hya
 * 
*/

public   abstract   class  SpecificPart  extends  AbstractGraphicalEditPart 
implements  PropertyChangeListener  {
    
    
/**
     * 将自己注册为模型的属性修改事件的接收者
     
*/

    
public void activate() {
        
if (!isActive()) {
            
super.activate();
            ((ElementModel) getModel()).addPropertyChangeListener(
this);
        }

    }

    
    
/**
     * 将自己从监听器的列表中移除
     
*/

    
public void deactivate(){
        
super.deactivate();
        ((ElementModel)getModel()).removePropertyChangeListener(
this);
    }

    

}

 

然后是shape模型对应的part类
  
public   class  ShapeEditPart  extends  SpecificPart  implements  NodeEditPart  {

    
//连接锚点
    private ConnectionAnchor anchor;
    
    
/**
     *@Override 
     * 建立视图
     * 
*/

    
protected IFigure createFigure() {
        IFigure f 
= createFigureByGetModel();
        f.setOpaque(
true); // non-transparent figure
        f.setBackgroundColor(ColorConstants.red);
        
return f;
    }


    
/**根据得到的模型实例,画出不同的图形*/
    
private IFigure createFigureByGetModel() {
        
if (getModel() instanceof RadioModel) {
            
return new Ellipse();//圆形
        }
 else if (getModel() instanceof RectangularModel) {
            
return new RectangleFigure();//矩形
        }
 else if (getModel() instanceof TriangleModel) {
            
return new Triangle();//三角形
        }
 else {
            
            
throw new IllegalArgumentException();
        }

    }


     
/**安置策略*/
    
protected void createEditPolicies() {
        
//安装删除策略
        installEditPolicy(EditPolicy.COMPONENT_ROLE, new ShapeComponentEditPolicy());
        
//安装建立,更改连接策略
        installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new ShapeConnectionEditPolicy());
   }

    
    
/**
     *     @Override
     * 刷新视图
     * 
*/

    
protected void refreshVisuals() {
        Rectangle bounds 
= new Rectangle(((ShapeModel) getModel()).getLocation(),
                ((ShapeModel) getModel()).getSize());
        ((GraphicalEditPart) getParent()).setLayoutConstraint(
this, getFigure(), bounds);
    }


    
/**
     *接受修改事件,刷新视图 
     * 
*/

    
public void propertyChange(PropertyChangeEvent arg0) {
        String p 
= arg0.getPropertyName();
        
if (ShapeModel.SIZE_PROP.equals(p) || ShapeModel.LOCATION_PROP.equals(p)) {
            refreshVisuals();
        }
else if (ShapeModel.SOURCE_CONNECTIONS_PROP.equals(p)) {
            refreshSourceConnections();
        }
 else if (ShapeModel.TARGET_CONNECTIONS_PROP.equals(p)) {
            refreshTargetConnections();
        }
 

    }

    
    
//------------------------------------------------------------------------ 
    
//---
    
//连接设置
    
    
//得到相应图形的锚点
    protected ConnectionAnchor getConnectionAnchor() {
        
if (anchor == null) {
            
if (getModel() instanceof RadioModel)
                anchor 
= new EllipseAnchor(getFigure());
            
else if (getModel() instanceof RectangularModel)
                anchor 
= new ChopboxAnchor(getFigure());
            
else if(getModel()instanceof TriangleModel)
                anchor 
= new ChopboxAnchor(getFigure());    
            
else
                
throw new IllegalArgumentException("unexpected");
        }

        
return anchor;
    }


    
//得到以模型作为源的连接列表 
    protected List getModelSourceConnections() {
        
return  ((ShapeModel) getModel()).getSourceConnections();
    }


    
//得到以模型作为目标的连接列表
    protected List getModelTargetConnections() {
        
return ((ShapeModel) getModel()).getTargetConnections();
    }


    
//当需要画连接的时候,获取连接的源锚点
    public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection) {
        
return getConnectionAnchor();
    }

    
    
//准备创建连接的时候,通过Request来获取新连接的源锚点
    public ConnectionAnchor getSourceConnectionAnchor(Request request) {
        
return getConnectionAnchor();
    }

    
   
//获取连接的目标锚点
    public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection) {
        
return getConnectionAnchor();
    }


     
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
        
return getConnectionAnchor();
    }


    
}


   由于图形之间是可以连接的所以我们还同时让其实NodeEditPart接口。通过实现这个接口,编辑部件可以定义源锚点和目标锚点,锚点就是图形和连接接触的连接点 。重写了getModelSourceConnections方法和getModelTargetConnections方法。这两个方法的任务就是要通知GEF有关该图形的源连接和目标连接

       createFigure()方法,根据返回的对象不同,返回 不同的图形实例(矩形,三角形和圆形)。主要通过方法createFigureByGetModel()来判断。

       createEditPolicies()安装了两个策略,ShapeComponentEditPolicy提供命 令将一个 图形从图删除。第二个策略处理图形间连接的创建和转移,它的索引字是 GRAPHICAL_NODE_ROLE。

  其他的两个模型对应的part也差不多
DiagamEditPart

package  hya.gef.demo.shapes.parts;

import  hya.gef.demo.shapes.models.DiagramModel;
import  hya.gef.demo.shapes.parts.policy.ShapesXYEditPolicy;

import  java.beans.PropertyChangeEvent;
import  java.util.List;

import  org.eclipse.draw2d.ConnectionLayer;
import  org.eclipse.draw2d.Figure;
import  org.eclipse.draw2d.FreeformLayer;
import  org.eclipse.draw2d.FreeformLayout;
import  org.eclipse.draw2d.IFigure;
import  org.eclipse.draw2d.MarginBorder;
import  org.eclipse.draw2d.ShortestPathConnectionRouter;
import  org.eclipse.gef.EditPolicy;
import  org.eclipse.gef.LayerConstants;
import  org.eclipse.gef.editpolicies.RootComponentEditPolicy;


public   class  DiagamEditPart  extends  SpecificPart  {

    
/**
     *@Override 
     * 建立视图
     * 建立容器,设置布局管理器
     * 
*/

    
protected IFigure createFigure() {
        Figure f 
= new FreeformLayer();
        f.setBorder(
new MarginBorder(3));
        
//FreeformLayout布局管理器,这是一种XY型的布局管理器
        f.setLayoutManager(new FreeformLayout());

        
// Create the static router for the connection layer
    ConnectionLayer connLayer = (ConnectionLayer)getLayer(LayerConstants.CONNECTION_LAYER);
        connLayer.setConnectionRouter(
new ShortestPathConnectionRouter(f));
    
        
return f;
    }


    
    
/**
     * 得到子对象列表
     * 
*/

    
protected List getModelChildren() {
        
return ((DiagramModel) getModel()).getChildren(); // return a list of shapes
    }



    
protected void createEditPolicies() {
        
//阻止模型的根被删除,它重写了createDeleteCommand方法,并返回一个不能被执行的命令
        installEditPolicy(EditPolicy.COMPONENT_ROLE, new RootComponentEditPolicy());
        
//安装添加和更改元素策略
        installEditPolicy(EditPolicy.LAYOUT_ROLE,  new ShapesXYEditPolicy());

    }


    
/**模型改变时,刷新视图*/
    
public void propertyChange(PropertyChangeEvent arg0) {
        String p 
= arg0.getPropertyName();
        
if (DiagramModel.CHILD_ADDED_PROP.equals(p)
                
|| DiagramModel.CHILD_REMOVED_PROP.equals(p)) {
            refreshChildren();
        }


    }


}

ConnectionEditPart


package  hya.gef.demo.shapes.parts;

import  hya.gef.demo.shapes.commands.ConnectionDeleteCommand;
import  hya.gef.demo.shapes.models.Connection;


import  org.eclipse.draw2d.BendpointConnectionRouter;
import  org.eclipse.draw2d.IFigure;
import  org.eclipse.draw2d.PolygonDecoration;
import  org.eclipse.draw2d.PolylineConnection;
import  org.eclipse.gef.EditPolicy;
import  org.eclipse.gef.commands.Command;
import  org.eclipse.gef.editparts.AbstractConnectionEditPart;
import  org.eclipse.gef.editpolicies.ConnectionEditPolicy;
import  org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy;
import  org.eclipse.gef.requests.GroupRequest;

class  ConnectionEditPart  extends  AbstractConnectionEditPart   {



protected void createEditPolicies() {
    
//安装与连接有关的策略
    installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE,
            
new ConnectionEndpointEditPolicy());
    
    installEditPolicy(EditPolicy.CONNECTION_ROLE, 
new ConnectionEditPolicy() {
        
protected Command getDeleteCommand(GroupRequest request) {
            
return new ConnectionDeleteCommand(getCastedModel());
        }

    }
);
}



protected IFigure createFigure() {
    PolylineConnection conn 
= new PolylineConnection();
    conn.setTargetDecoration(
new PolygonDecoration());
    conn.setConnectionRouter(
new BendpointConnectionRouter());
    
return conn;
}




private Connection getCastedModel() {
    
return (Connection) getModel();
}



}

   连接编辑部件,它继承自AbstractConnectionEditPart类。createFigure()方法返回了一个带箭头的连接线。

      他安装了两个策略第一个是ConnectionComponentPolicy,它提供删除命令给Delete菜单项 所需要的action。第二个策略提供了一种视觉上的选择反馈,即当一个连接被拖动时,GEF 没有办法获取连接两端的标识.
      那么GEF是怎么知道模型与PART之间的对应关系的呢,所以应该建立模型与part之间的映射,这个我们用到了工厂模式
建立part工厂:ShapesEditPartFactory

 


package  hya.gef.demo.shapes.parts;

import  hya.gef.demo.shapes.models.Connection;
import  hya.gef.demo.shapes.models.DiagramModel;
import  hya.gef.demo.shapes.models.ShapeModel;

import  org.eclipse.gef.EditPart;
import  org.eclipse.gef.EditPartFactory;



/**
 * 控制器工厂
 * 
@author hya
 * 
*/

public   class  ShapesEditPartFactory  implements  EditPartFactory  {


public EditPart createEditPart(EditPart context, Object modelElement) {
    EditPart part 
= getPartForElement(modelElement);
part.setModel(modelElement);
    
return part;
}


/**建立模型与EditPart的映射*/
private EditPart getPartForElement(Object modelElement) {
    
if (modelElement instanceof DiagramModel) {
        
return new DiagamEditPart();
    }

    
if (modelElement instanceof ShapeModel) {
        
return new ShapeEditPart();
    }

if (modelElement instanceof Connection) {
        
return new ConnectionEditPart();
    }

    
throw new RuntimeException(
            
"Can't create part for model element: "
            
+ ((modelElement != null) ? modelElement.getClass().getName() : "null"));
}


}

    这是,核心的part就建立完了.我们可以看到他们当中的方几乎一样,狭义回我们将加入策略和命令部分,并更加详细的通过代码来说明GEF的工作过程.

 

http://www.cnblogs.com/hya1109/archive/2008/07/13/1242033.htmlhttp://www.cnblogs.com/hya1109/archive/2008/07/13/1242033.html

基于Claude的智能任务编排引擎:从对话到执行的AI范式跃迁 任务编排与自动化是提升开发与运维效率的核心技术,其本质是通过预定义或动态生成的逻辑序列,协调多个独立操作以完成复杂目标。传统脚本与工作流引擎虽能实现自动化,但缺乏对模糊自然语言指令的理解与动态规划能力。随着大语言模型(LLM)如Claude、GPT-4的发展,AI驱动的智能任务编排成为可能,其技术价值在于将LLM从被动的内容生成器转变为能主动规划、分解并执行多步骤任务的“智能代理”。这结合了AI的自然语言理解与代码执行、API调用等工具操作能力,实现了从“对话”到“执行”的范式转变。在应用场景上,它极大地拓 阅读详情

相关推荐

GEF中文教程

很好的GEF开发学习文档

【原创】GEF的命令及其它实现(二十五)

  GEF是一个完善的图形编辑框架,它提供了图形编辑的解决方案,用户可以通过它的机制构造出功能非常强大的图形编辑器,但GEF还是比较复杂的框架,在提供了图形编辑的各个环节松耦合的灵活性之时,也带来了用户必须了解各环节实现的学习时...

congqiongtang9427的博客 432

GEF最好的学习文档,入门必读(GEF-whole-upload.pdf)

GEF最好的学习文档,入门必读(GEF-whole-upload.pdf),八进制写的文章不错,但我觉得不是很系统,我觉得这个PDF总结的不错,从一个简单RCP程序开始不断的迭代,特比适合有一定RCP基础的人学习GEF

Draw2D 教程(五)

5、理解Connection    在前面的代码里,我们不止一次地看到了FixedAnchor这个类,它继承了AbstractConnectionAnchor,使得你可  以可以给两个Figure之间添加连线。由于Connection创建组件之间的联系,所以它们在系统模型和图表中担任重要  角色。管理Connection以及它们的ConnectionAnchor比较复杂,因此理解它们的机制是非常重

io 4337

GEF学习总结

GEF 全称 Graphical Editor Framework 。它是一个基于 eclipse 的图形化编辑框架。通过它,开发人员可以方便的以图形化的方式(而非文本的方式)展示和编辑模型。

Eclipse的GEF学习

Eclipse插件GEF的介绍,对于学习GEF有很大帮助

在SWT窗口中使用Draw2D绘制任意曲线

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34235135的博客 437

gef入门学习项目源码

这个资源的内容是GEF教程.pdf中项目的源码 以git库的形式展示各个部分的内容 也是本人学习过程的记录 希望可以帮助想要学习GEF技术的人

GEF 命令模式介绍

命令模式的结构如图: 在我们流程设计器中,实现复制粘贴功能,就是采用了命令模式,以剪切操作为例,当在编辑器中选中活动,在菜单中选择“剪切”,就会产生一个剪切命令(CutCommand对象)。 剪切操作所用到的类如下: 名称 说明 org.eclipse.gef.commands.Command 命令的抽象类 org.eclipse....

qq123zhz的专栏 259

linux redis7 完整的集群搭建过程

一。安装: 1.1 说明: Redis官方只提供了源码,并没有提供经过编译之后的安装包。 因此,安装Redis,要先编译、后安装。(即源码安装方式) 注意:需要联网安装 1.2 安装编译的工具: yum install gcc gcc-c++ -y 1.3 下载tar包,上传到linux服务器,解压配置环境变量 1.4 cd +解压的目录下:编译 make 注意:如果编译失败,请重新进行解压编译,...

m0_38028438的博客 719

PDN设计

作者:AirCity 2020.2.6 Aircity007@sina.com 本文所有权归作者Aircity所有 PDN设计的目的是降低电源纹波水平,减小电压跌落。我们通常要求LDO的文波水平是30mV,DCDC是50mV,超过这个就需要PDN设计。 PDN设计的方法是用不同的容值,合适的总电容量,降低电源平面与地平面之间的交流阻抗,确定容值总量和电容大小的过程,就是PDN设计过程。 为什么需...

AirCity123的博客 4148

GEF入门系列(二、GEF概述)

在前面的帖子已经提到,GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很多,例如:UML类图编辑器、图形化XML编辑器、界面设计工具以及图形化数据库结构设计工具等等。归结一下,可以发现它们在图形化编辑方面具有以下共同之处:提供一个编辑区域和一个工具条,用户在工具条里选择需要的工具,以拖

鲨鱼的专栏 2889

EndNoteX9完整详细安装教程

EndNoteX9完整详细安装教程

rothschild666的博客 10万+

[GEF循序渐进系列之三]Hello world with GEF

本文最初发表于http://eclipse.kuwww.net 原文引用http://my.kuwww.net/eclipse/blogview.asp?logID=5&cateID=4作者:齐好宗    hzqi@isoftstone.com下面我们要做一个最简单的GEF应用程序。在大部分经典的语言教程中,总是已HelloWorld命名第一个小程序,这里我们也以HelloWorld开始。我们所应

齐好宗(cycloneQI)的专栏 4048

MCU工程迁移实战:从STM32到MSPM0L1306的完整指南

在嵌入式系统开发中,MCU工程迁移是开发者常面临的核心挑战,涉及从旧平台向新芯片的完整适配。其原理在于不同MCU在硬件架构、外设寄存器映射、时钟树及开发工具链上存在差异,迁移的本质是将应用逻辑与底层硬件实现解耦。这一过程的技术价值在于提升代码复用性、降低硬件切换成本,并确保产品能快速响应供应链或技术栈变化。典型应用场景包括产品升级换代、芯片缺货替代以及技术生态统一。本文以TI MSPM0L1306为例,详解如何通过对比清单分析、DriverLib API替换及分步调试,高效完成从STM32等平台到Arm C

weixin_27625589的博客 330

CANOE仿真someip报文配置说明

利用canoe测试车辆控制器someip报文收发的步骤

AUTOSAR架构汽车软件开发 1万+

GEF原理及实现系列(一、GEF概述)

GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。 本系列介绍GEF中的几个基本概念,包括如下部分: 1、GEF概述 2、模型(Model) 3、视图(View) 4、控制器(Control) 5、请求和编辑策略(Request and EditPolicies) 6、命令(commands

理工科的杜小甫的博客 4823

Unreal5从入门到精通之如何实现移动端触屏滑动手势

随着移动设备的普及,越来越多的游戏和应用选择在移动平台上发布。Unreal Engine 5(UE5)作为一款强大的游戏引擎,提供了丰富的工具和功能,帮助开发者打造出色的移动体验。UE5不仅提升了图形质量,还大幅简化了开发流程,使得开发者能够更专注于游戏设计和用户体验。在移动游戏中,触屏滑动手势是用户与应用互动的主要方式之一。然而,许多开发者在实现这些功能时常常遇到困难。为了填补这一知识空白,本篇文章将详细介绍如何在UE5中实现移动端触屏滑动手势,帮助你从入门到精通,提升你的开发技能。

TxNet 1138

java gef_GEF简介

GEF(Graphical Editing Framework )是Eclipse旗下的强有力的Tool Project,利用GEF可以轻松实现类似于Visual Editor的可视化图形编辑应用程序。我将以如何构建一个数据库编辑工具为力,介绍一下GEF。1.什么是GEF。EditPartViewer上面已经说过了,GEF是Eclipse旗下的Tool Project,为开发者提供了一个图形编辑开...

weixin_32751907的博客 549

【爬虫实战】Instagram博主图片爬取:模拟登录+滚动加载,轻松抓取高清美图

在当今社交媒体时代,Instagram作为全球最受欢迎的图片分享平台之一,汇聚了无数优质博主的海量精美图片。对于数据爱好者、营销分析师、AI训练数据收集者来说,如何高效、稳定地爬取Instagram博主的图片,成为了一项极具实用价值的技术挑战。然而,Instagram的反爬机制日益严格,传统的静态页面请求已经无法满足需求。本文将带你从零开始,使用2024-2025年最新技术栈,实现模拟登录、滚动加载、高清图片下载的全流程爬虫。✅ 全流程代码可直接运行✅ 模拟手机端请求绕过反爬。

2201_76125261的博客 598

爬取Unsplash高清壁纸:Python爬虫实战教程(最新技术)

在当今数字化时代,高清壁纸已经成为人们个性化设备的重要元素。Unsplash作为全球最知名的免费高质量图片网站,汇集了数百万张由全球摄影师贡献的高清图片。然而,Unsplash官网的下载方式需要手动操作,对于需要批量下载壁纸的用户来说效率较低。本文将带你深入探索如何使用Python爬虫技术高效爬取Unsplash高清壁纸,从基础到进阶,全面掌握图片爬取的核心技术。Unsplash成立于2013年,是一个完全免费的图片分享平台。高质量内容:所有图片均由专业摄影师上传,分辨率普遍达到4K以上免费商用。

2201_76125261的博客 937

[GEF循序渐进系列之二]GEF概述

     本文最初发表与http://eclipse.kuwww.net 原文连接:http://my.kuwww.net/eclipse/blogview.asp?logID=4      ---作者:齐好宗   hzqi@isoftstone.com     GEF的优势是提供了标准的MVC(Model-View-Control)结构,开发人员可以利用GEF来完成以上这些功能,而不需要自己重新

齐好宗(cycloneQI)的专栏 2908

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

GEF 外部组件到GEF编辑器的拖动支持

最近在项目中,需要完成从资源管理器(navigator)向GEF编辑器中拖放结点的功能。 现总结个人体会如下(具体的实现流程,请参考http://www.eclipse.org/articles/Article-GEF-dnd/GEF-dnd.html): GEF封装了底层的SWT拖放。无需自己定义DragSource和DropTarget。 GEF的拖拽功能需要 (1).一个可以注册在G

Hello Eclipse Plugin 黑夜 2640

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

palette gef_GEF走向3D

在模型驱动的开发领域,模型扮演着重要角色。 通常,模型是通过二维图可视化的,UML图可能是最突出的示例。 但是,在某些情况下,二维根本不够。 有时,模型需要三维表示,或者应同时显示多个二维图。 后一种情况可以可视化所谓的图间关系,即不同图的元素之间的连接。 GEF3D [2]框架允许以非常简单的方式创建三维图编辑器。 GEF3D已在作者的博士学位中作为一种工具启动。 项目,并且在2008年...

439

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

GEF初步

  l  概念GEF是eclipse的图形编辑框架,利用此框架可以实现非常强大的图形化编辑功能。l  MVC模式MVC模式是"Model-View-Controller"的缩写,中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或

venlence的专栏 708

GEF 一篇不错的文章

1.Draw2D技术 轻量级框架:轻量级框架[LightweightSystem类]把SWT和Draw2D 连接起来,它把鼠标事件和画图事件从SWT 转发给Draw2D的图形上。它是Draw2D的核心类。 LightweightSystem 主要包含三个组成部件: 1.根图形[The root figure]: 根图形是RootFigure类的实例,应用程序的根图形必须建立在它之上。它继承了

Hello Eclipse Plugin 黑夜 3275
上一篇: 理解 Draw2d Connection
下一篇: java 写文件
ssusriqpl_java
博客等级 码龄16年 39粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值