`
madfroghe
  • 浏览: 122159 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Degrafa学习一,(含SDK4.0兼容版本及源码,略微有所修改)

    博客分类:
  • Flex
阅读更多

我们在学习Degrafa之前首先应该了解FlexFlash画图之间的异同:

    下面是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的画圆方式是通过线来实现的,他有两个属性strokefill来控制内部填充和外部环绕。

     

我们看一下geometry.CirclepreDraw函数,里面的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>

是不是也获得了一个圆形,可能不是很圆,大家谅解。。。。。。。。



分享到:
评论

相关推荐

    Degrafa3.1源码

    Degrafa 3.1 源码是一个用于FLEX应用程序开发的图形库,它提供了丰富的SVG(可缩放矢量图形)支持,使开发者能够创建复杂、动态且交互式的图形用户界面。在这个源码包中,我们主要关注的是如何使用 Degrafa 与 FLEX ...

    关于DEGRAFA的简介

    DEGRAFA,全称为“基于SVG的矢量图形绘制框架”,是一个开源的、基于SVG(Scalable Vector Graphics)标准的图形绘制工具包,主要应用于Java平台。它为开发者提供了丰富的API,使得在Java应用程序中创建、编辑和展示...

    Degrafa帮助文档

    Degrafa是一款强大的图形绘制工具,专为Adobe Flex开发者设计,用于在Flex应用程序中创建复杂的矢量图形。这款工具的核心是其灵活的图形系统,它允许开发者通过代码控制图形的每一个细节,从而实现动态和交互式的...

    Degrafa画矢量曲线

    Degrafa是一款强大的图形绘制库,专用于在JavaFX平台上创建复杂的矢量图形。它提供了一个灵活的声明式模型,使开发者能够轻松地定义和操纵矢量图形,类似于SVG(可缩放矢量图形)标准。这篇博文"Degrafa画矢量曲线...

    关于Degrafa's Fills简介

    Degrafa's Fills是一个在Flex开发中用于图形渲染的开源库,它为开发者提供了丰富的图形填充效果。这篇博文的作者分享了如何将 Degrafa 的填充功能集成到其他Flex项目中的方法,通过一个名为“sign05.mxml”的示例...

    degrafa 的帮助文档

    flex开发的画图框架Degrafa 近来需在flex画些简单的图形,根据朋友推荐使用了Degrafa,但是官方没有提供离线的文档下载,于是自己制作了一下。 文档的所有版权均属http://www.degrafa.com 详细情况请查看degrafa的...

    Degrafa(Beta3)

    6. **源码开放**:作为开源项目, Degrafa的源码可供学习和研究,开发者可以深入理解其工作原理,根据需求进行修改和扩展,增强了项目的灵活性和可定制性。 7. **社区支持**:博客链接...

    degrafa绘图工具 svg操作

    DeGrafa是一款强大的开源绘图工具,专为创建和编辑SVG(Scalable Vector Graphics)图形而设计。SVG是一种基于XML的矢量图像格式,它允许开发者创建清晰、高质量的图形,无论放大多少倍都不会失真,广泛应用于网页...

    Degrafa.CHM

    flex开发的画图框架Degrafa 近来需在flex画些简单的图形,根据朋友推荐使用了Degrafa,但是官方没有提供离线的文档下载,于是自己制作了一下。 文档的所有版权均属http://www.degrafa.com 详细情况请查看degrafa的...

    SvgToDegrafa.rar_SvgToDegrafa_degrafa_flex

    在IT行业中,SVG(Scalable Vector Graphics)是一种...这个过程涉及的技术包括SVG解析、Flex图形编程、以及 Degrafa 的高级特性,对于想要提升Flex应用视觉效果和交互性的开发者来说,这是一个非常有价值的学习资源。

    深入SVG路径~~~在DEGRAFA中使用PATH

    在DEGRAFA中,SVG路径的使用是一个重要的主题,DEGRAFA是一个ActionScript 3.0库,专门用于图形渲染和矢量图形操作。 SVG路径由一系列命令和参数构成,这些命令指示浏览器如何绘制路径。主要的命令包括M(移动到)...

    degrafa源代码

    Degrafa扩展就是在FLEX中增加了对矢量数据的动态处理,包括动态添加,删除和修改,并支持SVG的路径格式数据, 因此只需要对现有的SVG数据进行一些必要的转换(以后会有工具支持,但现在只能手工完成),就可以将SVG...

    flex图形报表控件源代码

    1.Degrafa 是flex中的一个开源关系图表框架。birdeye就是基于degrafa写的。 2.amstockchart和amcharts是TourDeFlex中下载的一个收费的图形报表框架。下载的是具有短期(好像是3个月)的试用期,并且带有其公司logo,...

    一个隐藏式的登录窗口

    标题中的“一个隐藏式的登录窗口”指的是在用户交互过程中,登录界面以非显眼或非固定形式出现的设计。这种设计通常用于提供更好的用户体验,避免在不使用时占据屏幕空间,只在需要时才显现。在本项目中,登录窗口...

    DegrafaFlex4.rar_FlashMX/Flex源码_Flex_

    标题中的“DegrafaFlex4.rar”是一个压缩包文件,其中包含了与Flash MX/Flex相关的源码,特别是关于Flex的应用。"Flex"是Adobe开发的一个开源框架,用于构建富互联网应用程序(RIA),它基于ActionScript编程语言和...

    flex3做的流程图

    Flex3是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的图形编程能力,使得开发者能够创建交互性强、视觉效果优秀的Web应用。在Flex3中, Degrafa是一个...

    专题资料(2021-2022年)Flex开源项目.docx

    14. **Degrafa**: 一个声明式的图形描述框架,虽然有些人更倾向于使用AS3和Flash IDE进行图形设计,但 Degrafa 由于其社区支持和潜力,仍具有一定的吸引力。 15. **OpenFlux**: 宣称是一个开放源码的Flex组件框架,...

Global site tag (gtag.js) - Google Analytics