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

原创
2011/08/24 14:34
阅读数 1.8K

接触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

展开阅读全文
打赏
0
5 收藏
分享
加载中

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

引用来自“lap_218”的评论

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

这样的问题我也回答不了。
原来是上一步的shapes.ecore_diagram的图形模型没有画、、
2015/12/23 13:10
回复
举报

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

引用来自“lap_218”的评论

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

这样的问题我也回答不了。
你好,我也遇到这样的问题,你是怎么解决的呢?
2015/12/22 13:14
回复
举报
双子座博主

引用来自“lap_218”的评论

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

这样的问题我也回答不了。
2013/11/21 21:30
回复
举报
请问在第4步的第(2)小步,生成genmodel后,shapes的properties不能修改是怎么回事?鼠标点那些属性没反应
2013/11/21 10:48
回复
举报

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

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

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

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

好的 谢谢咯
2012/06/04 16:02
回复
举报
双子座博主

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

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

很久没接触了,推荐你一本书吧,Eclipse Modeling Project A Domain-Specific Language (DSL) Toolkit,会有帮助
2012/06/04 11:03
回复
举报
楼主 牛啊。。刚开始学GMF 资料都很少,,能不能留个联系方式qq之类的 向您学习学习啊。。膜拜啊
2012/06/04 10:29
回复
举报
谦虚了吧!有qq没我加你。
2012/05/17 09:16
回复
举报
双子座博主

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

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

都不咋地,都是打酱油的~
2012/05/16 19:42
回复
举报
刚突然发现您博客写的东东挺多,您最牛逼的时那个方面呢?
2012/05/16 18:31
回复
举报
更多评论
打赏
13 评论
5 收藏
0
分享
返回顶部
顶部