ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WPF 2D Object Matrix Transforms
    .NET/WPF 2D 2013. 6. 28. 00:04
    반응형












    <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' 카테고리의 다른 글

    WPF 2D SkewTransform  (0) 2013.07.04
    WPF 2D RotateTransform  (0) 2013.07.04
    WPF 2D TranslateTransform  (0) 2013.07.03
    WPF 2D Scale Transforms  (0) 2013.06.28
    WPF 2D Creating Perpendicular Lines  (0) 2013.06.27
    WPF 2D Transformations Matrix Transforms  (0) 2013.06.27
    WPF Basic 2D Graphics Shapes  (0) 2013.06.19
    WPF 2D 차트에 대한 사용자 정의 좌표  (0) 2013.06.18

    댓글

Designed by Tistory.