现在的位置: 首页 > 综合 > 正文

深度解剖GFX原理

2014年02月05日 ⁄ 综合 ⁄ 共 2133字 ⁄ 字号 评论关闭

 

1引言

目前,主流的浏览器主要有IE

Firefox

Safari

Opera 

Chrome 

等,他们对矢量绘图的支持不尽相同,如

IE

支持如

VML

sliverlight 

,而其他浏览器大多数支持

SVG

canvas,IE

的独断

专行使很多程序员都很苦恼,无法按照一个统一的标准来实现矢量绘图,往往一个矢量绘图页面要实现不同的两套方案和不同的两段代码.

GFX为开发者屏蔽了浏览器之间的区别,良好的解决了在浏览器中进行动态图形操作的兼容性问题(在 

IE 

中使用 

VML 

进行渲染,其他浏览器中使用 

SVG

)。同时 

GFX 

借助 

Dojo 

良好的特性

,能够帮助用户快捷的创建数据可视化,

事件绑定,

图形界面操作等功能。

 

2、

GFX包分析

 

     

2.1

GFX

目录结构

GFX

dojo

库的

dojox

包下中的

gfx

目录,目录结构如下图所示:

GFX

相关的文件大致分为两部分,

dojox

根目录下的

gfx.js

gfx

目录,包中大致分为图形类、渲染类、工具类。

 

 

 

 

2.2

GFX

类分析

 

  (1

)图形类

图形类大致为以下三个文件shape

path

vectorText

shape.js

是一个图形抽象基类,其中包括

surface ,group,

rect, line, ellipse, circle, polyline, image这一系列子类以及一些基本方法的接口,如

setFill

setStock

等方法(具体阅读源代码),

这些方法将在相应的render

中具体实现。

由于path

vectorText

比较特殊所以独立放在各自的类中。

  

  (2

)渲染类

目前GFX

中渲染类主要有

svg

vml

canvas

sliverlight

几个主流的矢量绘图技术,我们通常称他们为

render

,判断使用哪个

render

的工作主要在

dojox

根目录下的

gfx.js

中进行,他会判断当前用户的浏览器类型以及版本然后指定相应的

render

来进行渲染,一般默认以

SVG

VML

为主,用户也可以指定使用相应的

render

,在这些类中都基本上对所有图形类进行了继承,对他们的方法都进行了重写来适应不同浏览器的要求来达到一致的效果。

 

  (3

)工具类

工具类主要有以下几个功能、实现图形移动、图形矩阵变换、图形动画效果等这些分别有几个js

文件来实现,这里不做一一介绍。

 

3、

简单的GFX

实例

 3.1准备工作

使用 GFX 

绘图的时候,首先要在页面当中加入 

dojo.js 

文件,并且加载 

GFX 

包,代码如下:

 <script type="text/javascript" src="dojo/dojo.js" ></script> 

 <script type="text/javascript"> 

 dojo.require("dojox.gfx"); 

 </script> 

 

 

 3.2创建

surface

surface 是 

GFX 

模型中的一个概念,表示了一个所有形状的矩形虚拟容器,每一个页面都可以有多个这样的容器,每一个容器都有一个本地的坐标系统,

轴水平指向右侧,

周垂直指向下。

<div id="container"></div>

<script>

 var gfxContainer= dojo.byId('container'); 

 var surface = dojox.gfx.createSurface(gfxContainer, 400, 400); 

<script>

 

这样我们就在一个dom

节点上创建了一个

surface

,尺寸为

400x400

gfxAPI

就会根据不同的浏览器环境将自动将这段代码转换为相应的

svg

节点或者

vml

节点。

 

 

3.3创建一个简单的圆

 Gfx提供了一系列

createApi

来创建你想要的图形

createPath(path), 

createRect(rect), 

createCircle(circle),

createEllipse(ellipse),

createLine(line),

createPolyline(polyline),

createImage(image),

createText(text),

createTextPath(textpath)

 

 

 

 

所传入的属性为构造他们的shape

对象

,具体如下所示:

       var circle = { cx: 100, cy: 100,r: 60};

       var gfxcircle = surface .createCircle(circle).setFill("yellow").setStroke("blue");

同时可以在上述shape

对象中加入

type

再和

creatShape

shape

)配合来创建相应的图形

,当然在IE

上是

vml

,在

firefox

上就是

svg

 

小结

本文主要针对gfx

工作原理,对解析流程进行了剖析,主要着重于介绍实现原理,没有对使用细节进行具体阐述,具体用法请参见

dojocampus

 

参考文献

 

[1]

 

http://dojocn.com/

 dojo中文技术社区

[2] 

http://docs.dojocampus.org/

 dojo文档

 

抱歉!评论已关闭.