文档章节

GMF 教程 Mindmap 3

双子座
 双子座
发布于 2013/03/15 19:56
字数 1051
阅读 640
收藏 0

Link Constraints

目前为止,工程运行一个Topic结点给自己连线,显然是没有意义的。接下来通过使用约束,避免这种现象。

1、打开mindmap.gmfmap,找到目前唯一的Link Mapping结点,右击,选择New Child > Link Constraints,然后右击这个Link Constraints,选择New Child > Source End Constraint,Language属性默认为ocl,设置Body属性为self <> oppositeEnd,如下图所示:

2、重新设成mindmap.gmfgen和diagram代码,运行一下,可以发现不可以给Topic结点自己连线了。

Another Connection

领域模型中的Relationship元素用来指明Topic元素之间若干可能的关系。接下来将要实现支持画出这个连线。这个例子将会更完全地说明GMF中的Link Mapping可用的属性。

Graphical Definition

3、打开mindmap.gmfgraph,右击Figure Gallery,选择New Child > Figure Descriptor,命名为DashedLineOpenArrow。然后右击新建的Figure Descriptor,选择New Child > Polyline Connection,将其命名为DashedLineOpenArrow,将Line Kind改成LINE_DASH。之后右击Figure Gallery,添加Polyline Decoration,命名为OpenArrow。默认的Decoration是一个打开的箭头,而Polygon Decoration是一个填充的三角形。最后将DashedLineOpenArrow的Target Decoration设置为OpenArrow:

4、现在定义好了图形,为Canvas创建一个Connection,命名为RelationshipLink,设置Figure属性为DashedLineOpenArrow:

5、我们希望subtopics结点的连线没有箭头,所以删除Figure Gallery中的TopicsSubtopicsTargetDecoration元素。

Tooling Definition

6、打开mindmap.gmftool文件,在Palette下创建一个Tool Group,命名为Links,并在这个Tool Group中添加一个Creation Tool,命名为Relationship,将TopicSubtopics工具拖到Links分组中,名重命名为Subtopic。最后将mindmap工具组的名称改为Nodes。将两个Tool Group的Collapsible属性都设置为true。

Mapping Definition

由于之前修改了Tool模型,需要在mapping definition中更新已存在的工具选择。可以右击mindmap.gmfmap,选择Validate,以检查出错的地方。

7、打开mindmap.gmfmap文件,创建一个Link Mapping,属性设置如下:

在上面的属性列表中,Domain meta information中的Element属性表示这个Link所代表的的领域中的元素。而在上一个Link中,这个属性是空的,这种情形下,Link的目标元素是由添加到源元素一列参照中的元素表示的。而在上面的属性设置中,Link在领域中是由它自己的类表示的,因此在Link映射中需要更多的信息。领域模型的Relationship类,是包含在Map元素的一列参照中。

8、此时,重新生成mindmap.gmfgen文件和diagram代码(可以借助GMF Dashboard),运行,效果如下图:

我们现在需要做的事,当创建Link的时候,为其初始化适当的类型。我们将会对每一个使用分别的工具,也可以选择使用清楚的可视化。现在,我们将简单的给Link添加标签,用来标示类型。

Feature Initializers

在我们graphical definition中,我们将为每一个类型创建一个图像和相应的连线,同样在tooling definition中也会为每个类型创建工具。

另一个初始化时设置Relationship的标签属性,这样便于区分类型。

Graphical Definition

9、打开mindmap.gmfgraphy,在Figure Gallery添加一个Figure Descriptor和一个Label,将它们都命名为DashedLineLabelFigure,然后右击Canvas,添加一个新的Diagram Label,命名为RelationshipLabel,并将Figure属性选择为DashedLineLabelFigure,并将Element Icon属性设置为false:

10、打开mindmap.gmftool文件,将Relationship工具重命名为Dependency(顺便把Description属性改了),然后使用复制粘贴添加两个工具Includes和Extends:

Mapping Definition

11、打开mindmap.gmfmap,将Relationship Link映射的工具改成Extends。

12、为这个Link Mapping添加Feature Seq Initializer和Constraint,添加相关内容,设置如下:

实际上,对一个领域模型创建多个映射的时候,都要添加Constraint。

13、最后为这个Link Mapping添加Feature Label Mapping:

14、然后复制粘贴这个Link Mapping两次,将相关属性改成dependency和includes。注意修改相应Link Mapping的Tool属性。

15、此时,若重新生成mindmap.gmfgen和diagram代码,运行效果如下图:

源码: http://www.oschina.net/code/snippet_164134_19253

双子座@开源中国:http://my.oschina.net/plumsoft

© 著作权归作者所有

上一篇: GMF 教程 Mindmap 4
下一篇: GMF 教程 Mindmap 2
双子座
粉丝 540
博文 78
码字总数 61009
作品 0
南京
程序员
私信 提问
文章里的问题,请帮忙解答下

@双子座 你好,想跟你请教个问题: 在 GMF 教程 Mindmap 1这篇文章里,在mindmap.gmfgen右击Generate diagram code时出现初始化类的错误 请问怎么解决,谢谢了...

操场和巷口
2013/12/31
9
1
GMF 教程 Mindmap 2

对Step1做补充操作,主要增加的功能: 为Topic结点添加划分(compartment),实现结点嵌套,使得可以在结点上半部显示结点名称,在下半部可以添加新的内容(这里是加入Thread子结点) Graphi...

双子座
2013/03/13
0
1
GMF 教程 Mindmap 5

这一部分主要实现的是: 使用扩展的Plug-in为我们的Diagram添加一个自定义动作 Creating a Customization Plug-in 尽管可以给生成的代码添加备注@generated NOT来避免下次重新生成代码时覆盖...

双子座
2013/03/17
0
0
MDSF:如何使用GMF来做TOGAF建模工具

在MDSF:架构工具简要功能说明中说到我要做一个支持TOGAF的架构工具,本篇介绍一下如何使用GMF来做一个简单的建模工具。 前提知识   如果你还不知道生成建模工具的基本过程以及基础知识,请...

技术小胖子
2017/11/14
0
0
思维导图软件--FreeMind

FreeMind是一套由Java撰写而成的实用的开源思维导图/心智(MindMap)软件,可用来帮助你整理思绪的工具软体,可将每一个环节用 图形表示,透过将思路图形化、结构化,帮助你对整个作业流程的了...

匿名
2008/09/17
82.9K
6

没有更多内容

加载失败,请刷新页面

加载更多

IT兄弟连 Java语法教程 流程控制语句 控制循环结构2

使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环;而break则是完全终止循环本身。如下...

老码农的一亩三分地
30分钟前
1
0
[java]str.replaceAll(" ", "")替换空格不行

str.replaceAll(" ", ""); //去掉所有空格,包括首尾、中间 不行? 全角半角空格 https://blog.csdn.net/qq_33210042/article/details/78087713 https://www.cnblogs.com/shuilangyizu/p/66......

Danni3
31分钟前
2
0
Python登录豆瓣并爬取影评

上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如...

猪哥66
46分钟前
1
0
常见排序的指针实现【C++ Code】

本来是想加上传cmp函数的,后来也懒得写了 然后基数排序虽然写的是模板类,但也只是支持整数了… #include <cstdio> #include <cstring> #include <algorithm> #include <typeinfo> using name......

shzwork
今天
3
0
OSChina 周一乱弹 —— 带这么多钱,你要泡我吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :白给?#今日歌曲推荐# 分享Lana Del Rey的单曲《Yayo》: 《Yayo》- Lana Del Rey 手机党少年们想听歌,请使劲儿戳(这里) @红薯...

小小编辑
今天
2K
18

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部