ひき続き、WPF/IronPythonで、Gestalt advanced Tile(Transformations Pack)サンプルを実行する。
Gestalt ⇒ samples ⇒ Transformations Pack ⇒ view 2
http://www.visitmix.com/labs/gestalt/samples/
ImageBrush の変換に少し苦労しました。
WPFとSilverlightの違いがわかった。
Silverlightは、ほぼ WPFのサブセットだ。
ぜひ、実行してみてください、ダイナッミクに画面が変わる、おもしろいプログラムです。
Gestalt ⇒ samples ⇒ Transformations Pack ⇒ view 2
http://www.visitmix.com/labs/gestalt/samples/
ImageBrush の変換に少し苦労しました。
WPFとSilverlightの違いがわかった。
Silverlightは、ほぼ WPFのサブセットだ。
ぜひ、実行してみてください、ダイナッミクに画面が変わる、おもしろいプログラムです。
#
# advanced.tile.py
# from:transform.advanced.python.html
#
import clr
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("PresentationCore")
clr.AddReference('WindowsBase') # for Point, Rect
from System import Convert, Math, Uri
from System.Windows import Window, Application, Rect, Point, Visibility
from System.Windows.Markup import XamlReader
from System.Windows.Controls import Canvas, UserControl
from System.Windows.Media import( ImageBrush, TranslateTransform, AlignmentX, AlignmentY, Stretch,
CompositionTarget, Brushes, ScaleTransform, RotateTransform, TransformGroup )
from System.Windows.Media.Imaging import BitmapImage
from System.Windows.Shapes import Rectangle
class Tile(Canvas):
def __init__(self):
self.targetAngle = 0
layoutRoot = Canvas()
self.Children.Add(layoutRoot)
#self.bkgBrushPosition = TranslateTransform()
#self.bkgBrushPosition = Point(0, 0)
#self.bkgBrushPosition.X = 0
#self.bkgBrushPosition.Y = 0
self.bkgBrush = ImageBrush(
ImageSource = BitmapImage(Uri("http://softgarden.lovepop.jp/myBlog/image/pic3.png")))
self.bkgBrush.AlignmentX = AlignmentX.Left
self.bkgBrush.AlignmentY = AlignmentY.Top
self.bkgBrush.Stretch = Stretch.None
#self.bkgBrush.Transform = self.bkgBrushPosition
#self.bkgBrush.Viewport = Rect(0,0,1.0,1.0) # New
self.bkg = Rectangle()
self.bkg.Width = 30
self.bkg.Height = 30
self.bkg.Fill = self.bkgBrush
self.bkg.RenderTransformOrigin = Point (0.45,0.45)
layoutRoot.Children.Add(self.bkg)
self.scale = ScaleTransform()
self.scale.ScaleX = 1.0
self.scale.ScaleY = 1.0
self.rotation = RotateTransform()
self.rotation.Angle = 0
transformGroup = TransformGroup()
transformGroup.Children.Add(self.scale)
transformGroup.Children.Add(self.rotation)
self.bkg.RenderTransform = transformGroup
CompositionTarget.Rendering += self.compositionTarget_Rendering
def compositionTarget_Rendering(self, sender, e):
self.rotation.Angle = self.rotation.Angle + ( self.targetAngle - self.rotation.Angle) * .13
def SetBkgBrushXY(self, x, y):
self.bkgBrush.Viewbox = Rect(x/640.0, y/400.0, 0, 0) # New
def SetX(self, value):
self.SetValue(Canvas.LeftProperty, Convert.ToDouble(value))
def GetX(self):
return self.GetValue(Canvas.LeftProperty)
X = property(GetX, SetX)
def SetY(self, value):
self.SetValue(Canvas.TopProperty, Convert.ToDouble(value))
def GetY(self):
return self.GetValue(Canvas.TopProperty)
Y = property(GetY, SetY)
class TileWindow(Window):
def __init__(self):
self.Title = "advanced.tile.py" #"Advanced Python Transforms"
self.Width = 600
self.Height= 350
self.Background = Brushes.Black
xaml_str="""
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:xaml="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="600" Height="300">
<Canvas x:Name="LayoutRoot" Background="#222222">
<Canvas x:Name="tiles"></Canvas>
<Image x:Name="cover"
Source="http://softgarden.lovepop.jp/myBlog/image/cover.png"
Width="600" Height="330" Stretch="Fill" Visibility="Collapsed">
</Image>
</Canvas>
</UserControl>"""
userControl = XamlReader.Parse(xaml_str)
self.layoutRoot = userControl.FindName("LayoutRoot")
self.tiles = userControl.FindName("tiles")
self.cover = userControl.FindName("cover")
self.Content = userControl
for x in range(0,10):
for y in range(0, 10):
s = Tile()
s.X = 160 + (x * 25)
s.Y = 25 + (y * 25)
#s.bkgBrushPosition.X = -s.X - 45;
#s.bkgBrushPosition.Y = -s.Y - 30;
s.SetBkgBrushXY(s.X + 40 , s.Y + 25 ) # New
self.tiles.Children.Add(s)
self.mouse = Point(0, 0)
self.layoutRoot.MouseMove += self.LayoutRoot_MouseMove
self.cover.Visibility = Visibility.Visible
CompositionTarget.Rendering += self.compositionTarget_Rendering
def LayoutRoot_MouseMove(self,sender, e):
self.mouse = e.GetPosition(self.layoutRoot)
def compositionTarget_Rendering(self, sender, e):
for s in self.tiles.Children:
_y = s.Y - self.mouse.Y
_x = s.X - self.mouse.X
distance = Math.Sqrt((_y * _y) + (_x * _x))
rad = Math.Atan2(_y, _x)
angle = rad * (180 / Math.PI)
newScale = .3 + ((distance / 100.0));
if newScale > 1.2:
newScale = 1.2
s.scale.ScaleX = s.scale.ScaleY = newScale
if distance < 100:
s.targetAngle = angle - 180
else:
s.targetAngle = 0
if __name__ == "__main__":
win = TileWindow()
Application().Run(win)
# advanced.tile.py
# from:transform.advanced.python.html
#
import clr
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("PresentationCore")
clr.AddReference('WindowsBase') # for Point, Rect
from System import Convert, Math, Uri
from System.Windows import Window, Application, Rect, Point, Visibility
from System.Windows.Markup import XamlReader
from System.Windows.Controls import Canvas, UserControl
from System.Windows.Media import( ImageBrush, TranslateTransform, AlignmentX, AlignmentY, Stretch,
CompositionTarget, Brushes, ScaleTransform, RotateTransform, TransformGroup )
from System.Windows.Media.Imaging import BitmapImage
from System.Windows.Shapes import Rectangle
class Tile(Canvas):
def __init__(self):
self.targetAngle = 0
layoutRoot = Canvas()
self.Children.Add(layoutRoot)
#self.bkgBrushPosition = TranslateTransform()
#self.bkgBrushPosition = Point(0, 0)
#self.bkgBrushPosition.X = 0
#self.bkgBrushPosition.Y = 0
self.bkgBrush = ImageBrush(
ImageSource = BitmapImage(Uri("http://softgarden.lovepop.jp/myBlog/image/pic3.png")))
self.bkgBrush.AlignmentX = AlignmentX.Left
self.bkgBrush.AlignmentY = AlignmentY.Top
self.bkgBrush.Stretch = Stretch.None
#self.bkgBrush.Transform = self.bkgBrushPosition
#self.bkgBrush.Viewport = Rect(0,0,1.0,1.0) # New
self.bkg = Rectangle()
self.bkg.Width = 30
self.bkg.Height = 30
self.bkg.Fill = self.bkgBrush
self.bkg.RenderTransformOrigin = Point (0.45,0.45)
layoutRoot.Children.Add(self.bkg)
self.scale = ScaleTransform()
self.scale.ScaleX = 1.0
self.scale.ScaleY = 1.0
self.rotation = RotateTransform()
self.rotation.Angle = 0
transformGroup = TransformGroup()
transformGroup.Children.Add(self.scale)
transformGroup.Children.Add(self.rotation)
self.bkg.RenderTransform = transformGroup
CompositionTarget.Rendering += self.compositionTarget_Rendering
def compositionTarget_Rendering(self, sender, e):
self.rotation.Angle = self.rotation.Angle + ( self.targetAngle - self.rotation.Angle) * .13
def SetBkgBrushXY(self, x, y):
self.bkgBrush.Viewbox = Rect(x/640.0, y/400.0, 0, 0) # New
def SetX(self, value):
self.SetValue(Canvas.LeftProperty, Convert.ToDouble(value))
def GetX(self):
return self.GetValue(Canvas.LeftProperty)
X = property(GetX, SetX)
def SetY(self, value):
self.SetValue(Canvas.TopProperty, Convert.ToDouble(value))
def GetY(self):
return self.GetValue(Canvas.TopProperty)
Y = property(GetY, SetY)
class TileWindow(Window):
def __init__(self):
self.Title = "advanced.tile.py" #"Advanced Python Transforms"
self.Width = 600
self.Height= 350
self.Background = Brushes.Black
xaml_str="""
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:xaml="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="600" Height="300">
<Canvas x:Name="LayoutRoot" Background="#222222">
<Canvas x:Name="tiles"></Canvas>
<Image x:Name="cover"
Source="http://softgarden.lovepop.jp/myBlog/image/cover.png"
Width="600" Height="330" Stretch="Fill" Visibility="Collapsed">
</Image>
</Canvas>
</UserControl>"""
userControl = XamlReader.Parse(xaml_str)
self.layoutRoot = userControl.FindName("LayoutRoot")
self.tiles = userControl.FindName("tiles")
self.cover = userControl.FindName("cover")
self.Content = userControl
for x in range(0,10):
for y in range(0, 10):
s = Tile()
s.X = 160 + (x * 25)
s.Y = 25 + (y * 25)
#s.bkgBrushPosition.X = -s.X - 45;
#s.bkgBrushPosition.Y = -s.Y - 30;
s.SetBkgBrushXY(s.X + 40 , s.Y + 25 ) # New
self.tiles.Children.Add(s)
self.mouse = Point(0, 0)
self.layoutRoot.MouseMove += self.LayoutRoot_MouseMove
self.cover.Visibility = Visibility.Visible
CompositionTarget.Rendering += self.compositionTarget_Rendering
def LayoutRoot_MouseMove(self,sender, e):
self.mouse = e.GetPosition(self.layoutRoot)
def compositionTarget_Rendering(self, sender, e):
for s in self.tiles.Children:
_y = s.Y - self.mouse.Y
_x = s.X - self.mouse.X
distance = Math.Sqrt((_y * _y) + (_x * _x))
rad = Math.Atan2(_y, _x)
angle = rad * (180 / Math.PI)
newScale = .3 + ((distance / 100.0));
if newScale > 1.2:
newScale = 1.2
s.scale.ScaleX = s.scale.ScaleY = newScale
if distance < 100:
s.targetAngle = angle - 180
else:
s.targetAngle = 0
if __name__ == "__main__":
win = TileWindow()
Application().Run(win)
![]() | IronPythonの世界 (Windows Script Programming) |
荒井 省三 | |
ソフトバンク クリエイティブ |
![]() | エキスパートPythonプログラミング |
Tarek Ziade | |
アスキー・メディアワークス |
![]() | Pythonスタートブック |
辻 真吾 | |
技術評論社 |
※コメント投稿者のブログIDはブログ作成者のみに通知されます