본문 바로가기

.NET/WPF 2D

WPF 2D Object Matrix Transforms

반응형












<Grid Width="950" Height="1025" 
    HorizontalAlignment="Left" 
    VerticalAlignment="Top">
<Grid.ColumnDefinitions>
	<ColumnDefinition Width="150"/>
	<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Width="140" Height="300" Margin="5,10,5,5">
	<Grid.ColumnDefinitions>
		<ColumnDefinition Width="60"/>
		<ColumnDefinition Width="70"/>
	</Grid.ColumnDefinitions>
	<Grid.RowDefinitions>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
	</Grid.RowDefinitions>
 
	<TextBlock HorizontalAlignment="Right" 
                Grid.Column="0" Grid.Row="0"  
                Margin="5,5,10,5">M11</TextBlock>
	<Slider Name="tbM11" Grid.Column="1"   Grid.Row="0" Minimum="-10" Maximum="10" 
				Value="1" ValueChanged="tbM12_ValueChanged" 
                ></Slider>
	<TextBlock HorizontalAlignment="Right" 
                Grid.Column="0" Grid.Row="1"  
                Margin="5,5,10,5">M12</TextBlock>
	<Slider Name="tbM12" Grid.Column="1" Minimum="-10" Maximum="10" Value="0"
                Grid.Row="1"  ValueChanged="tbM12_ValueChanged"></Slider>
	<TextBlock HorizontalAlignment="Right" 
                Grid.Column="0" Grid.Row="2"  
                Margin="5,5,10,5">M21</TextBlock>
	<Slider Name="tbM21" Grid.Column="1"  Minimum="-10" Maximum="10" Value="0"
                Grid.Row="2"  ValueChanged="tbM12_ValueChanged"></Slider>
	<TextBlock HorizontalAlignment="Right"  
                Grid.Column="0" Grid.Row="3"  
                Margin="5,5,10,5">M22</TextBlock>
	<Slider Name="tbM22" Grid.Column="1" Minimum="-10" Maximum="10" Value="1"
                Grid.Row="3"  ValueChanged="tbM12_ValueChanged"></Slider>
	<TextBlock HorizontalAlignment="Right"  
                Grid.Column="0" Grid.Row="4" 
                Margin="5,5,10,5">OffsetX</TextBlock>
	<Slider Name="tbOffsetX" Grid.Column="1" Minimum="-1000" Maximum="1000" Value="0"
                Grid.Row="4"  ValueChanged="tbM12_ValueChanged"></Slider>
	<TextBlock HorizontalAlignment="Right" 
                Grid.Column="0" Grid.Row="5"  
                Margin="5,5,10,5"> 
                OffsetY</TextBlock>
	<Slider Name="tbOffsetY" Grid.Column="1" Minimum="-1000" Maximum="1000"
                Grid.Row="5"  Value="0"  ValueChanged="tbM12_ValueChanged"
                ></Slider>
	<Button Click="BtnApply_Click" 
            Margin="15,20,15,5" Grid.Row="6" 
            Height="25" Grid.ColumnSpan="2"  
            Grid.Column="0">Apply</Button>
	<Button Click="BtnClose_Click"  
            Margin="15,0,15,5" Grid.Row="7" 
            Height="25" Grid.ColumnSpan="2" 
            Grid.Column="0">init</Button>
</Grid>
 
<Border Margin="10" Grid.Column="1" 
        BorderBrush="Black"  
        BorderThickness="1"  
        HorizontalAlignment="Left" Background="PowderBlue">
	<Canvas Name="canvas1" Grid.Column="1" 
            ClipToBounds="True" Width="770" 
            Height="980">
		<TextBlock Canvas.Top="53" 
                    Canvas.Left="90"> 
                    Original shape</TextBlock>
		<Rectangle Canvas.Top="70" 
                    Canvas.Left="100"  
                    Width="50" Height="70"  
                    Stroke="Black"  
                    StrokeThickness="2" 
                    StrokeDashArray="3,1"/>
		<Rectangle Name="rect" Canvas.Top="70" 
                    Canvas.Left="100" 
                    Width="50" Height="70" 
                    Fill="LightCoral" Opacity="0.5" 
                    Stroke="Black" 
                    StrokeThickness="2">
			<Rectangle.RenderTransform>
				<MatrixTransform x:Name="matrixTransform"/>
			</Rectangle.RenderTransform>
		</Rectangle>
	</Canvas>
</Border>
</Grid>



private void BtnApply_Click(object senderRoutedEventArgs e) {     GetValue(); } private void GetValue() {     if (matrixTransform != null)     {         Matrix m = new Matrix();         m.M11 = tbM11 != null ? tbM11.Value : 0;         m.M12 = tbM12 != null ? tbM12.Value : 0;         m.M21 = tbM21 != null ? tbM21.Value : 0;         m.M22 = tbM22 != null ? tbM22.Value : 0;         m.OffsetX = tbOffsetX != null ? tbOffsetX.Value : 0;         m.OffsetY = tbOffsetY != null ? tbOffsetY.Value : 0;         matrixTransform.Matrix = m;     } } private void BtnClose_Click(object senderRoutedEventArgs e) {     Matrix m = new Matrix();     m.M11 = 1;     m.M12 = 0;     m.M21 = 0;     m.M22 = 1;     m.OffsetX = 0;     m.OffsetY = 0;     matrixTransform.Matrix = m; } private void tbM12_ValueChanged(object sender,                                                                 RoutedPropertyChangedEventArgs<double> e) {     GetValue(); }


 







reference : Practical WPF Graphics Programming



'.NET > WPF 2D' 카테고리의 다른 글