<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.silverlight.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Programming with .NET - General</title><link>http://forums.silverlight.net/forums/17.aspx</link><description>General discussions around authoring Silverlight .NET applications.</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>Re: Re: Re: 3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/7209.aspx</link><pubDate>Wed, 11 Jul 2007 06:49:23 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:7209</guid><dc:creator>Jubber</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/7209.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=7209</wfw:commentRss><description>&lt;p&gt;Hey Mark,&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve been playing around with the cube here and there, but given that I&amp;#39;m not python guru, I decided to convert it to C#.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s not the most elegant of code, but hey, I&amp;#39;m just playing.&amp;nbsp; I&amp;#39;ve got a control now on each side of the cube and when clicked on, it plays a video.&lt;/p&gt;
&lt;p&gt;Here is&amp;nbsp;link to the &lt;a class="" title="example" href="http://jandim.customer.netspace.net.au/SL/TestPage.html"&gt;example&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;and here&amp;#39;s the &lt;a class="" title="link to the source code zip" href="http://jandim.customer.netspace.net.au/SL/Download/CubeTest.zip"&gt;link to the source zip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks for sharing your python code. This has been quite fun actually.&lt;/p&gt;
&lt;p&gt;I also talk a little about it in my blog - &lt;a class="" title="VTonMS" href="http://vtonms.blogspot.com/"&gt;VTonMS&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Re: Re: 3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/6744.aspx</link><pubDate>Wed, 04 Jul 2007 08:40:31 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:6744</guid><dc:creator>mrtrombone</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/6744.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=6744</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;Good to know thanks Vadim. It would be quite interesting to extend the example and put things like buttons on the different canvases &lt;/p&gt;&lt;p&gt;Also would be good to figure the math for a click so you could determine which photo was clicked on.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Re: 3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/6734.aspx</link><pubDate>Wed, 04 Jul 2007 04:01:58 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:6734</guid><dc:creator>Jubber</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/6734.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=6734</wfw:commentRss><description>&lt;p&gt;Hey Mark,&lt;/p&gt;
&lt;p&gt;great example of what&amp;#39;s possible with Silverlight.&lt;/p&gt;
&lt;p&gt;I did find that the anything you draw on the side of the cube, is drawn backwards.&amp;nbsp; I&amp;#39;m still trying to decypher the code.&amp;nbsp; Have to think back to highschool and Matrix calculations&lt;/p&gt;
&lt;p&gt;I found that if you update that &amp;#39;canvasPointTransform&amp;#39; method, and replace :&lt;/p&gt;&lt;font size="2"&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.OffsetX = b[&amp;#39;x&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.OffsetY = b[&amp;#39;y&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M11 = (a[&amp;#39;x&amp;#39;] - b[&amp;#39;x&amp;#39;]) / photo.Width&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M12 = (a[&amp;#39;y&amp;#39;] - b[&amp;#39;y&amp;#39;]) / photo.Width&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;WITH&lt;/p&gt;&lt;font size="2"&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.OffsetX = a[&amp;#39;x&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.OffsetY = a[&amp;#39;y&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M11 = (b[&amp;#39;x&amp;#39;] - a[&amp;#39;x&amp;#39;]) / photo.Width&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M12 = (b[&amp;#39;y&amp;#39;] - a[&amp;#39;y&amp;#39;]) / photo.Width&lt;/p&gt;
&lt;p&gt;you will get the canvas of each photo drawn the corrent way.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Thanks for sharing this.&lt;/p&gt;
&lt;p&gt;Vadim&lt;/p&gt;</description></item><item><title>Re: 3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/6699.aspx</link><pubDate>Tue, 03 Jul 2007 17:44:00 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:6699</guid><dc:creator>heuertk</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/6699.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=6699</wfw:commentRss><description>&lt;p&gt;posted here: &lt;a href="http://timheuer.com/blog/archive/2007/07/03/14127.aspx"&gt;http://timheuer.com/blog/archive/2007/07/03/14127.aspx&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Re: 3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/6596.aspx</link><pubDate>Mon, 02 Jul 2007 20:38:04 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:6596</guid><dc:creator>heuertk</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/6596.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=6596</wfw:commentRss><description>&lt;p&gt;yeah, send me the files, i&amp;#39;ll put it up...&lt;/p&gt;</description></item><item><title>Re: 3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/6594.aspx</link><pubDate>Mon, 02 Jul 2007 20:14:41 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:6594</guid><dc:creator>mrtrombone</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/6594.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=6594</wfw:commentRss><description>&lt;p&gt;No I&amp;#39;m afraid not. If someone else wants to host it I can email the files.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Re: 3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/6577.aspx</link><pubDate>Mon, 02 Jul 2007 17:20:45 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:6577</guid><dc:creator>heuertk</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/6577.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=6577</wfw:commentRss><description>&lt;p&gt;do you have a site where this is working so we can see it in action?&lt;/p&gt;</description></item><item><title>3d Rotating Picture Cube in Iron Python (lots of code)</title><link>http://forums.silverlight.net/forums/thread/6542.aspx</link><pubDate>Mon, 02 Jul 2007 08:23:21 GMT</pubDate><guid isPermaLink="false">d0d632c8-a6f7-4f68-b0ce-26aaafd62132:6542</guid><dc:creator>mrtrombone</dc:creator><slash:comments>0</slash:comments><comments>http://forums.silverlight.net/forums/thread/6542.aspx</comments><wfw:commentRss>http://forums.silverlight.net/forums/commentrss.aspx?SectionID=17&amp;PostID=6542</wfw:commentRss><description>&lt;p&gt;Hi all. I can&amp;#39;t be bothered blogging so thought I would share this with anyone who is interested. It is the source for a rotating picture cube, similar to the Telerik control - although I haven&amp;#39;t turned it into a control (this shouldn&amp;#39;t be hard) or handled clicks yet (this might be). The images are stored in an images folder in the root directory. I used photos from the photoviewer example and cropped them square. The pictures array contains the image names.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This is my first real experimentation with IronPython and I must tell you that it is really very nice and succinct to develop with compared to C#. Also much faster since don&amp;#39;t need to compile. I have just been developing from notepad.&lt;/p&gt;&lt;p&gt;The brains behind the code actually comes from the following flash tutorial so full props to them. I encourage other users to get busy converting interesting flash examples across to Silverlight so the community can learn: &lt;/p&gt;&lt;p&gt;&lt;u&gt;http://www.senocular.com/flash/tutorials/transformmatrix/&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;Anyway I hope someone finds this useful&lt;/p&gt;&lt;p&gt;&amp;nbsp;Cheers&lt;/p&gt;&lt;p&gt;Mark&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;XAML CODE&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;Canvas&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Width=&amp;quot;1000&amp;quot; Height=&amp;quot;800&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x:Name=&amp;quot;Root&amp;quot;&lt;br /&gt;&amp;nbsp; Background=&amp;quot;#FF000000&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;x:Code Source=&amp;quot;Code.py&amp;quot; Type=&amp;quot;text/python&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Canvas Loaded=&amp;quot;Loaded&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Canvas.Resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Storyboard x:Name=&amp;quot;timer&amp;quot;&amp;gt;&amp;lt;DoubleAnimation Duration=&amp;quot;00:00:0.02&amp;quot; /&amp;gt;&amp;lt;/Storyboard&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Canvas.Resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Canvas x:Name=&amp;quot;Inner&amp;quot; Width=&amp;quot;300&amp;quot; Height=&amp;quot;300&amp;quot; Canvas.Top=&amp;quot;200&amp;quot; Canvas.Left=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Rectangle x:Name=&amp;quot;rec&amp;quot; Width=&amp;quot;30&amp;quot; Height=&amp;quot;30&amp;quot; Fill=&amp;quot;Blue&amp;quot; Opacity=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/Canvas&amp;gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;Python Code&lt;/b&gt;&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;import clr&lt;br /&gt;&lt;br /&gt;import System&lt;br /&gt;from System.Windows.Controls import *&lt;br /&gt;from System.Windows.Media import *&lt;br /&gt;from System.Windows import *&lt;br /&gt;from System.Windows.Shapes import *&lt;br /&gt;from System.Windows.Media.Animation import *&lt;br /&gt;from System.Math import *&lt;br /&gt;&lt;br /&gt;pictures = [&amp;#39;sqjaguar&amp;#39;, &amp;#39;sqgorilla&amp;#39;, &amp;#39;sqgyr&amp;#39;, &amp;#39;sqheron&amp;#39;, &amp;#39;sqeagle&amp;#39;, &amp;#39;sqtamarin&amp;#39;]&lt;br /&gt;rotations = {&amp;#39;x&amp;#39;: 0, &amp;#39;y&amp;#39;: 0, &amp;#39;z&amp;#39;: 0}&lt;br /&gt;boxPoints = [{&amp;#39;x&amp;#39;: -50, &amp;#39;y&amp;#39;: -50, &amp;#39;z&amp;#39;: -50}, {&amp;#39;x&amp;#39;: 50, &amp;#39;y&amp;#39;: 50, &amp;#39;z&amp;#39;: -50}, {&amp;#39;x&amp;#39;: -50, &amp;#39;y&amp;#39;: 50, &amp;#39;z&amp;#39;: -50}, {&amp;#39;x&amp;#39;: -50, &amp;#39;y&amp;#39;: -50, &amp;#39;z&amp;#39;: 50}, {&amp;#39;x&amp;#39;: 50, &amp;#39;y&amp;#39;: -50, &amp;#39;z&amp;#39;: 50}, {&amp;#39;x&amp;#39;: 50, &amp;#39;y&amp;#39;: 50, &amp;#39;z&amp;#39;: 50}]&lt;br /&gt;&lt;br /&gt;curX = 0&lt;br /&gt;curY = 0&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;def pointsTransform(tripoints, rotations):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v10 = Sin(rotations[&amp;#39;x&amp;#39;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v12 = Cos(rotations[&amp;#39;x&amp;#39;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v8 = Sin(rotations[&amp;#39;y&amp;#39;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v11 = Cos(rotations[&amp;#39;y&amp;#39;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v7 = Sin(rotations[&amp;#39;z&amp;#39;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v9 = Cos(rotations[&amp;#39;z&amp;#39;])&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v1 = len(tripoints)-1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v17 = [{&amp;#39;x&amp;#39;: 0, &amp;#39;y&amp;#39;: 0}, {&amp;#39;x&amp;#39;: 0, &amp;#39;y&amp;#39;: 0}, {&amp;#39;x&amp;#39;: 0, &amp;#39;y&amp;#39;: 0}, {&amp;#39;x&amp;#39;: 0, &amp;#39;y&amp;#39;: 0}, {&amp;#39;x&amp;#39;: 0, &amp;#39;y&amp;#39;: 0}, {&amp;#39;x&amp;#39;: 0, &amp;#39;y&amp;#39;: 0}]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (v1&amp;gt;=0):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v16 = tripoints[v1][&amp;#39;x&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v15 = tripoints[v1][&amp;#39;y&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v3 = tripoints[v1][&amp;#39;z&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v5 = v12 * v15 - v10 * v3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v4 = v10 * v15 + v12 * v3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v18 = v11 * v4 - v8 * v16&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v6 = v8 * v4 + v11 * v16&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v14 = v9 * v6 - v7 * v5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v13 = v7 * v6 + v9 * v5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v17[v1] = {&amp;#39;x&amp;#39;: v14, &amp;#39;y&amp;#39;: v13}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v1 -= 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return v17&lt;br /&gt;&lt;br /&gt;def canvasPointTransform(i, a, b, c):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; photo = Root.FindName(&amp;quot;Photo%i&amp;quot; % i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; photo.Opacity = pointsIsVisible(a, b, c)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (photo.Opacity==0):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mt = Root.FindName(&amp;quot;Matrix%i&amp;quot; % i)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix = mt.Matrix&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.OffsetX = b[&amp;#39;x&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.OffsetY = b[&amp;#39;y&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M11 = (a[&amp;#39;x&amp;#39;] - b[&amp;#39;x&amp;#39;]) / photo.Width&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M12 = (a[&amp;#39;y&amp;#39;] - b[&amp;#39;y&amp;#39;]) / photo.Width&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M21 = (c[&amp;#39;x&amp;#39;] - b[&amp;#39;x&amp;#39;]) / photo.Height&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix.M22 = (c[&amp;#39;y&amp;#39;] - b[&amp;#39;y&amp;#39;]) / photo.Height&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mt.Matrix = matrix&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;def pointsIsVisible(a, b, c):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v5 = b[&amp;#39;x&amp;#39;] - a[&amp;#39;x&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (v5==0):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (a[&amp;#39;y&amp;#39;] &amp;gt; b[&amp;#39;y&amp;#39;]) == (c[&amp;#39;x&amp;#39;] &amp;gt; a[&amp;#39;x&amp;#39;])&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v4 = c[&amp;#39;x&amp;#39;] - a[&amp;#39;x&amp;#39;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (v4==0):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (a[&amp;#39;y&amp;#39;] &amp;gt; c[&amp;#39;y&amp;#39;]) == (b[&amp;#39;x&amp;#39;] &amp;lt; a[&amp;#39;x&amp;#39;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (((b[&amp;#39;y&amp;#39;] - a[&amp;#39;y&amp;#39;]) / v5) &amp;lt; ((c[&amp;#39;y&amp;#39;] - a[&amp;#39;y&amp;#39;]) / v4)) != ((a[&amp;#39;x&amp;#39;] &amp;lt; b[&amp;#39;x&amp;#39;]) == (a[&amp;#39;x&amp;#39;] &amp;gt; c[&amp;#39;x&amp;#39;]))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def CreatePhoto(sequence, x, y, path):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = XamlReader.Load(&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Canvas xmlns:x=&amp;#39;http://schemas.microsoft.com/winfx/2006/xaml&amp;#39; x:Name=&amp;#39;Photo%i&amp;#39; Width=&amp;#39;111&amp;#39; Height=&amp;#39;111&amp;#39; Canvas.Left=&amp;#39;%d&amp;#39; Canvas.Top=&amp;#39;%d&amp;#39; Background=&amp;#39;#FFFFFFFF&amp;#39;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Image Width=&amp;#39;111&amp;#39; Height=&amp;#39;111&amp;#39; Canvas.Left=&amp;#39;0&amp;#39; Canvas.Top=&amp;#39;0&amp;#39; Source=&amp;#39;%s&amp;#39; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Canvas.RenderTransform&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;MatrixTransform x:Name=&amp;#39;Matrix%i&amp;#39; Matrix=&amp;quot;1,0,0,1,0,0&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Canvas.RenderTransform&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Canvas&amp;gt;&amp;quot;&amp;quot;&amp;quot; % (sequence,x, y, path,sequence))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inner.Children.Add(t)&lt;br /&gt;&amp;nbsp; &lt;br /&gt;def timer_Completed(sender, e):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rotations[&amp;#39;x&amp;#39;] -= curY / 2000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rotations[&amp;#39;y&amp;#39;] += curX / 2000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v2 = pointsTransform(boxPoints, rotations)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvasPointTransform(0, v2[2], v2[0], v2[3])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvasPointTransform(1, v2[5], v2[1], v2[2])&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvasPointTransform(2, v2[0], v2[2], v2[1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvasPointTransform(3, v2[4], v2[3], v2[0])&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvasPointTransform(4, v2[3], v2[4], v2[5])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvasPointTransform(5, v2[1], v2[5], v2[4])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; except System.Exception, e:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug.TextWrapping = System.Windows.TextWrapping.Wrap&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug.Text = e.ToString()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timer.Begin()&lt;br /&gt;&lt;br /&gt;def mouseMove(sender, e):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global curX&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global curY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pt = e.GetPosition(Inner)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; curX = pt.X&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; curY = pt.Y&lt;br /&gt;&lt;br /&gt;def Loaded(sender, e):&lt;br /&gt;&amp;nbsp; global pictures&lt;br /&gt;&amp;nbsp; global boxPoints&lt;br /&gt;&amp;nbsp; global rotations&lt;br /&gt;&amp;nbsp; elt = System.Windows.XamlReader.Load(&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Canvas xmlns:x=&amp;#39;http://schemas.microsoft.com/winfx/2006/xaml&amp;#39;&amp;nbsp; Canvas.Top=&amp;quot;50&amp;quot; Width=&amp;quot;500&amp;quot; Height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock x:Name=&amp;#39;debug&amp;#39; Foreground=&amp;quot;White&amp;quot; Width=&amp;quot;500&amp;quot; Height=&amp;quot;500&amp;quot; Text=&amp;#39;&amp;#39; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Canvas&amp;gt;&amp;quot;&amp;quot;&amp;quot; ) &lt;br /&gt;&amp;nbsp; Root.Children.Add(elt)&lt;br /&gt;&amp;nbsp; sequence = 0&lt;br /&gt;&amp;nbsp; while sequence &amp;lt; len(pictures):&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CreatePhoto(sequence,0, 0,&amp;quot;images/%s.jpg&amp;quot; % pictures[sequence])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sequence += 1&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; Inner.MouseMove += mouseMove&lt;br /&gt;&amp;nbsp; timer.Completed += timer_Completed&amp;nbsp; &lt;br /&gt;&amp;nbsp; timer.Begin()&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>