明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5108|回复: 3

[界面] [分享]向量在WPF的简单应用

[复制链接]
发表于 2010-7-10 12:34:00 | 显示全部楼层 |阅读模式
程序的效果图:



由于程序比较简单,所以我就直接上代码好了.

以下是WPF的XAML代码:
  1. <Window x:Class="WpfApplication6.MainWindow"
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         Title="MainWindow" Height="300" Width="400"
  5.         xmlns:Microsoft_Windows_ThemesAero="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
  6.     <Window.Resources>
  7.         <ResourceDictionary>
  8.             <ResourceDictionary.MergedDictionaries>
  9.                 <ResourceDictionary Source="/PresentationFramework.Royale, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35;component/themes/Royale.normalcolor.xaml" />
  10.             </ResourceDictionary.MergedDictionaries>
  11.         </ResourceDictionary>
  12.     </Window.Resources>
  13.     <Viewbox Stretch="Uniform">
  14.         <Grid Width="430" Height="300" Horiz VerticalAlignment="Top">
  15.             <Grid.ColumnDefinitions>
  16.                 <ColumnDefinition Width="150"/>
  17.                 <ColumnDefinition Width="280"/>
  18.             </Grid.ColumnDefinitions>
  19.             <Grid Width="140" Height="300" Margin="5,10,5,5">
  20.                 <Grid.ColumnDefinitions>
  21.                     <ColumnDefinition Width="60"/>
  22.                     <ColumnDefinition Width="70"/>
  23.                 </Grid.ColumnDefinitions>
  24.                 <Grid.RowDefinitions>
  25.                     <RowDefinition Height="Auto"/>
  26.                     <RowDefinition Height="Auto"/>
  27.                     <RowDefinition Height="Auto"/>
  28.                     <RowDefinition Height="Auto"/>
  29.                     <RowDefinition Height="Auto"/>
  30.                     <RowDefinition Height="Auto"/>
  31.                     <RowDefinition Height="Auto"/>
  32.                 </Grid.RowDefinitions>
  33.                 <TextBlock Horiz Grid.Column="0" Grid.Row="0" Margin="5,5,10,5">X1</TextBlock>
  34.                 <TextBox Name="tbX1" Grid.Column="1" Grid.Row="0" TextAlignment="Center">50</TextBox>
  35.                 <TextBlock Horiz Grid.Column="0" Grid.Row="1" Margin="5,5,10,5">Y1</TextBlock>
  36.                 <TextBox Name="tbY1" Grid.Column="1" Grid.Row="1" TextAlignment="Center">200</TextBox>
  37.                 <TextBlock Horiz Grid.Column="0" Grid.Row="2" Margin="5,5,10,5">X2</TextBlock>
  38.                 <TextBox Name="tbX2" Grid.Column="1" Grid.Row="2" TextAlignment="Center">150</TextBox>
  39.                 <TextBlock Horiz Grid.Column="0" Grid.Row="3" Margin="5,5,10,5">Y2</TextBlock>
  40.                 <TextBox Name="tbY2" Grid.Column="1" Grid.Row="3" TextAlignment="Center">100</TextBox>
  41.                 <TextBlock Horiz Grid.Column="0" Grid.Row="4" Margin="5,5,10,5">Length</TextBlock>
  42.                 <TextBox Name="tbLength" Grid.Column="1" Grid.Row="4" TextAlignment="Center">100</TextBox>
  43.                 <Button Click="Button_Click" Margin="15,20,15,5" Grid.Row="5" Height="25" Grid.ColumnSpan="2" Grid.Column="0">Apply</Button>
  44.                 <Button Click="Button_Click_1" Margin="15,0,15,5" Grid.Row="6" Height="25" Grid.ColumnSpan="2" Grid.Column="0">Close</Button>
  45.             </Grid>
  46.             <Canvas Name="canvas1" Grid.Column="1" Margin="10" ClipToBounds="True" Width="270" Height="280">
  47.                 <TextBlock Name="tbPoint1" Canvas.Top="10">Point1</TextBlock>
  48.                 <TextBlock Name="tbPoint2" Canvas.Top="10">Point2</TextBlock>
  49.                 <TextBlock Name="tbPoint3" Canvas.Top="10">Point3</TextBlock>
  50.                 <TextBlock Name="tbPoint4" Canvas.Top="10">Point4</TextBlock>
  51.             </Canvas>
  52.         </Grid>
  53.     </Viewbox>
  54. </Window>

