基于GEF框架的SVG制作工具设计与实现

  • 格式:doc
  • 大小:258.00 KB
  • 文档页数:4

任务赚钱类网站收集(含赚钱流程):/1971797023/blog/1356166548

基于GEF框架的SVG制作工具设计与实现

摘 要 本文在对比了几款SVG制作工具的功能特性后,分析了实现制作工具所面临的两个问题,并提出了一种在Eclipse平台上基于GEF框架的制作SVG文件的设计和实现方案,最后介绍了系统的架构和部分关键模块的实现。

关键词 SVG,GEF,MVC模式,DOM

1 引言

SVG(Scalable Vector Graphics)是一种基于XML开放标准的矢量图形描述语言,支持对图形、图像、文字、透明效果和动画描述,并提供极强的交互性,被广泛使用在各应用系统中。但是,由于SVG源码可读性差,编写需时长,易出错,SVG应用的制作效率很低,所以需要一款可视化的制作工具。本文的目的就是利用Eclipse平台的GEF(Graphic Editor Framework)框架,针对SVG的能聚合多种媒体数据,并能体现其动态性和交互性的特点,设计并实现了一款SVG的可视化制作工具。

2 SVG制作工具的研究现状

进年来SVG发展迅速,国外在此方面已进行了多年研究,并有多款工具问世。我国在SVG上的研究起步较晚,一直处于落后地位,成型的工具更是寥寥无几。以下是对几款制作工具的简单介绍以及功能特性比较。

Batik,始于2000年,是 Apache组织开发项目里SVG开源软件计划之一。它是基于 java 语言实现的一个 SVG 应用的工具集,用于实现对 SVG 对象的显示、编辑以及将 SVG 图形对象转换成其他图片格式。Inkscape也是一款开源软件,它始于2003年,有跨平台的特性,主要以Linux作为开发平台。Mobile Designer是Beatware公司研发的一款,其输出内容可以满足SVG,SVG

Tiny,SVG Basic以及一些它们混合的版本。

通过分析上面三款SVG制作工具,可以得出他们的功能特性比较,如表1所示。

由表1可以得出SVG制作工具应该包含以下主要组件:

 画布:提供编辑SVG场景的区域。达到一种WYSIWYG的效果。

 工具条:用于创建各种图形对象,这些对象包括SVG中的几何图形、文本、图片和音视频文件。

 源码编辑器:用于编辑SVG文件源码。

 属性视图:用于展现和编辑当前选中对象的属性。

 大纲视图:用于展现当前SVG文件的场景树。提供了一种图形化视图展现对象在场景树中是如何存储的。并提供了在场景中对对象进行选择和排序工具。

 事件处理视图:允许设计者为对象添加和定义事件。

 时间轴:在时间上组织场景中的对象。

 仿真器:预览所制作的SVG文件,包括表1:Batik、Inkscape和Mobile Designer功能特性比较

Batik Inkscape Mobile

Designer

可视化 × √ √

画布 × √ √

工具条 × √ √ 组件 属性框 × × √

时间轴 × × √

源码编辑器 × √ ×

场景树 × × ×

仿真器 × × ×

任务赚钱类网站收集(含赚钱流程):/1971797023/blog/1356166548

SVG特性 动画 √ × √

字体 √ × √

滤镜 √ × ×

交互 √ × √

音视频 √ × √

脚本 √ × ×

扩展 √ × ×

开源 √ √ ×

其他 跨平台 高级控件

对象的表现和交互行为。

在实现该制作工具时面临的主要问题:如何为用户提供方便的源码编辑工具(如提供代码提示和代码折叠);如何完成图形与SVG文本文件的相互转化。

3 带代码提示的源码编辑器

众所周知,SVG源码可读性差,编辑效率低,所以优化源码编辑器提高编辑效率是非常必要的。可以通过提供代码提示来提高编辑效率。代码提示包括提供内容助理和自动完成建议。内容助理是在激活时为用户相关代码进行提示,自动完成建议是当用户选中某提示时,自动完成此提示所需代码,类似用Eclipse编写java代码时,在实例后面输入“.”后列出此实例可用的所有方法。

首先分析SVG的语言特点,如下所示:

font-size="12">This is a text

可以看出标签名和属性都包含在“<”和“>”中,其间以空格分隔,以“”结束,标签的内容则写在“>”和“<”之间。由此可以得出代码提示算法的思想:从光标所在处的前一个字符开始,往前进行判断。

如果先遇到的为“>”,不给任何提示;

如果先遇到的为“<”,取得从“<”到当前光标处的字符串,找出所有以该字符串开始的元素名称,用户确认某元素后就自动输入(以text为例)“”;

如果先遇到空格,说明光标所处的位置可能用于编写属性,往前寻找进行判断:

若先遇到“>”或“/”,不给提示;

若先遇到“<”,说明当前光标所处的位置用于编写属性,为此元素找到所有匹配的属性,并显示到代码提示框中,用户确认某属性后自动输入(以x为例)“x=""”。

如果先遇到的为“/”,说明当前光标所处位置是一个标签的结束,向前寻找当前标签名称,在提示框中给出唯一提示,确认后自动输入(以text为例)“”。

4 图形与SVG文本转化思想的分析和介绍

制作工具包含一个画布(图形编辑器),一个源码编辑器,这两个编辑器在某一时刻只有其中之一可见,如何使这两个编辑器编辑的内容同步,是面临的另一个问题。

SVG文档通过DOM来组织文本内容逻辑关联的,利用DOM接口对SVG文档进行分析后,其中的信息会被转化成一棵对象节点树(DOM树)。可以通过DOM接口访问、修改、添加或删除树种的节点和内容。如下有一个SVG文档,其代码为:

y="10" width="50" height="20"/>

font-size="12" x="10" y="10">hello

用DOM树表示这段文档,如图1所示。

DocumentsvgrectgHelloFont-sizeTextFillHeightWidthYXIdStrokeYXId

图1:DOM树

任务赚钱类网站收集(含赚钱流程):/1971797023/blog/1356166548

在这棵DOM树中,SVG文档的内容都用节点表示。一个节点又可以包含其它节点,节点本身也可以包含一些属性信息。相应的在画布中能否用与SVG DOM相同的思想来组织其中的各元素以形成一棵图形对象树,并实现图形对象树到SVG DOM树的映射关系?

经分析发现Eclipse平台下的GEF框架刚好可以满足需求。GEF的优势是提供了标准的MVC结构,即模型、视图和控制器。其中模型可以根据需求构建其属性和层次关系,以形成一棵对象树,这正是所需要的。

Draw2D是基于SWT的图形处理包,它为GEF的展现提供了一套轻量级图形系统。Draw2D中的提供的缺省图形全部都实现IFigure(org.eclipse.draw2d.IFigure)接口,可以控制图形的尺寸位置,监听事件等等。但是缺省图形不能满足特殊需求(比如SVG的text有填充透明度属性),所以需要创建新的图形,以text为例,创建TextFigure类继承org.eclipse.draw2-

bel,重写其paintFigure方法。

经过扩充后的Draw2D图形库就可以辅助完成图像与SVG的相互转化。转化思想:新建一个SVG文件时为其创建新的DOM树。

从源码编辑器切换到图形编辑器:获取源码编辑器中当前的所有文本内容,并据文本内容创建一棵SVG DOM树。从根节点开始遍历整棵SVG DOM树,为图元节点建立对应的模型对象,从而完成了SVG DOM树到图形对象树的映射。

从图形编辑器切换到源码编辑:在图形编辑器中新建一个图形对象,在DOM树上就会在对应位置添加图形节点和属性节点。切换时,直接获取DOM树的全部内容,并以XML语言的形式显示在源码编辑器中,从而完成图形到SVG文本文件的转化, 5 系统框架设计

针对上述提出的问题,以及可视化和易操作的目的,本系统的设计采用MVC模型并基于GEF框架。系统框架设计如图2所示。

ControllerView & EditorModel Import/Export SVG DOMGraphic ModelsSVG File

(*.SVG)Graphic ToolsSVG DocumentSVG

ConvertorSource EditorGraphic

EditorText ToolsViewsTimeline

EditorEmulate

Emulator

图2:系统框架图

5.1 核心模块的功能设计

 用户接口( View & Editor)

包括各种视图和编辑器。其中视图包括Navigator视图、Properties视图、Outline视图和Problems视图。编辑器包括:Graphic

Editor(画布)、Timeline Editor(时间线)、Source Editor(源码编辑器)。

 控制器(Controller)

包括Graphic Tools和Text Tools。其中Graphic Tools用于管理Graphic Editor中整个被编辑模型对象的数据,而Text

Tools用于管理Source Editor中SVG文档内容,并提供内容辅助、语法高亮、代码折叠等功能,以提高编辑效率。

 模型(Model)

Graphic Models包含circle、line等基本图形类。这些类提供了图形的所有属性以及绘制、删除和编辑等方法。

SVG DOM用于将SVG 文档转化为一个对象模型的集合(DOM树)。

SVG Document是正在Source Editor