文档章节

GMF之Shapes实例Part1:创建一个GMF项目

双子座
 双子座
发布于 2011/08/24 14:34
字数 1447
阅读 1416
收藏 5

接触GEF与GMF有一段时间了,感觉它们的功能还是很强大的,只是我学的比较慢。也许每个人的学习方法不一样,我比较习惯做简单的例子。今天下午也不干活了,写几篇关于GMF入门的博客。以后有时间会在该系列的前一篇博客的基础上更新。

GEF与GMF比较经典的例子是Shapes,在这里我自己创建一个Shapes示例,其中包含6种连线(其中两条是后备用的)、5种图形(也有两个是后备的),以后都是在它的基础上更新的。

PS:我的Eclipse已经安装了GMF插件。

1、创建一个GMF项目:

File→New→Project,找到New GMF Project,

项目名为org.eclipse.myTest.shapes,并在下一步选中Show dashboard view for the created project :

   

最后在下一步单击Finish。

2、此时Eclipse打开了Dashboard,如下图,它是一个创建GMF的向导,在图中已经用数字标记了我们接下来的步骤:

3、创建Domain Model

(1)点击Dashboard图中1处的Create,打开向导,选择模型目录文件以及输入名称,如下图:

接下来的都保持默认,完成创建。

在Package Explorer中双击打开shapes.ecore,展开platfform,选中展开得到的那个图标,在Properties中设置其属性:

(2)在Package Explorer中右击shapes.ecore,选择Initialize ecore_diagram diagram file,建立ecore图形编辑文件shapes.ecore_diagram,它可以用来比较直观的建立模型。创建好的模型如下:

其中连线和图形各有两个备用的,也许以后会用到,如果到时候才添加的话可能就会比较麻烦。

4、创建Domain Gen Model

(1)确保Dashboard图中1处选中了我们刚刚创建的shapes.ecore,如果没有,点击Select,找到它。

之后,单击Dashboard图中2处,打开建立shapes.genmodel的向导,在Select a Model Importer中选择Ecore Model:

在下一步点击一下Load按钮:

接下来都保持默认。

(2)在打开的shapes.genmodel展开Shapes,选中该节点内的Shapes节点,在Properties修改其部分属性,如下图:

之后再右击该节点,选择Generate Model Code、Generate Edit Code以及Generate Editor Code,这样就生成了一部分代码:

并新创建了两个工程:org.eclipse.myTest.shapes.edit与org.eclipse.myTest.shapes.editor。

5、创建Graphical Def Model

这个model用来定义在画板中显示的图形。

还是要先确保Dashboard选中了我们创建的shapes.ecore,如果没有,需要进行选择。

(1)单击Dashboard图中的3按钮,打开创建shapes.gmfgraph的向导。在Diagram Element中选择BasePanel:

在下一步定义图形节点、线以及标签显示。其中AbstractShape、AbstractConnection与BasePanel都不选,各种Shape以及Connection选取样例如下:

 

然后单击完成。

(2)接下来要设置图像和连线,比较繁琐。

(2.1)先配置Shape,以EllipseShape为例。

EllipseShape表示我们想创建一个椭圆,不过默认是矩形。使用Sample方式打开shapes.gmfgraph,找到Ellipse子节点:

并删除它,右击Figure Descriptior EllipseShapeFigure,Add Child——Ellipse,设置其名称为EllipseShapeFigure,然后仿照RectangleShapeFigure结点为其添加Flow Layout和Label,Label名称为EllipseShapeNameFigure:

然后选择Child Access getFigureNull标签,设置如下:

以类似的方法配置RoundRectangleShapeFigure。

(2.2)配置Connection,以ArrowDashedConnection为例,它是一个带有箭头的虚连线。

找到ArrowDashedConnection结点:

右击,选择Add Child——Polyline Decoration,名称为ArrowDashedDecoration。

