ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WPF 2D Creating Perpendicular Lines
    .NET/WPF 2D 2013. 6. 27. 23:11
    반응형







    <Viewbox Stretch="Uniform">
     
    <Grid Width="730" Height="600" 
            HorizontalAlignment="Left" 
            VerticalAlignment="Top">
    	<Grid.ColumnDefinitions>
    		<ColumnDefinition Width="250" />
    		<ColumnDefinition Width="*" />
    	</Grid.ColumnDefinitions>
    	<Grid  Margin="5,10,5,5" >
    		<Grid.ColumnDefinitions>
    			<ColumnDefinition Width="39" />
    			<ColumnDefinition Width="*" />
    		</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" />
    			<RowDefinition Height="Auto" />
    		</Grid.RowDefinitions>
     		<TextBlock HorizontalAlignment="Right" 
                        Grid.Column="0" Grid.Row="0"  
                        Margin="5,5,10,5">X1</TextBlock>
    		<Slider Name="tbX1" Grid.Column="1"  
                        Grid.Row="0"  Value="50" Minimum="-1000" Maximum="1000" 

                        ValueChanged="tbX1_ValueChanged" ></Slider>

    <TextBlock HorizontalAlignment="Right"                       Grid.Column="0" Grid.Row="1"  Margin="5,5,10,5">Y1</TextBlock> <Slider Name="tbY1" Grid.Column="1"                      Grid.Row="1"  Value="200"  Minimum="-1000" Maximum="1000"  

                        ValueChanged="tbX1_ValueChanged" ></Slider> <TextBlock HorizontalAlignment="Right"                      Grid.Column="0" Grid.Row="2" Margin="5,5,10,5">X2</TextBlock> <Slider Name="tbX2" Grid.Column="1"                      Grid.Row="2" Value="150" Minimum="-1000" Maximum="1000"  

                        ValueChanged="tbX1_ValueChanged" ></Slider>

    <TextBlock HorizontalAlignment="Right"                      Grid.Column="0" Grid.Row="3" Margin="5,5,10,5">Y2</TextBlock> <Slider Name="tbY2" Grid.Column="1"                       Grid.Row="3" Value="100"  Minimum="-1000" Maximum="1000"  

                        ValueChanged="tbX1_ValueChanged"></Slider> <TextBlock HorizontalAlignment="Right"                      Grid.Column="0" Grid.Row="4"  Margin="5,5,10,5">Length</TextBlock> <Slider Name="tbLength" Grid.Column="1"                       Grid.Row="4" Value="100"  Minimum="-1000" Maximum="1000"                       ValueChanged="tbX1_ValueChanged"></Slider> <TextBlock HorizontalAlignment="Right" Grid.Column="0" Grid.Row="6" 

                        Margin="5,5,10,5">Line2</TextBlock> <CheckBox Grid.Column="1" Grid.Row="6" Content="Visible" x:Name="chk2" 

                        IsChecked="True" Click="chk2_Click"></CheckBox> <Button Click="BtnApply_Click"                      Margin="15,20,15,5"                       Grid.Row="7" Height="25"                       Grid.ColumnSpan="2"                      Grid.Column="0">Apply</Button> <Button Click="BtnClose_Click"                      Margin="15,0,15,5"                      Grid.Row="8" Height="25"                       Grid.ColumnSpan="2"                      Grid.Column="0">Close</Button> </Grid> <Border  Grid.Column="1"   BorderThickness="1" BorderBrush="Blue"> <Canvas Name="canvas1" Grid.Column="1" Margin="10" ClipToBounds="True"> <TextBlock Name="tbPoint1" Canvas.Top="10">Point1</TextBlock> <TextBlock Name="tbPoint2" Canvas.Top="25">Point2</TextBlock> <TextBlock Name="tbPoint3" Canvas.Top="40">Point3</TextBlock> <TextBlock Name="tbPoint4" Canvas.Top="55">Point4</TextBlock> </Canvas> </Border> </Grid> </Viewbox>




    private Line line1; private Line line2; public MainWindow() {     InitializeComponent();     Rectangle rect = new Rectangle();     rect.Stroke = Brushes.Black;     rect.Width = canvas1.Width;     rect.Height = canvas1.Height;     canvas1.Children.Add(rect);     line1 = new Line();     line2 = new Line();     AddLines(); } private void AddLines() {     Point pt1 = new Point();     Point pt2 = new Point();     pt1.X = Convert.ToDouble(tbX1 == null ? 200 : tbX1.Value);     pt1.Y = Convert.ToDouble(tbY1 == null ? 150 : tbY1.Value);     pt2.X = Convert.ToDouble(tbX2 == null ? 100 : tbX2.Value);     pt2.Y = Convert.ToDouble(tbY2 == null ? 100 : tbY2.Value);     double length =                                                                            0.5 * Convert.ToDouble(tbLength == null ? 100 : tbLength.Value);     line1 = new Line();     line1.X1 = pt1.X;     line1.Y1 = pt1.Y;     line1.X2 = pt2.X;     line1.Y2 = pt2.Y;     line1.Stroke = Brushes.Gray;     line1.StrokeThickness = 4;     canvas1.Children.Add(line1);     Canvas.SetLeft(tbPoint1pt1.X);     Canvas.SetTop(tbPoint1pt1.Y);     Canvas.SetLeft(tbPoint2pt2.X);     Canvas.SetTop(tbPoint2pt2.Y);     tbPoint1.Text = "Pt1(" + pt1.ToString() + ")";     tbPoint2.Text = "Pt2(" + pt2.ToString() + ")";     //////////////////////////////////////////////////////////////////////////     if (chk2.IsChecked == true)     {         Vector v1 = pt1 - pt2;         Matrix m1 = new Matrix();         Point pt3 = new Point();         Point pt4 = new Point();         m1.Rotate(-90);         v1.Normalize();         v1 *= length;         line2 = new Line();         line2.Stroke = Brushes.Gray;         line2.StrokeThickness = 4;         line2.StrokeDashArray = DoubleCollection.Parse("3, 1");         pt3 = pt2 + v1 * m1;         m1 = new Matrix();         m1.Rotate(90);         pt4 = pt2 + v1 * m1;         line2.X1 = pt3.X;         line2.Y1 = pt3.Y;         line2.X2 = pt4.X;         line2.Y2 = pt4.Y;         canvas1.Children.Add(line2);         Canvas.SetLeft(tbPoint3pt3.X);         Canvas.SetTop(tbPoint3pt3.Y);         Canvas.SetLeft(tbPoint4pt4.X);         Canvas.SetTop(tbPoint4pt4.Y);         pt3.X = Math.Round(pt3.X0);         pt3.Y = Math.Round(pt3.Y0);         pt4.X = Math.Round(pt4.X0);         pt4.Y = Math.Round(pt4.Y0);         tbPoint3.Text = "Pt3(" + pt3.ToString() + ")";         tbPoint4.Text = "Pt4(" + pt4.ToString() + ")";     } } private void BtnApply_Click(object senderRoutedEventArgs e) {     if (line1 != null)         canvas1.Children.Remove(line1);     if (line2 != null)         canvas1.Children.Remove(line2);     AddLines(); } private void BtnClose_Click(object senderRoutedEventArgs e) {     this.Close(); } private void tbX1_ValueChanged(object senderRoutedPropertyChangedEventArgs<double> e) {     if (canvas1 != null)     {         if (line1 != null)             canvas1.Children.Remove(line1);         if (line2 != null)             canvas1.Children.Remove(line2);         AddLines();     } } private void chk2_Click(object senderRoutedEventArgs e) {     if (line1 != null)         canvas1.Children.Remove(line1);     if (line2 != null)         canvas1.Children.Remove(line2);     AddLines(); }













    reference : Practical WPF Graphics Programming






    반응형

    댓글

Designed by Tistory.