📄 pielayout.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 + -