用RCP开发一个编辑器实现卡尔曼滤波

RCP(Rich Client Product)是基于Eclipse平台的一种桌面端开发技术,Elipse开发工具本身就是在RCP的基础上再加上各种插件所构成的。本文主要分为以下几个部分。

  • RCP与SWT JFace

  • RCP的开发步骤

  • RCP实现卡尔曼滤波算法


RCP简介 SWT JFace

RCP是一个基于Eclipse平台技术的应用程序所需要的最小集合,开发者可以任意添加其他插件并将它们添加到其中。整个Eclipse平台的图形界面全都是基于SWT技术。JFace是SWT的一个工具包,为SWT提供了很多方便的功能。SWT的基本体系结构共分为三层:

  • SWT的API

  • JNI(Java Native Interface)相关代码

  • 使用C语言编写的操作系统本地动态链接库

SWT的API结构又包含这几个主要的类,在进行界面开发时经常会用到。

  • Layout,负责控件的摆放位置

  • Widgets,组件类,负责显示窗口和按钮文本框等组件

  • Events,事件类,负责将控件的消息发送到操作系统,然后将操作系统的消息传回给控件

  • Graphics, 负责调用JIN函数完成绘图命令


JFace JFace是基于SWT的一套图形工具包,将一些经常使用的图形操作封装起来了。主要对以下几种操作进行了封装:

  • Viewer查看器

  • Resource Registry资源注册表,管理和释放程序中用到的图形资源

  • Field Assist字段帮助,在空间附近提供提示和标注

  • Action&Contribution 控制菜单栏与工具栏等的一套框架

  • Dialogs,Wizard Page,Preference Page 对话框 向导页和首选项页

  • Data Binding 将数据模型与图形界面上的控件绑定

    使用JFace使得开发更加方便


RCP的开发步骤

首先,新建一个plug-in工程,注意要勾选创建一个RCP程序,然后我们选择带有一个视图的模板。

创建完成后会自动进入MF文件,在Overview里可以看到所需要进行的配置,点击就可进入相应的界面,包括添加依赖项,添加插件,添加和编辑扩展点,也可以在设置Runtime。

扩展点就是向界面添加组件,添加的扩展点都是Eclipse已经封装好的包,直接添加就可以。

下面来介绍自动生成的几个类

Application是程序的入口类,在这个类中定义了两个函数,start()和stop(),在start()函数中创建了一个Display对象,并且创建并运行了工作平台workbench;在stop()函数中关闭了workbench

Display display = PlatformUI.createDisplay(); 
int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());

Activator类负责整个插件程序的生命周期,

ApplicationWorkbenchAdvisor类负责工作台的初始化和窗口的初始化等工作,

ApplicationWorkbenchWindowAdvisor类负责窗口的显示和工作栏的初始化操作,

ApplicationActionBarAdvisor类负责向菜单栏添加菜单项并设置对应的操作,

Perspective类是每个RCP默认的透视图类,通过creatIntialLayout函数可以对透视图里的组件进行布局。

public void createInitialLayout(IPageLayout layout) {
        String editorArea = layout.getEditorArea();

        IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.7f, editorArea);
        left.addView(GraphView.ID);

        IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, 0.3f, editorArea);
        right.addView(EditorView.ID);

        layout.setEditorAreaVisible(false);
    }

RCP实现卡尔曼滤波算法

基于RCP开发了一个由用户编辑输入参数然后给出滤波结果视图的小插件。

绘制图表是引用了java的JFreeChart开源jar包,创建了两个视图,一个用于编辑EditorView,一个用于展示结果GraphView。
用RCP开发一个编辑器实现卡尔曼滤波_第1张图片

  • chart类 用于绘图

  • KalmanFilter类是算法实现

  • matrix和vector类是矩阵类和向量类及其运算

  • Test类是为了得到卡尔曼滤波计算结果


为了实现编辑器视图和图表视图的交互,我使用了OSGI中的服务机制,对按钮添加Selected事件监听,获取服务,发送包含计算结果的Event实例,再在GraphView中对事件进行处理eventHandler,注册该服务。

运行如下所示。
用RCP开发一个编辑器实现卡尔曼滤波_第2张图片

最后,推荐一本书,电子工业出版社出版的 《Eclipse插件开发》讲解地比较详细,可以作为入门书籍。

你可能感兴趣的:(RCP)