亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? zoomablelinechart.as

?? FLASH實現(xiàn)的可根據(jù)圖例個數(shù)自動縮放圖表寬度組件
?? AS
?? 第 1 頁 / 共 2 頁
字號:
?import mx.core.UIComponent;
import mx.utils.Delegate;
import webex.Chart;

[IconFile("LineChart.png")]

class webex.zoomableLineChart extends Chart {
	
	/**
	* @private
	* SymbolName for object
	*/
	static var symbolName:String = "LineChartZoomable";
	
	/**
	* @private
	* Class used in createClassObject
	*/
	//static var symbolOwner:Object = LineChart;
	var className:String = "LineChartZoomable";
	
	var hAxis_mc:MovieClip;
	var vAxis_mc:MovieClip;
	
	// -----------------------------
	var __lines:Array = [];
	var __breakPoints:Array = [];	//the data array to hold the breakpoint's index, so it used to control the drawing method.
	var __startPointXLeftAlign:Boolean = true;
	var boundingBox_mc:MovieClip;
	
	function LineChart()
	{
		
	}
	
	function init():Void
	{
		super.init();
		
		boundingBox_mc._visible = false;
	}
	
	function size():Void
	{
		super.size();
		invalidate();
	}
	
	function createChildren():Void
	{
		this.createEmptyMovieClip("hAxis_mc", this.getNextHighestDepth());
	}
	
	function draw():Void
	{
		drawChart();
	}
	
	// -----------------------------------------------------
	
	function getLabelDims(label:String):Object
	{
		this.createTextField("temp_getwidth", this.getNextHighestDepth(), -1000, -1000, 0, 10);
		var o:TextField = this["temp_getwidth"];
		o.text = label;
		o.autoSize = "center";
		o.selectable = false;
		o.setTextFormat(labelFormat);
		var dims:Object = {width:o._width, height:o._height};
		o.removeTextField();
		return dims;
	}
	
	function drawHAxis():Void
	{
		var layout_lineY:Number = 0;
		var layout_markerLineY:Number = layout_lineY + 1;
		var layout_markerLineH:Number = 7;
		var layout_labelY:Number = layout_markerLineY + layout_markerLineH + 2;
		var layout_labelPad:Number = 3;
		
		if (hAxis_mc != undefined) hAxis_mc.removeMovieClip();
		this.createEmptyObject("hAxis_mc", this.getNextHighestDepth());
		
		var w:Number = width;
		var h:Number = height;
		
		// Create 50px margin on left and right
		hAxis_mc._x = 50;
		w -= 100;
		
		// Draw top line
		drawRoundRect(hAxis_mc, 0, layout_lineY, w, layout_lineY+1, 0, lineColor, 100);
		
		// Prepare to draw markers
		var numMarkers:Number = __hPoints.length;
		var sectionW:Number = w / (numMarkers - 1);
		var sectionMargin:Number = sectionW / 2;
		var maxLabelW:Number = sectionW - layout_labelPad;
		var layoutX:Number = 0; // + sectionMargin;
		
		// Determine if stacking is necessary
		var stackLabels:Boolean = false;
		for (var i:Number=0; i<numMarkers; i++)
		{
			var markerLabel:String = __hPoints[i].label;
			var labelW:Number = getLabelDims(markerLabel).width;
			if (labelW > maxLabelW) {
				stackLabels = true;
				break;
			}
		}
		
		// Create labels/markers
		var layout_labelUpperY:Number = layout_labelY;
		var layout_labelLowerY:Number = layout_labelUpperY + 12;
		var layoutYtoUse:String = "upper";
		
		//define the granularity of the labels, when the point count is too much, then throw some of them per step
		var xLabelStep = Math.ceil(numMarkers/30);
		for (var i:Number=0; i<numMarkers; i++)
		{
			var markerLabel:String = __hPoints[i].label;
			var markerLabelName:String = "label" + i + "_txt";

			// Determine positions
			var lineX:Number = Math.round(layoutX - 0.5);
			var labelX:Number = Math.round(layoutX); 
			__hPoints[i].hAxisX = lineX + 50; // Make up for margin
			
			// Draw line
			drawRoundRect(hAxis_mc, lineX, layout_markerLineY, 1, layout_markerLineH, 0, lineColor, 100);
			
			// Create Label
			if(i % xLabelStep ==0)	{	//mode by xlabelStep, so the label will draw per this step
				//Added by Roland Zhu 2006.8.1
				//todo: make the label upper or lower position when "through" some labels
				// Determine label y
				var labelY:Number = (layoutYtoUse=="upper" ? layout_labelUpperY : layout_labelLowerY);
				if (stackLabels) layoutYtoUse = (layoutYtoUse=="upper" ? "lower" : "upper");
			
				hAxis_mc.createTextField(markerLabelName, hAxis_mc.getNextHighestDepth(), labelX, labelY, 0, 10);
				var o:TextField = hAxis_mc[markerLabelName];
				o.text = markerLabel;
				o.autoSize = "center";
				o.selectable = false;
				o.setTextFormat(labelFormat);
			}
			// Increment layoutX
				layoutX += sectionW;
			
		}
		
		hAxis_mc._y = Math.round(height - hAxis_mc._height) - 5;
		
	}
	
	
	function setBreakPoints(breakPoints:Array):Void{
		__breakPoints = breakPoints;
	}
	
