
<script><![CDATA[
aglScaleLoopList = new Array();

function aglScaleLoop()
{
	var	runLoop = false;
	var curTicks = (new Date()).getTime();
	
	for (var i=0;i<aglScaleLoopList.length;i++)
		{
		var entry = aglScaleLoopList[i];
		if (entry)	
			{
			if (entry.start + entry.duration > curTicks)
				{
				runLoop = true;
				var f = (curTicks - entry.start)/(1.0 * entry.duration);
				entry.cScaleX = entry.fScaleX * (1-f) + entry.scaleX * f;
				entry.cScaleY = entry.fScaleY * (1-f) + entry.scaleY * f;
				
				entry.factor = f;
				
				var invMx = entry.mx.inverse();
				var cMX = entry.mx.multiply(invMx);
				cMX = cMX.translate(-entry.offsetX, -entry.offsetY);
				cMX = cMX.scaleNonUniform(entry.cScaleX, entry.cScaleY);
				cMX = cMX.translate(entry.offsetX, entry.offsetY);
				var mx = entry.mx.multiply(cMX);
				
				var str = "matrix(" + mx.a + "," + mx.b + "," + mx.c + "," + mx.d + "," + mx.e + "," + mx.f + ")";
				entry.shape.setAttribute("transform", str);
				}
			}
		}
		
	if (runLoop)
		setTimeout("aglScaleLoop()", 1);
}

function aglScale(action)
{
	var shape = document.getElementById(action[1]);
	var oldEntry;
	var	entryExists = false;
	
	for (var i=0;i<aglScaleLoopList.length;i++)
		{
		var oldEntry = aglScaleLoopList[i];
		if (oldEntry && oldEntry.shape == shape)	
			{
			entryExists = true;
			break;
			}
		}
	
	if (entryExists)
		{
		oldEntry.scaleX = action[2];
		oldEntry.scaleY = action[3];
		oldEntry.offsetX = action[4];
		oldEntry.offsetY = action[5];
		oldEntry.duration = action[6] * oldEntry.factor;
		oldEntry.start = (new Date()).getTime();
		oldEntry.fScaleX = oldEntry.cScaleX;
		oldEntry.fScaleY = oldEntry.cScaleY;
		oldEntry.cScaleX = 1;
		oldEntry.cScaleY = 1;
		oldEntry.factor = 0;
		if (oldEntry.duration == 0)
			oldEntry.duration = 10;
		}
	else
		{
		var entry = new Object;
	
		entry.shape = shape;
		entry.scaleX = action[2];
		entry.scaleY = action[3];
		entry.offsetX = action[4];
		entry.offsetY = action[5];
		entry.duration = action[6];
		entry.fScaleX = 1;
		entry.fScaleY = 1;
		entry.cScaleX = 1;
		entry.cScaleY = 1;
		entry.factor = 0;
		entry.start = (new Date()).getTime();
		entry.mx = entry.shape.getCTM();
		
		aglScaleLoopList[aglScaleLoopList.length] = entry;
		}
		
	aglScaleLoop();
}
]]></script>

<svgaction name="aglScale" uiname="缩放形状">
	<svgactionparam name="形状" type="shape" value="none">
	<svgactionparam name="X 轴坐标" type="float" value="1">
	<svgactionparam name="Y 轴坐标" type="float" value="1">
	<svgactionparam name="位移 X" type="float" value="0">
	<svgactionparam name="位移 Y" type="float" value="0">
	<svgactionparam name="持续时间" type="long" value="500">
</svgaction>