再选择Figure Descriptor ArrowDashedConnectionFigure结点,在属性视图中将Target Decoration设置为ArrowDashedDecoration,并将Line Kind设成LINE_DASH:

以相同的方法配置ArrowSolidConnection以及DashedConnection。

(2.3)将所有Shape与Connection标签的默认Text设成空:

将所有标签的Elment Icon设置成False:

然后设置:

 6、创建Tooling Def Model

(1)单击Dashboard图中的4按钮,打开创建shapes.gmftool的向导,在下一步的Diagram Element选BasePanel:

在下一步确定想要为哪些元素创建工具,以及是图形工具还是连线工具。还是AbstractShape、AbstractConnection与BasePanel都不选,各种Shape与Connection选择如下:

   

点击Finish完成创建。

(2)设置工具分组

右击以下节点

选择Add Child——Tool Group,设置其Title为Connections,将原来分组中的所有Connection选项拖到这一组;

原来的分组设置Title为Shapes;

两个分组的Collapsible选项都设为True。

7、创建Mapping Model

(1)点击Dashboard图中的5按钮,打开新建shapes.gmfmap的向导,在下一步的Class选择BasePanel,之后一直到下图所示的这一步:

按照上图设置,之后点击Finish。

(2)接下来要设置映射了

(2.1)Shapes中以EllipseShape为例,选中以下结点:

在属性视图做如下配置:

红线标记处是需要注意的地方,由于这个工具是创建EllipseShape的,所以各个选项都是与Ellipse相关的。

再选中以下标签:

在属性视图设置:

(2.2)Connections的映射设置以ArrowSolidConnection为例:

选择节点:

在属性视图设置如下:

为它添加Label,右击上面的节点,Add Child——Feature Label Mapping,然后其属性设置如下:

(2.3)其他Shape和Connection设置类似。

8、点击Dashboard图中6处的Transform按钮,注意不要选中RCP。

这样会生成两个文件

9、单击Dashboard图中的7处按钮:Generate Diagram Editor,这样又创建了一个工程org.eclipse.myTest.shapes.diagram。

如果整个过程中都没有出错的话,可以直接以Eclipse Application的方式运行,在打开的窗口新建一个Project:Shapes,在该Project下新建一个Shapes Diagram,默认是default.shapes_diagram,效果如下图:

这篇文章写得真不容易,边做边写的,写了三个多小时,总算完成了!

程序代码请见我的代码分享http://www.oschina.net/code/snippet_164134_5913

© 著作权归作者所有

双子座
粉丝 540
博文 78
码字总数 61009
作品 0
南京
程序员
私信 提问
加载中

评论(13)

cassielgirl
cassielgirl

引用来自“双子座”的评论

引用来自“lap_218”的评论

请问在第4步的第(2)小步,生成genmodel后,shapes的properties不能修改是怎么回事?鼠标点那些属性没反应

这样的问题我也回答不了。
原来是上一步的shapes.ecore_diagram的图形模型没有画、、
cassielgirl
cassielgirl

引用来自“双子座”的评论

引用来自“lap_218”的评论

请问在第4步的第(2)小步,生成genmodel后,shapes的properties不能修改是怎么回事?鼠标点那些属性没反应

这样的问题我也回答不了。
你好,我也遇到这样的问题,你是怎么解决的呢?
双子座
双子座 博主

引用来自“lap_218”的评论

请问在第4步的第(2)小步,生成genmodel后,shapes的properties不能修改是怎么回事?鼠标点那些属性没反应

这样的问题我也回答不了。
l
lap_218
请问在第4步的第(2)小步,生成genmodel后,shapes的properties不能修改是怎么回事?鼠标点那些属性没反应
此情可待

引用来自“双子座”的评论

引用来自“此情可待”的评论

楼主 牛啊。。刚开始学GMF 资料都很少,,能不能留个联系方式qq之类的 向您学习学习啊。。膜拜啊

很久没接触了,推荐你一本书吧,Eclipse Modeling Project A Domain-Specific Language (DSL) Toolkit,会有帮助

