GEF中文教程 自学笔记 1

可以在此处下载电子书与代码
http://download.youkuaiyun.com/source/1982955

 

本机环境:

  • Windows XP SP3
  • Eclipse 3.5.1
  • JDK 1.5
  • GEF 3.5.1
  • EMF 2.5.0

书中例子是一个RCP的HelloWorld,只简单摘要步骤和注意点。

 

1. 创建一个RCP项目org.tutorial.step,插件依赖关系加上 org.eclipse.gef。

 

2. 创建一个Editor,其实现类为DiagramEditor,继承自GraphicalEditor。

Editor系列类的继承关系如下:
org.eclipse.ui.part.WorkbenchPart  所有workbench part的抽象基类,包含ViewPart和EditorPart。
-org.eclipse.ui.part.EditorPart  所有workbench editor的抽象基类,Eclipse项目中的Editor都派生于它。
--org.eclipse.gef.ui.parts.GraphicalEditor  GEF提供的editor的抽象基类,它包含一个GraphicalViewer控件
---org.eclipse.gef.ui.parts.GraphicalEditorWithPalette  提供带Palette的Editor,它包含一个PaletteViewer控件和一个GraphicalViewer控件
---org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette  提供的是flyout palette

注:根据javadoc描述,GraphicalEditor与GraphicalEditorWithFlyoutPalette这两个类的实现方式并没有最终确定下来,如果要用的话,可以copy它们的实现方式。所以我在org.tutorial.step.ui包下创建了一个GraphicalEditor类,内容完全拷贝自org.eclipse.gef.ui.parts.GraphicalEditor(项目需要增加插件依赖org.eclipse.ui.views),并使DiagramEditor继承自这个新的GraphicalEditor类。今后可以自由更改这个基类,也防止Eclipse突然修改这个基类的实现。

 

3. 加个菜单用来打开空的GEF Editor。
定义一个DiagramAction,继承自org.eclipse.jface.action.Action。实现run方法。
通过修改ApplicationActionBarAdvisor类来定义菜单。

 

4. 修改DiagramEditor的构造函数,加上setEditDomain(new DefaultEditDomain(this));
Edit domain管理命令堆栈(command stack)、工具条(palette viewer)等。Edit domain还起通知在Graphical viewer中生成的SWT事件的作用。因此,一定要建立一个Edit domain。
当我们把Graphical viewer放在Editor中时,我们使用DefaultEditDomain(比如本例)。如果把Graphical viewer放在View中或者stand-alone application中时,要用org.eclipse.gef.EditDomain

5. 接下来就要按照GEF的套路分别创建模型、控制器和视图了。第一步先创建模型HelloModel,它是一个简单的java bean。

6. 创建一个控制器HelloEditPart。一般来说,控制器都是继承自org.eclipse.gef.editparts.AbstractGraphicalEditPart。它有两个抽象方法需要实现:createFigure()方法定义用来在视图中显示的图形,本例是显示一个Label;createEditPolicies()用来安装Edit Policy(暂不涉及)。
protected IFigure createFigure() {
    HelloModel model = (HelloModel) getModel();
    Label label = new Label(); //是org.eclipse.draw2d.Label
    label.setText(model.getText());
    return label;
}

7. 使用工厂连接模型与控制器。创建实现了EditPartFactory接口的PartFactory类。
public EditPart createEditPart(EditPart context, Object model) {
    EditPart part = getPartForElement(model);
    // 通过setModel()方法连接模型与控制器。这样从EditPart就可以通过getModel()方法取得对应的模型
    part.setModel(model);
    return part;
 }
/**
 * Maps an object to an EditPart.
 */
private EditPart getPartForElement(Object modelElement) {
    // 根据模型类型创建控制器,每种模型对应一种控制器
    if (modelElement instanceof HelloModel)
        return new HelloEditPart();
    throw new RuntimeException("Can't create part for model element: "
        + ((modelElement != null) ? modelElement.getClass().getName() : "null"));
}

8. 创建视图。
GEF有两类视图,图形化视图(GraphicalViewer)和树状视图(TreeViewer),它们都源自EditPartViewer接口

EditPartViewer管理EditParts的整个生命周期,并且通过EditParts的visuals,如TreeItems或Figures,将模型显示出来。
EditPartViewer本身是一个ISelectionProvider,它维护了一个选中EditParts的列表,该列表永不为空,无选中EditPart时就用viewer的contents。
contents可视为viewer的input,一般是由项目定义的模型实例组成。contents经由EditPartFactory创建出对应的EditParts,并被置入root editpart。当然,也可以为contents自定义一个相应的EditPart。

本例使用内含在GraphicalEditor中的GraphicalViewer。

查看GraphicalEditor的createPartControl()方法,它创建了一个GraphicalViewer接口的实现类ScrollingGraphicalViewer作为自己的GraphicalViewer,然后顺序调用了以下3个方法:
configureGraphicalViewer(); 在GraphicalViewer接受contents前设置GraphicalViewer,一般用来设置root editpart和editpart factory。
hookGraphicalViewer(); 将该GraphicalViewer加入到SelectionSynchronizer,用来同步多个EditPartViewer;同时将该GraphicalViewer注册为selection provider。
initializeGraphicalViewer(); 在这里通过setContents()方法为GraphicalViewer设置输入内容(GraphicalViewer可以类比为jface的TreeViewer,setContents()方法就类似于setInput()方法)。此外,与selection有关的代码也应该放在这儿。

内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向与逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划与B样条优化技术,提升机械臂运动轨迹的合理性与平滑性。文中还涉及多种先进算法与仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模与求解,展示了Matlab在机器人控制、智能算法与系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学与动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划与轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合与智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模与神经网络控制的设计流程,关注算法实现细节与仿真结果分析,同时参考文中提及的多种优化与估计方法拓展研究思路。
内容概要:本文围绕电力系统状态估计中的异常检测与分类展开,重点介绍基于Matlab代码实现的相关算法与仿真方法。文章详细阐述了在状态估计过程中如何识别和分类量测数据中的异常值,如坏数据、拓扑错误和参数误差等,采用包括残差分析、加权最小二乘法(WLS)、标准化残差检测等多种经典与现代检测手段,并结合实际算例验证方法的有效性。同时,文档提及多种状态估计算法如UKF、AUKF、EUKF等在负荷突变等动态场景下的应用,强调异常处理对提升电力系统运行可靠性与安全性的重要意义。; 适合人群:具备电力系统基础知识和一定Matlab编程能力的高校研究生、科研人员及从事电力系【状态估计】电力系统状态估计中的异常检测与分类(Matlab代码实现)统自动化相关工作的工程技术人员。; 使用场景及目标:①掌握电力系统状态估计中异常数据的产生机制与分类方法;②学习并实现主流异常检测算法,提升对状态估计鲁棒性的理解与仿真能力;③服务于科研项目、课程设计或实际工程中的数据质量分析环节; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,配合电力系统状态估计的基本理论进行深入理解,重点关注异常检测流程的设计逻辑与不同算法的性能对比,宜从简单案例入手逐步过渡到复杂系统仿真。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值