	function set breakPoints(breakPoints:Array):Void{
		setBreakPoints(breakPoints);
	}
	
	function convertLineObj(obj:Object):Array
	{
		// Create reference object
		var referenceObj:Object = {};
		for (var i:Number=0; i<__hPoints.length; i++) {
			var tempItem:Object = __hPoints[i];
			referenceObj[tempItem.id] = i;
		}
		// Create ordered array
		var returnArray:Array = [];
		for (var i:String in obj)
		{
			var tempOrder = referenceObj[i];
			var tempVal:Number = obj[i];
			returnArray[tempOrder] = tempVal;
		}
		return returnArray;
	}
	
	function getExtremeValues():Object
	{
		// Concatenate all arrays
		var comboArray:Array = [];
		for (var i:Number=0; i<__lines.length; i++)
		{
			/*Added by Roland Zhu 2006.9.20 this feature only for the Detail Latency Time 
			 *Remove the null value point from __lines.point to make it can calculate the step and the max,min boundary of y axis
			 */
			var retrievedPoints:Array = [];
			for(var j=0; j< __lines[i].points.length;j++){
				if(__lines[i].points[j] != undefined && !isNaN(__lines[i].points[j])){
					retrievedPoints.push(__lines[i].points[j]);
				}
			}
			//comboArray = comboArray.concat(__lines[i].points);
			comboArray = comboArray.concat(retrievedPoints);
		}
		
		// Sort and return extremes
		var sortArray:Array = comboArray.sort(Array.NUMERIC);
		var minNum:Number = sortArray[0];
		var maxNum:Number = sortArray[sortArray.length - 1];
		var returnObj:Object = {min:minNum, max:maxNum};
		return returnObj;
	}
	
	function getGCF(top:Number, bot:Number):Number
	{
        var gcm:Number = 1;
        // Start with biggest possible and work down
        for (var i:Number=top; i>gcm; i--)
		{
			// If i divides into top and bot with no fraction then it is a factor
			if (top%i == 0 && bot%i == 0)
			{
				//the first time this is set the function is done
				gcm = i;
			}
        }
        return gcm;
	}
	
	function getLCD(num1:Number, num2:Number):Number
	{
        // This number will always work, but its not the best
        var lcd:Number = num1*num2;
        var bigNum:Number = Math.max(num1, num2);
        var smallNum:Number = Math.min(num1, num2);
        // Check all numbers between 2 and smallNum to see if they divide
        for (var i:Number=2; i<smallNum; i++)
		{
			while ((lcd%i) == 0 && ((lcd/i)%bigNum) == 0 && ((lcd/1)%smallNum) == 0) {
				// If no remainder is left, then we can lower the lcd
				lcd /= i;
			}
        }
        return lcd;
	}
	
	function getLeastCommonDividend(num:Number):Number
	{
		// Note: this method is dangerous on big numbers...
		// Note: we skip 1, because that's obvious
		for (var i:Number=2; i<((num/2)+2); i++)
		{
			if (num%i==0) {
				break;
			}
		}
		return i;
	}
	
