-
WPF 2D 차트에 대한 사용자 정의 좌표.NET/WPF 2D 2013. 6. 18. 23:30반응형
<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