比例尺

// ActionScript file
package {
import flash.display.Graphics;

import mx.controls.Label;
import mx.core.UIComponent;
import mx.core.UITextField;

[Style(name="shadowColor", type="uint", format="Color", inherit="yes")]
[Style(name="strokeColor", type="uint", format="Color", inherit="yes")]
[Style(name="strokeWidth", type="Number", format="Number", inherit="yes")]
[Style(name="strokeHeight", type="Number", format="Number", inherit="yes")]
[Style(name="sectNum", type="Number", format="Number", inherit="yes")]

/**
* @author pWX151802
*/
public class ScaleRule extends UIComponent
{

/**
* @private
*/
private static const DEFAULT_PREFERRED_WIDTH:Number = 100;

private static const OFFSET:Number = 20;

public function ScaleRule()
{
super();
}

override protected function createChildren():void{
super.createChildren();
labelObjects = new UIComponent();
addChild(labelObjects);
}

override protected function commitProperties():void{
super.commitProperties();
if (labelsChanged)
{
labelsChanged = false;

createLabels();
}
}

/**
* @private
*/
override protected function measure():void
{
super.measure();

measuredWidth = DEFAULT_PREFERRED_WIDTH;
measuredHeight = getStyle("strokeHeight");
}

override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);

var g:Graphics = graphics;

g.clear();

var strokeColor:Number = getStyle("strokeColor");
var shadowColor:Number = getStyle("shadowColor");
var strokeWidth:Number = getStyle("strokeWidth");
var strokeHight:Number = getStyle("strokeHeight");
var sectNum:Number = getStyle("sectNum");

if (strokeHight > unscaledHeight)
strokeHight = unscaledHeight;

var left:Number = 0;
var top:Number = _labels?unscaledHeight / 2:(unscaledHeight - strokeHight)/ 2;
var right:Number = _labels?unscaledWidth - OFFSET:unscaledWidth;

var pieceWidth:Number = Math.min(right/sectNum,strokeWidth<5?right:strokeWidth);

var bottom:Number = top + strokeHight;

if (sectNum == 1)
{
g.beginFill(strokeColor);
g.drawRect(left, top, pieceWidth, strokeHight);
g.endFill();
}
else if (sectNum > 1)
{
var leftPoint:Number = left;

for(var i:int=0;i<sectNum;i++){
if(i%2 == 0){
g.beginFill(strokeColor);
g.drawRect(leftPoint, top, pieceWidth, strokeHight);
}else{
g.beginFill(shadowColor);
g.drawRect(leftPoint, top, pieceWidth, strokeHight);
}
leftPoint = leftPoint + pieceWidth;
}
g.endFill();

}

layoutLabels(pieceWidth,unscaledHeight / 2);

}

private var labelObjects:UIComponent;

/**
* @private
*/
private function createLabels():void
{

if (labelObjects)
{
for (var i:int = labelObjects.numChildren - 1; i >= 0; i--)
{
labelObjects.removeChildAt(i);
}
}

if (_labels)
{
var numLabels:int = _labels.length;

for (var j:int = 0; j < numLabels; j++)
{
var labelObj:Label = new Label();

labelObj.setStyle("fontSize",10);

labelObj.text = _labels[j] is String ?
_labels[j]+_unitage :
_labels[j].toString()+_unitage;
labelObj.y = 0;
labelObjects.addChild(labelObj);
}
}
}

/**
* @private
*/
private function layoutLabels(pieceWidth:Number, labelHeight:Number):void
{
var numLabels:Number = labelObjects ? labelObjects.numChildren : 0;

if (numLabels > 0)
{
var labelInterval:Number = pieceWidth;

var labelPos:Number;
var left:Number = labelInterval;
var curLabel:Object;

for (var i:int = 0; i < numLabels; i++)
{
curLabel = labelObjects.getChildAt(i);
curLabel.setActualSize(curLabel.getExplicitOrMeasuredWidth(), curLabel.getExplicitOrMeasuredHeight());

labelPos = curLabel.getExplicitOrMeasuredWidth() / 2;

curLabel.move(left-5,0);

left += labelInterval;
}
}
}

private var _unitage:String = "";

private var labelsChanged:Boolean =false;

public function set unitage(value:String):void{
_unitage = value;
}

private var _labels:Array;

public function set labels(value:Array):void{
labelsChanged = true;
_labels = value;
}

}
}

引用:
var scaleRule:ScaleRule = new ScaleRule;
scaleRule.percentWidth = 100;
scaleRule.height = 30;
scaleRule.setStyle("strokeColor",0x000000);
scaleRule.setStyle("shadowColor",0xaaaaaa);
scaleRule.setStyle("strokeHeight",5);
scaleRule.setStyle("strokeWidth",50);
scaleRule.setStyle("sectNum",4);
scaleRule.labels=['1','2','3','4'];
scaleRule.unitage = "m";
this.addChild(scaleRule);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值