	function getVAxisBounds():Object
	{
		// Get extremes
		var extremeNums:Object = getExtremeValues();
		var minVal:Number = extremeNums.min;
		var maxVal:Number = extremeNums.max;
		
		// See about zero base
		if (zeroBase && minVal >= 0) {
			minVal = 0;
		}		
		
		// Round nums
		var dif:Number = maxVal - minVal;
		var upperBoundary:Number = maxVal + (dif * 0.1);
		var lowerBoundary:Number = minVal - (dif * 0.1);
		
		// Determine declaredBoundaries
		var midMinVal:Number = minVal;
		var midMaxVal:Number = maxVal;
		
		if (midMaxVal.toString().length > 1)
		{
			var upperBoundaryDividend:Number = Math.pow(10, midMaxVal.toString().length - 1); // / (upperBoundary - midMaxVal);
			var declaredUpperBoundary:Number = Math.ceil(midMaxVal / upperBoundaryDividend) * upperBoundaryDividend;
			if (declaredUpperBoundary > upperBoundary)
			{
				upperBoundaryDividend /= 2;
				declaredUpperBoundary = Math.ceil(midMaxVal / upperBoundaryDividend) * upperBoundaryDividend;
			}
		}
		else
		{
			var declaredUpperBoundary:Number = Math.ceil(midMaxVal / 5) * 5;
		}
		
		if (midMinVal.toString().length > 1)
		{
			var lowerBoundaryDividend:Number = Math.pow(10, midMinVal.toString().length - 1);
			var declaredLowerBoundary:Number = Math.floor(midMinVal / lowerBoundaryDividend) * lowerBoundaryDividend;
			if (declaredLowerBoundary < lowerBoundary)
			{
				lowerBoundaryDividend /= 2;
				declaredLowerBoundary = Math.floor(midMinVal / lowerBoundaryDividend) * lowerBoundaryDividend;
			}
		}
		else
		{
			var declaredLowerBoundary:Number = Math.floor(midMinVal / 5) * 5;
		}
		// trace("upper: " + declaredUpperBoundary + " - lower: " + declaredLowerBoundary + " ------ " + upperBoundaryDividend + " - " + lowerBoundaryDividend);
		
		// Determine section step
		var step:Number = getGCF(declaredLowerBoundary, declaredUpperBoundary);
		// trace("gcf: " + gcf);
		
		// Return vals
		var returnObj:Object = {upperBoundary:declaredUpperBoundary, lowerBoundary:declaredLowerBoundary, step:step};
		
		return returnObj;
	}
	
	function getVAxisStep(h:Number):Object
	{
		var bounds:Object = getVAxisBounds();
		var upperBoundary:Number = bounds.upperBoundary;
		var lowerBoundary:Number = bounds.lowerBoundary;
		var step:Number = bounds.step;
		
		// Determine max steps
		
		var maxSteps:Number = Math.floor(h / 20);
		
		// Determine actual steps
		var numSteps:Number = (upperBoundary - lowerBoundary) / step;
		var lcd:Number;
		while (numSteps > maxSteps)
		{
			lcd = getLeastCommonDividend(numSteps);
			if (lcd==numSteps) break; // Can only divide by itself - this should never happen
			step *= lcd;
			numSteps = (upperBoundary - lowerBoundary) / step;
		}
		
		// Return val
		var returnObj:Object = {numSteps:numSteps, step:step, upperBoundary:upperBoundary, lowerBoundary:lowerBoundary};
		
		return returnObj;
	}
	
