我们在学习Degrafa之前首先应该了解Flex和Flash画图之间的异同:
下面是Flex 和Flash 的类继承结构,他们都是继承自Sprite,然后在子类上 Flex 简化或去除了时间轴的感念。
Flex 中的 UI元素 大都继承自 UIComponent类
UIComponent>FlexSprite>Sprite >DisplayObjectContainer>InteractiveObject >Displayobject
Flash 中的架构 (Sprite类的继承关系)
MovieClip > Sprite > DisplayObjectContainer > InteractiveObject >Displayobject
Flex 中无法直接使用Flash 中的MovieClip元件。只能通过工具 将Flash MovieClip 转成 UIMovieClip, UIMovieClip 继承自 MovieClip, MovieClip 类用于实现其使用方式与普通 Flex 组件一样的某个 Flash 组件的必要接口。因此,MovieClip 的子类可以用作 Flex 容器的子项或外观,它可以响应事件、定义视图状态和转换,还可以像所有 Flex 组件一样使用效果。
所有的Flex的图形必须添加到UIComponent的对象中才能在Application中被显示出来。
接下来我们开始讲Degrafa
Degrafa是一套很强大的图形算法类库,并且开源,他为我们封装好了一些图形原件和容器,开发人员可以直接使用这些图形原件,并修改内部属性。
在Degrafa库中图形的属性修改会自动影响到图形的显示。
这里我们拿圆形来了解Degrafa是怎么一个原理来画图的:
系统默认的画圆方式是(如下图):
var circle2:Sprite = new Sprite();
circle2.graphics.beginFill(0x00CCFF);
circle2.graphics.drawCircle(80, 40, 40);
而Degrafa的画圆方式是通过线来实现的,他有两个属性stroke和fill来控制内部填充和外部环绕。
我们看一下geometry.Circle的preDraw函数,里面的addMoveTo是设置起点,addCurveTo是设置弧度,由此来画图
commandStack.addMoveTo(
centerX+Math.cos(anchorAngle)*radius,
centerY+Math.sin(anchorAngle)*radius);
var i:int=0;
//loop through and add the curve commands
for (i; i<accuracy; ++i) {
controlAngle = anchorAngle+span;
anchorAngle = controlAngle+span;
commandStack.addCurveTo(
centerX + Math.cos(controlAngle)*controlRadius,
centerY + Math.sin(controlAngle)*controlRadius,
centerX + Math.cos(anchorAngle)*radius,
centerY + Math.sin(anchorAngle)*radius)
};
个人觉得,Degrafa的内部运行机制就是提供了诸如addCurveTo之类的一套很强大的图形算法类库。
这里我写了一个硬编码的画圆形方式:
package {
import com*.IGeometry;
import com.*.geometry.Geometry;
import flash.display.Graphics;
import flash.geom.Rectangle;
//--------------------------------------
// Other metadata
//--------------------------------------
[Bindable]
public class Hec extends Geometry implements IGeometry{
public function Hec(){
super();
}
override public function preDraw():void{
commandStack.source.length = 0;
commandStack.addMoveTo(150,100);
commandStack.addCurveTo(150,150,100,150);
commandStack.addCurveTo(50,150,50,100);
commandStack.addCurveTo(50,50,100,50);
commandStack.addCurveTo(150,50,150,100);
//commandStack.addLineTo(200,200);
invalidated = false;
}
override public function draw(graphics:Graphics,rc:Rectangle):void{
preDraw();
//apply the fill retangle for the draw
super.draw(graphics,(rc)? rc:bounds);
}
}
}
调用的类:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="1024" height="900" minWidth="955" minHeight="600" creationComplete="init()">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.annpro.base.geometry.Circle;
import com.annpro.base.geometry.CubicBezier;
import com.annpro.base.paint.SolidStroke;
import mx.containers.Canvas;
import mx.graphics.Stroke;
public function init():void{
import com.annpro.base.GeometryGroup;
import com.annpro.base.Surface;
var su:Surface=new Surface();
var gg:GeometryGroup=new GeometryGroup();
var _graphObjects1:Array=new Array;
_graphObjects1.push(gg);
su.graphicsData=_graphObjects1;
var line:Hec=new Hec();
//line.data="125 0 375";
var stroke:SolidStroke=new SolidStroke(0x444444,1,5);
line.stroke=stroke;
var _graphObjects:Array=new Array;
_graphObjects.push(line);
gg.geometry=_graphObjects;
var can:Canvas=new Canvas();
can.addChild(su);
this.addElement(can);
}
]]>
</fx:Script>
</s:Application>
是不是也获得了一个圆形,可能不是很圆,大家谅解。。。。。。。。
分享到:
相关推荐
Degrafa 3.1 源码是一个用于FLEX应用程序开发的图形库,它提供了丰富的SVG(可缩放矢量图形)支持,使开发者能够创建复杂、动态且交互式的图形用户界面。在这个源码包中,我们主要关注的是如何使用 Degrafa 与 FLEX ...
DEGRAFA,全称为“基于SVG的矢量图形绘制框架”,是一个开源的、基于SVG(Scalable Vector Graphics)标准的图形绘制工具包,主要应用于Java平台。它为开发者提供了丰富的API,使得在Java应用程序中创建、编辑和展示...
Degrafa是一款强大的图形绘制工具,专为Adobe Flex开发者设计,用于在Flex应用程序中创建复杂的矢量图形。这款工具的核心是其灵活的图形系统,它允许开发者通过代码控制图形的每一个细节,从而实现动态和交互式的...
Degrafa是一款强大的图形绘制库,专用于在JavaFX平台上创建复杂的矢量图形。它提供了一个灵活的声明式模型,使开发者能够轻松地定义和操纵矢量图形,类似于SVG(可缩放矢量图形)标准。这篇博文"Degrafa画矢量曲线...
Degrafa's Fills是一个在Flex开发中用于图形渲染的开源库,它为开发者提供了丰富的图形填充效果。这篇博文的作者分享了如何将 Degrafa 的填充功能集成到其他Flex项目中的方法,通过一个名为“sign05.mxml”的示例...
flex开发的画图框架Degrafa 近来需在flex画些简单的图形,根据朋友推荐使用了Degrafa,但是官方没有提供离线的文档下载,于是自己制作了一下。 文档的所有版权均属http://www.degrafa.com 详细情况请查看degrafa的...
6. **源码开放**:作为开源项目, Degrafa的源码可供学习和研究,开发者可以深入理解其工作原理,根据需求进行修改和扩展,增强了项目的灵活性和可定制性。 7. **社区支持**:博客链接...
DeGrafa是一款强大的开源绘图工具,专为创建和编辑SVG(Scalable Vector Graphics)图形而设计。SVG是一种基于XML的矢量图像格式,它允许开发者创建清晰、高质量的图形,无论放大多少倍都不会失真,广泛应用于网页...
flex开发的画图框架Degrafa 近来需在flex画些简单的图形,根据朋友推荐使用了Degrafa,但是官方没有提供离线的文档下载,于是自己制作了一下。 文档的所有版权均属http://www.degrafa.com 详细情况请查看degrafa的...
在IT行业中,SVG(Scalable Vector Graphics)是一种...这个过程涉及的技术包括SVG解析、Flex图形编程、以及 Degrafa 的高级特性,对于想要提升Flex应用视觉效果和交互性的开发者来说,这是一个非常有价值的学习资源。
在DEGRAFA中,SVG路径的使用是一个重要的主题,DEGRAFA是一个ActionScript 3.0库,专门用于图形渲染和矢量图形操作。 SVG路径由一系列命令和参数构成,这些命令指示浏览器如何绘制路径。主要的命令包括M(移动到)...
Degrafa扩展就是在FLEX中增加了对矢量数据的动态处理,包括动态添加,删除和修改,并支持SVG的路径格式数据, 因此只需要对现有的SVG数据进行一些必要的转换(以后会有工具支持,但现在只能手工完成),就可以将SVG...
1.Degrafa 是flex中的一个开源关系图表框架。birdeye就是基于degrafa写的。 2.amstockchart和amcharts是TourDeFlex中下载的一个收费的图形报表框架。下载的是具有短期(好像是3个月)的试用期,并且带有其公司logo,...
标题中的“一个隐藏式的登录窗口”指的是在用户交互过程中,登录界面以非显眼或非固定形式出现的设计。这种设计通常用于提供更好的用户体验,避免在不使用时占据屏幕空间,只在需要时才显现。在本项目中,登录窗口...
标题中的“DegrafaFlex4.rar”是一个压缩包文件,其中包含了与Flash MX/Flex相关的源码,特别是关于Flex的应用。"Flex"是Adobe开发的一个开源框架,用于构建富互联网应用程序(RIA),它基于ActionScript编程语言和...
Flex3是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的图形编程能力,使得开发者能够创建交互性强、视觉效果优秀的Web应用。在Flex3中, Degrafa是一个...
14. **Degrafa**: 一个声明式的图形描述框架,虽然有些人更倾向于使用AS3和Flash IDE进行图形设计,但 Degrafa 由于其社区支持和潜力,仍具有一定的吸引力。 15. **OpenFlux**: 宣称是一个开放源码的Flex组件框架,...