Chart: 备份

来源:互联网 发布:淘宝店铺怎么注册 编辑:程序博客网 时间:2024/06/18 12:48
package base
{
import iAS.myNamespace.myInternal;

use namespace myInternal;
public class Chart_Base1 extends Container_Base
{
//***************************************************************************************
//      属性
//***************************************************************************************
protected var _dataProvider:XML = null;
protected var _fieldName:String ;
myInternal var _serieFieldNames:Array ;

protected var _minReal:Number = 0; 
protected var _maxReal:Number = 0; 
protected var _minTick:Number = 0; 
protected var _maxTick:Number = 0; 

myInternal var intervalValueY:Number = 0;      
myInternal var intervalCountY:Number = 0;      

myInternal var intervalValueX:Number = 0; 
myInternal var intervalCountX:Number = 0; 


//***************************************************************************************
//      子组件
//***************************************************************************************        
protected var _titlesX:Vector.<Label_H> = new Vector.<Label_H>(); 
protected var _titlesY:Vector.<Label_H> = new Vector.<Label_H>(); 


//***************************************************************************************
//      构造函数
//***************************************************************************************
public function Chart_Base1( fieldName:String , serieFieldNames:Array )
{
super( );
_fieldName = fieldName;
_serieFieldNames = serieFieldNames;
}


//***************************************************************************************
//      流程函数
//***************************************************************************************
override protected function s2_setDefualt():void
{
super.s2_setDefualt();
_rendererClassName = "Chart_Base_R" ;


override protected function s61_resetPartsToRenderer():void 
{
this._renderer.s1_setPartsReference(this , _contentObj , _titlesX , _titlesY);   
}

//***************************************************************************************
//      功能函数
//***************************************************************************************
protected function calculateMinMaxReal():void
{
if(_dataProvider==null) return ;

var data:XMLList = _dataProvider.child(_fieldName);
var len:int = data.length() ;
if(len==0) return ;

var flg:Boolean = true ;
var temp:XML ;
var num:Number ;

//获取minReal/maxReal的初值
temp = data[0];
for each( name in _serieFieldNames)
{
num = temp.child(name) ;
if(flg)
{
_minReal = _maxReal = num ;
flg = false ;
continue ;
}

if(num > _maxReal)
{
_maxReal = num ;
continue ;
}
if(num <_minReal)
{
_minReal = num ;
}

}

//获取minReal/maxReal的值
for(var i:int=1 ; i<len ; i++)
{
temp = data[i];

for each( name in _serieFieldNames)
{
num = temp.child(name) ;

if(num > _maxReal)
{
_maxReal = num ;
continue ;
}
if(num <_minReal)
{
_minReal = num ;
}

}
}
}


protected function calculateTick( malIntervalCount:int):void
{
//【1】计算Y轴
//计算增量
var delta:Number = _maxReal - _minReal;
//计算数量级,并降低2个数量级
var exp:int = (int)(Math.log(delta)/Math.log(10.0))-2;
//计算乘法因子
var multiplier:Number = Math.pow(10, exp);
//定义枚举
var solutions:Array = [1, 2, 2.5, 5, 10, 20, 25, 50, 100, 200, 250, 500] ;
var len:int = solutions.length ;
var multiCal:Number
var i:int;
//试算,获得需要的枚举
for(i=0; i<len; i++)
{
multiCal = multiplier * solutions[i];
if(((int)(delta/multiCal) + 1)<=malIntervalCount)
{
break;
}
}
//计算数字间隔
intervalValueY = multiplier * solutions[i];
//计算坐标轴最小刻度值
_minTick = (int)(Math.ceil(_minReal/intervalValueY) - 1) * intervalValueY;
//计算坐标轴最大刻度值
for(i=0; 1; i++)
{
if(_minTick+intervalValueY*i>_maxReal)
{
_maxTick = _minTick+intervalValueY*i;
//保存间隔数
intervalCountY = i ;
break;
}
}

}

protected function createTickObj():void
{
var i:int ;
var label:Label_H ;
//【1】生成Y轴刻度对象
for (i=0; i<=intervalCountY; i++)
{
label = new Label_H();
label.text = (_minTick+intervalValueY*i).toString();
_titlesY.push(label) ;
}
//【2】生成X轴刻度对象
// var data:XMLList = _dataProvider.child(_fieldName);
// var len:int = data.length() ;
//
// for (i=0; i<len; i++)
// {
// label = new Label_H();
// label.text = data[i].@title;
// _titlesX.push(label) ;
// }
//
// intervalCountX = i + 1 ;


}

//***************************************************************************************
//      发送事件函数
//***************************************************************************************


//***************************************************************************************
//      渲染器对象调用的函数(本类内部也可以调用)
//***************************************************************************************
myInternal function calculateIntervalAndCreateTicks( malIntervalCount:int):void
{
if( malIntervalCount<1 ) return;

//计算最大最小数值
calculateMinMaxReal();
//计算刻度
calculateTick(malIntervalCount);
//生成刻度
createTickObj();
}


//***************************************************************************************
//      属性函数
//***************************************************************************************

public function get dataProvider():XML
{
return _dataProvider;
}
public function set dataProvider(value:XML):void
{
_dataProvider = value;            
layoutChanged = true;
}

}
}
0 0