	function drawVAxis():Void
	{
		// Prepare positioning
		var topPadding:Number = 7;
		var h:Number = height - (height - hAxis_mc._y) - topPadding;
		var w:Number = width - 50; // 50px margin on right
		var leftBlockW:Number = 7;
		
		// Get step info
		var stepObj:Object = getVAxisStep(h);
		var numSteps:Number = stepObj.numSteps;
		var step:Number = stepObj.step;
		var upperBoundary:Number = stepObj.upperBoundary;
		var lowerBoundary:Number = stepObj.lowerBoundary;
		// trace("numSteps: " + numSteps + " - step: " + step);
		
		// Create/Recreate mc
		if (vAxis_mc != undefined) vAxis_mc.removeMovieClip();
		this.createEmptyObject("vAxis_mc", this.getNextHighestDepth());
		
		/*Added by Roland Zhu 2006.8.3
		 *Draw the title of y axis
		 */
		 vAxis_mc.createTextField("vTitle_Txt",vAxis_mc.getNextHighestDepth(),leftBlockW-60,h/2,0,0);
		var vt:TextField = vAxis_mc["vTitle_Txt"];
		vt.embedFonts = true;
		vt.text = __vTitle;
		vt.align = "center";
		vt.setTextFormat(titleFormatBold);
		
		vt._width = vt.textWidth+5;
		vt._height = vt.textHeight +5;
		vt._rotation = -90;
		vt._y = vt._y + vt._height/2;	//make the label align center with the v axis
		
		/*Added by Roland Zhu 2006.8.3
		 *Draw the title of x axis
		 */
		 vAxis_mc.createTextField("hTitle_Txt",vAxis_mc.getNextHighestDepth(),w/2, h+ 40,0,0);
		var ht:TextField = vAxis_mc["hTitle_Txt"];
		ht.embedFonts = true;
		ht.text = __hTitle;
		ht.align = "center";
		ht.setTextFormat(titleFormatBold);
		
		ht._width = ht.textWidth+5;
		ht._height = ht.textHeight +5;
		
		// Draw left block
		drawRoundRect(vAxis_mc, 50-leftBlockW, topPadding + 1, leftBlockW, h-1, 0, lineColor, 100);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久奴性调教| 欧美激情一二三区| 精品久久久久久久久久久久久久久| 欧美一区二区三区免费观看视频| 日韩视频免费观看高清完整版在线观看 | 国产福利不卡视频| 欧美色视频在线| 中文字幕中文在线不卡住| 另类综合日韩欧美亚洲| 欧美色视频在线观看| 亚洲精品视频一区| 不卡的av在线| 日本一二三不卡| 久久超级碰视频| 5858s免费视频成人| 亚洲一区二区三区四区的| 国产传媒日韩欧美成人| 日韩欧美一二三区| 一二三区精品视频| 日韩高清不卡一区| 国产91丝袜在线播放0| 在线不卡一区二区| 亚洲欧美一区二区三区极速播放| 久久99精品国产| 欧美另类高清zo欧美| 国产精品久久午夜| 九九视频精品免费| 制服丝袜在线91| 丝袜美腿亚洲色图| 69久久99精品久久久久婷婷| 一区二区三区日本| av不卡一区二区三区| 成人欧美一区二区三区1314| 日韩精品一二区| 在线免费观看一区| 国产精品久久久久精k8| 国产原创一区二区| 欧美成va人片在线观看| 一区二区在线观看视频| 久久超碰97中文字幕| 91精品综合久久久久久| 亚洲成人一二三| 在线免费观看日韩欧美| 亚洲精品视频免费看| 99亚偷拍自图区亚洲| 国产夜色精品一区二区av| 久久精品国产精品亚洲精品| 欧美日韩在线不卡| 亚洲欧美在线aaa| 成人黄色片在线观看| 久久精品欧美日韩精品| 国产精品乡下勾搭老头1| 精品国精品国产| 国产乱码精品一区二区三区忘忧草| 日韩一级片网址| 免费高清在线一区| 精品久久一区二区三区| 老司机免费视频一区二区 | 色妹子一区二区| 亚洲欧美国产高清| 91福利国产成人精品照片| 亚洲国产精品av| 看片的网站亚洲| 久久影音资源网| 国产精品一区二区三区乱码| 国产日韩v精品一区二区| 风间由美一区二区三区在线观看 | 久久精品一区八戒影视| 99亚偷拍自图区亚洲| 亚洲男人的天堂在线aⅴ视频| 99国产精品99久久久久久| 亚洲女同ⅹxx女同tv| 在线看日本不卡| 麻豆精品一区二区综合av| 国产午夜精品久久久久久免费视 | 国产一区二区在线观看视频| 精品入口麻豆88视频| 国产在线看一区| 国产精品国产三级国产| 欧美中文字幕一区二区三区 | 国产精品羞羞答答xxdd| 亚洲国产激情av| 欧美中文字幕一区二区三区| 蜜桃久久久久久| 亚洲欧洲美洲综合色网| 色哦色哦哦色天天综合| 久久99久久99精品免视看婷婷| 国产精品毛片久久久久久久| 欧美色精品在线视频| 韩国女主播一区二区三区| 亚洲欧美电影一区二区| 精品欧美乱码久久久久久1区2区| 国产一区二区三区精品欧美日韩一区二区三区 | 韩国在线一区二区| 亚洲天堂成人在线观看| 欧美一级国产精品| bt7086福利一区国产| 免费看日韩a级影片| 国产精品初高中害羞小美女文| 色久优优欧美色久优优| 国产在线视频精品一区| 一区二区三区在线播| 欧美大片国产精品| 欧洲激情一区二区| 成人福利视频网站| 无吗不卡中文字幕| 亚洲婷婷国产精品电影人久久| 日韩欧美一级二级| 欧美性做爰猛烈叫床潮| 国产99精品国产| 久久精品国产第一区二区三区| 中文字幕一区二区三区乱码在线| 欧美日韩免费高清一区色橹橹| 成人综合在线网站| 精品一区二区久久久| 香蕉久久夜色精品国产使用方法| 欧美韩日一区二区三区四区| 91精品国产福利| 欧美日韩国产美女| 国产成人亚洲精品青草天美| 美腿丝袜在线亚洲一区| 亚洲一区二区欧美激情| 亚洲精品网站在线观看| 最新中文字幕一区二区三区 | 欧美日韩国产一级| 91无套直看片红桃| 不卡的av中国片| 91美女片黄在线| 亚洲免费观看在线观看| 亚洲午夜一区二区三区| 精品国免费一区二区三区| 国产亚洲精品精华液| 中文字幕在线观看一区二区| 亚洲视频一区二区在线| 一区二区三区加勒比av| 五月激情六月综合| 国产在线一区二区综合免费视频| 久久不见久久见免费视频1| 国产一区二区三区四| 97久久精品人人做人人爽50路| 日本道免费精品一区二区三区| 欧美夫妻性生活| 欧美一区二区三区公司| 欧美极品xxx| √…a在线天堂一区| 亚洲成人av一区| 免费在线看一区| 捆绑紧缚一区二区三区视频| 国产v日产∨综合v精品视频| 国产成人av电影在线| 99久久婷婷国产综合精品| 北岛玲一区二区三区四区| 成人国产精品免费观看视频| 欧美精品1区2区3区| 日韩免费电影网站| 国产日韩欧美a| 亚洲综合一区二区三区| 日本aⅴ免费视频一区二区三区 | 亚洲天堂精品在线观看| 三级欧美在线一区| 国产不卡视频在线观看| 欧美日韩亚洲综合一区二区三区| 国产亚洲综合av| 婷婷夜色潮精品综合在线| 石原莉奈在线亚洲二区| 豆国产96在线|亚洲| 欧美区在线观看| 中文字幕av在线一区二区三区| 视频在线观看91| 99国产精品国产精品久久| 久久综合久久99| 日av在线不卡| 欧美日韩一区二区三区免费看 | 国产精品一区在线观看乱码| 欧美手机在线视频| 国产精品久久午夜| 国产精品一区二区x88av| 欧美精品乱码久久久久久按摩 | 99精品欧美一区二区蜜桃免费 | 国产精品欧美一区喷水| 天天色图综合网| 色综合久久中文综合久久牛| 久久精品视频一区二区三区| 日韩国产精品久久久久久亚洲| 91麻豆国产福利精品| 国产精品系列在线| 国产精品99久久久久久久女警| 日韩一区二区精品葵司在线| 天堂在线亚洲视频| 在线免费观看一区| 亚洲精品亚洲人成人网| 91在线视频观看| 国产精品第一页第二页第三页| 国产成人啪午夜精品网站男同| 日韩你懂的在线观看| 午夜精品久久久久久久久久久| 在线亚洲高清视频| 亚洲一区二区五区| 欧美日韩中文字幕一区| 性做久久久久久免费观看欧美|