static int setMatrix(int L) { if (!LuaCommon.CheckAndShowArgsError(L, LConst.Table)) { return(0); } Object tag = (Object)Lua.Lua_touserdata(L, 1); bool isTable = Lua.Lua_istable(L, -1); if (isTable && tag != null) { var fe = LuaTransition.GetRYTControlView(tag); CompositeTransform tranF = fe.RenderTransform as CompositeTransform; if (tranF == null) { fe.RenderTransform = tranF = new CompositeTransform(); } tranF.CenterX = fe.Width / 2; tranF.CenterY = fe.Height / 2; Matrix mValue = new Matrix(); Dictionary <String, String> dic = new Dictionary <string, string>(); Lua.Lua_pushnil(L); while (Lua.Lua_next(L, -2) != 0) { String value = Lua.Lua_tostring(L, -1).ToString(); String key = Lua.Lua_tostring(L, -2).ToString(); dic[key] = value; Lua.Lua_pop(L, 1); if (key.Equals("m11", StringComparison.CurrentCultureIgnoreCase)) { mValue.M11 = double.Parse(value); tranF.ScaleX = mValue.M11; } else if (key.Equals("m12", StringComparison.CurrentCultureIgnoreCase)) { mValue.M12 = double.Parse(value); tranF.SkewY = LuaManager.ConvertDegreesToRadians(Math.Atan(mValue.M12)); } else if (key.Equals("m21", StringComparison.CurrentCultureIgnoreCase)) { mValue.M21 = double.Parse(value); tranF.SkewX = LuaManager.ConvertDegreesToRadians(Math.Atan(mValue.M21)); } else if (key.Equals("m22", StringComparison.CurrentCultureIgnoreCase)) { mValue.M22 = double.Parse(value); tranF.ScaleY = mValue.M22; } else if (key.Equals("m31", StringComparison.CurrentCultureIgnoreCase)) { mValue.OffsetX = double.Parse(value); tranF.TranslateX = mValue.OffsetX * LuaManager.WidthScale; } else if (key.Equals("m32", StringComparison.CurrentCultureIgnoreCase)) { mValue.OffsetY = double.Parse(value); tranF.TranslateY = mValue.OffsetY * LuaManager.HeightScale; } } MethodInfo methods = tag.GetType().GetMethod("SetMatrix"); methods.Invoke(tag, new object[] { mValue }); } return(0); }