GMF中的小知识点

GMF项目中图形编辑技巧与实践
本文详细介绍了在GMF项目中如何通过编辑Part、获取Display与Shell、为图形添加双击事件、过滤右击菜单项等关键操作进行图形编辑与优化,包括禁止图形改变大小与位置的方法,以及如何在项目中实现保存与获取当前编辑器。

1、根据EditPart得到标记模型:editpart.getModel();

2、根据EditPart得到语义模型:((org.eclipse.gmf.runtime.notation.View) editpart.getModel()).getElement();

3、创建图形后禁止改变图形大小:在相应的EditPart中添加或修改代码

/**
 * @generated NOT
 */
public EditPolicy getPrimaryDragEditPolicy() {
    EditPolicy result = super.getPrimaryDragEditPolicy();
    if (result instanceof ResizableEditPolicy) {
        ResizableEditPolicy ep = (ResizableEditPolicy) result;
        ep.setResizeDirections(PositionConstants.NONE);//创建后不能改变大小
    }
    return result;
}
4、创建图形后禁止改变图形位置:在相应的EditPart添加或修改代码
/**
 * @generated NOT
 */
public EditPolicy getPrimaryDragEditPolicy() {
    EditPolicy result = super.getPrimaryDragEditPolicy();
    if (result instanceof ResizableEditPolicy) {
        ResizableEditPolicy ep = (ResizableEditPolicy) result;
        ep.setDragAllowed(false);// 创建后不能拖动
    }
    return result;
}

5、在GMF项目中获取当前Display或者Shell:PlatformUI.getWorkbench().getDisplay().getActiveShell()

6、为图形添加双击事件:在图形对应的EditPart中重写performRequest(Request req)方法,当req.getType().equals(REQ_OPEN)时表明是双击事件。

public void performRequest(Request req) {
    if (req.getType().equals(REQ_OPEN)) {
        //说明是双击事件,在这里添加操作
    }
    super.performRequest(req);
}

7、获得运行时的工作目录:Platform.getInstanceLocation().getURL().getPath()

8、使用扩展点为图形添加右击菜单:http://my.oschina.net/plumsoft/blog/32958

9、过滤右击菜单项:http://my.oschina.net/plumsoft/blog/35167

10、连线的Source图形与Target图形

con.getSourceAnchor().getOwner();
con.getTargetAnchor().getOwner();

11、获取当前的编辑器

XXXDiagramEditor xxxDiagramEditor = (XXXDiagramEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();

12、获得当前编辑器的editPart

XXXEditPart xxxEditPart = (XXXEditPart)xxxDiagramEditor.getDiagramEditPart();

13、用代码实现保存

利用11中获得的编辑器,执行save方法,由于save的方法是IProgressMonitor类型,而IProgressMonitor是一个接口,可以自定义一个实现IProgressMonitor接口的对象,如CustomProgressMonitor,执行保存时:

xxxDiagramEditor.doSave(new CustomProgressMonitor());


转载于:https://my.oschina.net/plumsoft/blog/41019

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值