以下是WPF后台的C#代码:
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Media;
  5. using System.Windows.Shapes;
  6. namespace WpfApplication6
  7. {
  8.     /// <summary>
  9.     /// MainWindow.xaml 的交互逻辑
  10.     /// </summary>
  11.     public partial class MainWindow : Window
  12.     {
  13.         private Line line1;
  14.         private Line line2;
  15.         public MainWindow()
  16.         {
  17.             InitializeComponent();
  18.             Rectangle rect = new Rectangle();
  19.             rect.Stroke = Brushes.Black;
  20.             rect.Width = canvas1.Width;
  21.             rect.Height = canvas1.Height;
  22.             canvas1.Children.Add(rect);
  23.             line1 = new Line();
  24.             line2 = new Line();
  25.             AddLines();
  26.         }
  27.         private void AddLines()
  28.         {
  29.             Point pt1 = new Point();
  30.             Point pt2 = new Point();
  31.             pt1.X = Convert.ToDouble(this.tbX1.Text);
  32.             pt1.Y = Convert.ToDouble(this.tbY1.Text);
  33.             pt2.X = Convert.ToDouble(this.tbX2.Text);
  34.             pt2.Y = Convert.ToDouble(this.tbY2.Text);
  35.             double length = 0.5 * Convert.ToDouble(tbLength.Text);
  36.             line1 = new Line();
  37.             line1.X1 = pt1.X;
  38.             line1.Y1 = pt1.Y;
  39.             line1.X2 = pt2.X;
  40.             line1.Y2 = pt2.Y;
  41.             line1.Stroke = Brushes.Gray;
  42.             line1.StrokeThickness = 4;
  43.             canvas1.Children.Add(line1);
  44.             Canvas.SetLeft(tbPoint1, pt1.X);
  45.             Canvas.SetTop(tbPoint1, pt1.Y);
  46.             Canvas.SetLeft(tbPoint2, pt2.X);
  47.             Canvas.SetTop(tbPoint2, pt2.Y);
  48.             tbPoint1.Text = "Pt1(" + pt1.ToString() + ")";
  49.             tbPoint2.Text = "Pt2(" + pt2.ToString() + ")";
  50.             Vector v1 = pt1 - pt2;
  51.             Matrix m1 = new Matrix();
  52.             Point pt3 = new Point();
  53.             Point pt4 = new Point();
  54.             m1.Rotate(-90);
  55.             v1.Normalize();
  56.             v1 *= length;
  57.             line2 = new Line();
  58.             line2.Stroke = Brushes.Gray;
  59.             line2.StrokeDashArray = DoubleCollection.Parse("3,1");
  60.             pt3 = pt2 + v1 * m1;
  61.             //m1 = new Matrix();
  62.             //m1.Rotate(90);
  63.             pt4 = pt2 - v1 * m1;
  64.             line2.X1 = pt3.X;
  65.             line2.Y1 = pt3.Y;
  66.             line2.X2 = pt4.X;
  67.             line2.Y2 = pt4.Y;
  68.             canvas1.Children.Add(line2);
  69.             Canvas.SetLeft(tbPoint3, pt3.X);
  70.             Canvas.SetTop(tbPoint3, pt3.Y);
  71.             Canvas.SetLeft(tbPoint4, pt4.X);
  72.             Canvas.SetTop(tbPoint4, pt4.Y);
  73.             pt3.X = Math.Round(pt3.X, 0);
  74.             pt3.Y = Math.Round(pt3.Y, 0);
  75.             pt4.X = Math.Round(pt4.X, 0);
  76.             pt4.Y = Math.Round(pt4.Y, 0);
  77.             tbPoint3.Text = "Pt3(" + pt3.ToString() + ")";
  78.             tbPoint4.Text = "Pt4(" + pt4.ToString() + ")";
  79.         }
  80.         private void Button_Click(object sender, RoutedEventArgs e)
  81.         {
  82.             if (line1 != null)
  83.                 canvas1.Children.Remove(line1);
  84.             if (line2 != null)
  85.                 canvas1.Children.Remove(line2);
  86.             AddLines();
  87.         }
  88.         private void Button_Click_1(object sender, RoutedEventArgs e)
  89.         {
  90.             this.Close();
  91.         }
  92.     }
  93. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1威望 +1 明经币 +2 金钱 +20 贡献 +5 激情 +5 收起 理由
雪山飞狐_lzh + 1 + 2 + 20 + 5 + 5 【精华】好文章 转成2008最好,做个直接

查看全部评分

 楼主| 发表于 2010-7-10 12:36:00 | 显示全部楼层

以下为VS2010的源码工程文件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2010-7-10 12:52:00 | 显示全部楼层

为了满足大众的口味,再提供Vs2008的源码工程文件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 06:56 , Processed in 0.181897 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表