⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pielayout.as

📁 用于flash/flex的 as3的 2D图形图像图表的动态生成
💻 AS
字号:
package flare.vis.operator.layout
{
	import flare.util.Property;
	import flare.util.Shapes;
	import flare.vis.data.Data;
	import flare.vis.data.DataList;
	import flare.vis.data.DataSprite;
	
	import flash.geom.Point;
	import flash.geom.Rectangle;
	
	/**
	 * Layout that places wedges for pie and donut charts. In addition to
	 * the layout, this operator updates each node to have a "wedge" shape.
	 */
	public class PieLayout extends Layout
	{
		private var _field:Property;
		
		/** The source property determining wedge size. */
		public function get source():String { return _field.name; }
		public function set source(f:String):void { _field = Property.$(f); }

		/** The data group to layout. */
		public var group:String = Data.NODES;
		
		/** The radius of the pie/donut chart. If this value is not a number
		 *  (NaN) the radius will be determined from the layout bounds. */
		public var radius:Number = NaN;		
		/** The width of wedges, negative for a full pie slice. */
		public var width:Number = -1;
		/** The initial angle for the pie layout (in radians). */
		public var startAngle:Number = Math.PI/2;
		/** The total angular size of the layout (in radians, default 2 pi). */
		public var angleWidth:Number = 2*Math.PI;
		
		// --------------------------------------------------------------------
		
		/**
		 * Creates a new PieLayout
		 * @param field the source data field for determining wedge size
		 * @param width the radial width of wedges, negative for full slices
		 */		
		public function PieLayout(field:String=null, width:Number=-1,
								  group:String=Data.NODES)
		{
			layoutType = POLAR;
			this.group = group;
			this.width = width;
			_field = (field==null) ? null : new Property(field);
		}
		
		/** @inheritDoc */
		protected override function layout():void
		{
			var b:Rectangle = layoutBounds;
			var r:Number = isNaN(radius) ? Math.min(b.width, b.height)/2 : radius;
			var a:Number = startAngle, aw:Number;
			var list:DataList = visualization.data.group(group);
			var sum:Number = list.stats(_field.name).sum;
			var anchor:Point = layoutAnchor;
			
			list.visit(function(d:DataSprite):void {
				var aw:Number = -angleWidth * (_field.getValue(d)/sum);
				var rh:Number = (width < 0 ? 0 : width) * r;
				var o:Object = _t.$(d);
				
				d.origin = anchor;
				
				//o.angle = a + aw/2;  // angular mid-point
				//o.radius = (r+rh)/2; // radial mid-point
				o.x = 0;
				o.y = 0;
				
				o.u = a;  // starting angle
				o.w = aw; // angle width
				o.h = r;  // outer radius
				o.v = rh; // inner radius
				o.shape = Shapes.WEDGE;

				a += aw;
			});
		}
		
	} // end of class PieLayout
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -