基于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