好的 谢谢咯
双子座
双子座 博主

引用来自“此情可待”的评论

楼主 牛啊。。刚开始学GMF 资料都很少,,能不能留个联系方式qq之类的 向您学习学习啊。。膜拜啊

很久没接触了,推荐你一本书吧,Eclipse Modeling Project A Domain-Specific Language (DSL) Toolkit,会有帮助
此情可待
楼主 牛啊。。刚开始学GMF 资料都很少,,能不能留个联系方式qq之类的 向您学习学习啊。。膜拜啊
最爱家乡水
最爱家乡水
谦虚了吧!有qq没我加你。
双子座
双子座 博主

引用来自“最爱家乡水”的评论

刚突然发现您博客写的东东挺多,您最牛逼的时那个方面呢?

都不咋地,都是打酱油的~
最爱家乡水
最爱家乡水
刚突然发现您博客写的东东挺多,您最牛逼的时那个方面呢?
GMF中设置Base Package

你好,我想问你一个问题,你写的GMF之Shapes实例Part6,这个部分里面有: 2. 保存shapes.ecore_diagram,删除shapes.genmodel,重新创建一个shapes.genmodel,类似GMF之Shapes实例Part1中,别...

lovewbo
2012/03/27
142
2
GMF之Shapes实例Part6:给结点添加图片并实现保存

之前给结点设置图片都不能保存,下次打开后还是原来的图片。接下来就是实现永久保存,其实就是给Shape结点所对应的模型元素添加一个属性ID,这个ID的值在创建模型时确定,并且,我们选择图片...

双子座
2011/10/06
505
0
[GMF问题]界面上图形的结构关系

@双子座 你好,想跟你请教个问题: 我参照了你GMF系列教程的例子,做了一个shapes项目。 我的是问题是: 当我在界面上画了一个拓扑图, 我通过什么方法,找到该图形的数据结构呢? (nodes的...

黄赛杰
2012/11/14
276
1
GMF里实现editpolicyProviders扩展点

通过org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders扩展点可以给GMF应用里的editpart增加所需要的editpolicy,通过editpolicy返回的command,就可以自由的控制editpart的行为。顺便...

青夜之衫
2017/12/07
0
0
如何将GMF在RCP运行的界面中显示出来

各位朋友: 有一个GMF项目,我想新建一个RCP,在运行RCP后,可以把GMF关联进去,相当与将一个GMF项目放到一个空的RCP中,GMF本身可以运行,而RCP运行时,GMF在RCP运行的界面中被显示出来。 ...

lovewbo
2012/04/10
327
2

没有更多内容

加载失败,请刷新页面

加载更多

JS--function

一、声明提前(hoist) 在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地 二、三种创建函数的方式 1、声明方式创建函数-...

wytao1995
今天
4
0
微服务之间调用控制器注解类型的差异

今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题: 1. 提示http请求头过大的问题; 此时需要修改bootstrap.yml,加入 server: max-http-header-size: 10000000 用以放大...

不再熬夜
今天
7
0
用 4G 工作是什么体验

七月开始,因为工作原因,在公司附近租了个住处,方便工作。离公司近了,感觉就是不一样,之前每天 5:30 就要起床赶地铁,现在可以睡到自然醒,一看才 7 点,悠闲的起床洗漱,踱步到公司,都...

zzxworld
今天
6
0
sonar报错volatile

问题发生 原先代码如下: //认证授权码private static volatile String AUTHORIZATION_CODE = "init"; git push 之后,sonar认为这是个bug检测报告截图如下: 分析排查 解释说明: Markin...

开源小菜鸟2333
今天
5
0
《Java实践指南》--读后

闲读《Java实践指南》... 1.lvy 某些项目中能够看到ivy.xml。早期使用ant的项目中,常常用ivy.xml来下载项目依赖。 2.ant 作为java程序员,应该都知道ant,虽然可能用过的人不多。为什么ant...

RippleChan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部