ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 senderRoutedEventArgs 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 senderRoutedEventArgs e)
            {
                this.Close();
            }
        }









    reference : Practical WPF Graphics Programming



















    반응형

    댓글

Designed by Tistory.