圆形分格统计图表之组件版 |
| 作者:佚名 来源:闪吧 更新:2007-1-13 20:49:00 错误报告 我要投稿 |
这是例子
点击浏览该文件
这是原文件
点击浏览该文件
强烈要求版主把".AS"文件格式添加为可上传的文件类型
这是组件的代码大家把他考贝到Flash2004保存为pie.as并把他放到和那个原文件同一目录下就可以了
class pie extends MovieClip { /********************************************************* 圆形分格统计图表 组件 版本:1.0 核芯代码来自Super-Tomato 我将它改写成AS2.0的组件 并添加了功能 这样方便大家使用 1.只要在组件属性面板中填写数据就可以自动生成圆饼图 2.可以动态的修改组件的m_data属性并调用DrawPIE();来动态更新圆饼图 3.修正了原代码的设置半径的BUG(至少在我这发现直接修改radius的值没有效果) 4.可以指定颜色,如果没有颜色值则随机生成 计划在下个版本中加入以下功能 1.相应事件 2.添加标签 3.可直接支持XML 4.其他想到在说阿 各位也可以 提点意见 koaqiu 2004-5-24于 E++工作室 **********************************************************/
private var angleA:Array = new Array(); private var angleB:Array = new Array(); private var radius:Number =100; private var MC:MovieClip; var m_data:Array; var m_color:Array; var m_radius:Number; private function MakeAngle(md:Array) { var l:Number; var i:Number; var 和:Number = 0; var md_agn:Array = new Array(); angleA=new Array(); angleB=new Array(); for (i=0; i<md.length; i++) { 和 += md[i]; } for (i=0; i<md.length; i++) { md_agn.push(360*md[i]/和); } for (i=1; i<md_agn.length; i++) { md_agn[i] = md_agn[i]+md_agn[i-1]; } angleA[0] = 0; for (i=1; i<md_agn.length; i++) { angleA[i] = md_agn[i-1]; } for (i=0; i<md_agn.length; i++) { angleB[i] = md_agn[i]; } } function pie() { MC=this; DrawPIE(); } function DrawPIE() { radius=this.m_radius; MakeAngle(this.m_data); for (var i = 0; i<angleA.length; i++) { MC.attachMovie("pie_mc", "pie"+i, i); MC["pie"+i]._width =radius*200/100 ; MC["pie"+i]._height = radius*126.6/100; MC["pie"+i]._x = MC["pie"+i]._width/2; MC["pie"+i]._y = MC["pie"+i]._height/2;
MC.createEmptyMovieClip("mask"+i, i+angleA.length); MC["mask"+i]._x = MC["pie"+i]._x; MC["mask"+i]._y = MC["pie"+i]._y-15; Draw(angleA[i], angleB[i], i); MC["pie"+i].setMask(MC["mask"+i]); if(isNaN(this.m_color[i])){ setHue(Math.floor(Math.random()*0xFFFFFF), i); }else{ setHue(this.m_color[i], i); } } } private function Point(Angle:Number) { var pt:Object = new Object(); pt.x = radius*Math.cos((Math.PI/180)*Angle); pt.y = (0.5)*radius*Math.sin((Math.PI/180)*Angle); return pt; }
private function Draw(angleA:Number, angleB:Number, depth:Number) { var drawer:MovieClip = MC["mask"+depth].createEmptyMovieClip("drawer", 0); drawer.beginFill(0xFFFFFF, 30); var pt1:Object = Point(angleA); drawer.lineTo(pt1.x, pt1.y); if (pt1.y<=0) { drawer.lineTo(2*pt1.x, 2*pt1.y); } else { drawer.lineTo(pt1.x, pt1.y+50); } var tempAngle:Number = angleA+10; while (tempAngle<angleB) { var tempPt:Object = Point(tempAngle); drawer.lineTo(2*tempPt.x, 2*tempPt.y); tempAngle += 10; } var pt2:Object = Point(angleB); if (pt2.y<=0) { drawer.lineTo(2*pt2.x, 2*pt2.y); } else { drawer.lineTo(pt2.x, pt2.y+50); } drawer.lineTo(pt2.x, pt2.y); drawer.endFill();
} private function setHue(rgb:Number, depth:Number) { var c:Color = new Color(MC["pie"+depth]); var cv:Number = rgb; var r:Number = (cv >> 16)/2; var g:Number = ((cv >> 8) & (0xFF))/2; var b:Number = (cv & 0xFF)/2; c.setTransform({ra:r, ga:g, ba:b, rb:0, gb:0, bb:0, aa:100, ab:0}); } }
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |