<Window x:Class="WpfApplication5.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="2D 차트에 대한 사용자 정의 좌표" Height="420" Width="360"> <Viewbox Stretch="Uniform"> <StackPanel Height="420" Width="360"> <Canvas x:Name="plotCanvas" ClipToBounds="True" Width="300" Height="250" Margin="30,30,30,30"> <Rectangle x:Name="plotArea" Width="300" Height="250" Stroke="Black" StrokeThickness="1"/> </Canvas> <Grid Width="340" Height="100" HorizontalAlignment="Left" VerticalAlignment="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="60" /> <ColumnDefinition Width="110" /> <ColumnDefinition Width="60"/> <ColumnDefinition Width="110" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <TextBlock Grid.Column="0" Grid.Row="0" Margin="25,5,10,5">XMin</TextBlock> <TextBox Name="tbXMin" Grid.Column="1" Grid.Row="0" Text="0" />
<TextBlock Grid.Column="2" Grid.Row="0" Margin="25,5,10,5">XMax</TextBlock> <TextBox Name="tbXMax" Grid.Column="3" Grid.Row="0" >10</TextBox> <TextBlock Grid.Column="0" Grid.Row="1" Margin="25,5,10,5">YMin</TextBlock> <TextBox Name="tbYMin" Grid.Column="1" Grid.Row="1" >0</TextBox> <TextBlock Grid.Column="2" Grid.Row="1" Margin="25,5,10,5">YMax</TextBlock> <TextBox Name="tbYMax" Grid.Column="3" Grid.Row="1">10</TextBox> <Button Click="btnApply_Click" Margin="40,20,20,0" Height="25" Grid.ColumnSpan="2" Grid.Column="0" Grid.Row="2">Apply</Button> <Button Click="btnClose_Click" Margin="40,20,20,0" Height="25" Grid.ColumnSpan="2" Grid.Column="2" Grid.Row="2">Close</Button> </Grid> </StackPanel> </Viewbox> </Window>
public partial class MainWindow : Window { private double xMin = 0.0; private double xMax = 10.0; private double yMin = 0.0; private double yMax = 10.0; private Line line1; private Polyline polyline1; public MainWindow() { InitializeComponent(); AddGraphics(); } private void AddGraphics() { line1 = new Line(); line1.X1 = XNormalize(2.0); line1.Y1 = YNormalize(4.0); line1.X2 = XNormalize(8.0); line1.Y2 = YNormalize(10.0); line1.Stroke = Brushes.Blue; line1.StrokeThickness = 2; //line1.StrokeDashArray = new DoubleCollection(){}; plotCanvas.Children.Add(line1); polyline1 = new Polyline(); polyline1.Points.Add(new Point(XNormalize(8), YNormalize(8))); polyline1.Points.Add(new Point(XNormalize(6), YNormalize(6))); polyline1.Points.Add(new Point(XNormalize(6), YNormalize(4))); polyline1.Points.Add(new Point(XNormalize(4), YNormalize(4))); polyline1.Points.Add(new Point(XNormalize(4), YNormalize(6))); polyline1.Points.Add(new Point(XNormalize(6), YNormalize(6))); polyline1.Stroke = Brushes.Red; polyline1.StrokeThickness = 5; plotCanvas.Children.Add(polyline1); } private double XNormalize(double x) { double result = (x - xMin) * plotCanvas.Width / (xMax - xMin); return result; } private double YNormalize(double y) { double result = plotCanvas.Height - (y - yMin) * plotCanvas.Height / (yMax - yMin); return result; } private void btnApply_Click(object sender, RoutedEventArgs e) { xMin = Convert.ToDouble(tbXMin.Text); xMax = Convert.ToDouble(tbXMax.Text); yMin = Convert.ToDouble(tbXMin.Text); yMax = Convert.ToDouble(tbYMax.Text); plotCanvas.Children.Remove(line1); plotCanvas.Children.Remove(polyline1); AddGraphics(); } private void btnClose_Click(object sender, RoutedEventArgs e) { this.Close(); } }
reference : Practical WPF Graphics Programming
'.NET > WPF 2D' 카테고리의 다른 글
WPF 2D Scale Transforms (0) | 2013.06.28 |
---|---|
WPF 2D Object Matrix 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 RenderTransform ScaleTransform Slider 바인딩 Canvas.ClipToBounds (0) | 2013.06.18 |
WPF 2D 그리기 Canvas, Line, Canvas.RenderTransform, ScaleTransform, TranslateTransform (0) | 2013.06.18 |
WPF 기초 이벤트 트리거 에니메이션 주기 샘플 글크기 변경 AutoReverse (0) | 2013.06.17 |