首先要有ecore模型支持才可以,在你的ecore里给整幅图的根节点添加一个自身连接,命名为children。然后就可以在这上面做点文章了。
我的ecore模型图如下
然后在gmfgraph文件里定义图形的形状,gmfgraph文件只与图形的在界面的展示形状有关,我定义的图形比较简单就是一个矩形里面是文字。如图所示:
然后要在你的gmftool文件里定义需要的工具,这个比较简单就不多说了。在gmfmap文件里定义映射关系,gmfmap将你的ecore模型、图形和工具联系起来。具体的如图所示:mapping节点下建立新的Top Node Reference节点指定containmentFigure值,该值一般是指ecore模型中和Node节点有包含关系的节点。然后在该节点下建立子节点NodeMapping指定具体的ecore模型图形和工具,最关键的一步是设置杂项==>Related Diagrams点击右边的选择框把唯一的一个值添加进去即可。如图:
最后要修改的地方是gmfgen文件,打开这个文件你会看到geneditor根节点然后再到gen Diagram子节点打开它然后找到你刚才定义mapping时定义的那个以ecore模型类名+EditPart命名的节点(一般这个名字会以2结尾我这里做了处理)打开它定位到openDiagramBehaviour节点然后设置Editor ID属性为:GenEditorView里面的ID属性我的为pipesimulator.diagram.part.PipesimulatorDiagramEditorID,并设置Diagram Kind属性为:geneditor根节点下的model ID:Pipesimulator(这是我的根节点下的model ID)这两步很重要。如果设错了就不起作用了。如图所示:
当然你也可以通过代码来更改这两个属性值,但要花一番功夫才能找到,找到editpolice项目下面的OpenDiagramEditorPolice文件修改里面的方法如下即可:
/**
* @generated NOT
*/
protected String getDiagramKind() {
return PipeComponentEditPart.MODEL_ID;
}
/**
* @generated NOT
*/
protected String getEditorID() {
return PipesimulatorDiagramEditor.ID;
}。
然后生成代码运行实例就可以看到你的效果了,如图所示这是我的结果图: