728x90
반응형
728x170
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="800"
Height="600"
Title="Polyline 클래스 : 아르키메데스 나선(Archimedes Spiral) 그리기"
FontFamily="나눔고딕코딩"
FontSize="16">
<Canvas Name="canvas">
</Canvas>
</Window>
728x90
▶ MainWindow.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 나선 수
/// </summary>
private const int SPRIAL_COUNT = 20;
/// <summary>
/// 포인트 수
/// </summary>
private const int POINT_COUNT = 1000;
/// <summary>
/// 전체 포인트 수
/// </summary>
private const int TOTAL_POINT_COUNT = POINT_COUNT * SPRIAL_COUNT;
/// <summary>
/// 다각선
/// </summary>
private Polyline polyline;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
#region 포인트 컬렉션을 설정한다.
PointCollection pointCollection = new PointCollection(TOTAL_POINT_COUNT);
for(int i = 0; i < TOTAL_POINT_COUNT; i++)
{
double angle = i * 2 * Math.PI / POINT_COUNT;
double scale = 250 * (1 - (double) i / TOTAL_POINT_COUNT);
Point point = new Point();
point.X = scale * Math.Cos(angle);
point.Y = scale * Math.Sin(angle);
pointCollection.Add(point);
}
#endregion
#region 다각선을 설정한다.
this.polyline = new Polyline();
this.polyline.Stroke = SystemColors.WindowTextBrush;
this.polyline.Points = pointCollection;
this.canvas.Children.Add(this.polyline);
#endregion
#region 이벤트를 설정한다.
this.canvas.SizeChanged += canvas_SizeChanged;
#endregion
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 캔버스 크기 변경시 처리하기 - canvas_SizeChanged(sender, e)
/// <summary>
/// 캔버스 크기 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void canvas_SizeChanged(object sender, SizeChangedEventArgs e)
{
Canvas.SetLeft(this.polyline, e.NewSize.Width / 2);
Canvas.SetTop (this.polyline, e.NewSize.Height / 2);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] Rectangle 엘리먼트 : StrokeLineJoin 속성 사용하기 (0) | 2020.07.06 |
---|---|
[C#/WPF] Line 엘리먼트 : StrokeStartLineCap/StrokeEndLineCap 속성 사용하기 (0) | 2020.07.06 |
[C#/WPF] Polygon 엘리먼트 : FillRule 속성 사용하기 (0) | 2020.07.06 |
[C#/WPF] Viewbox 엘리먼트 : 얼굴 그리기 (0) | 2020.07.06 |
[C#/WPF] Shape 엘리먼트 : 얼굴 그리기 (0) | 2020.07.06 |
[C#/WPF] Polyline 클래스 : 싸인 곡선 그리기 (0) | 2020.07.06 |
[C#/WPF] Canvas 클래스 : 사용자 선 그리기 (0) | 2020.07.05 |
[C#/WPF] WindowInteropHelper 클래스 : Handle 속성을 사용해 윈도우 핸들 구하기 (0) | 2020.05.20 |
[C#/WPF] Application 클래스 : Shutdown 메소드를 사용해 애플리케이션 종료하기 (0) | 2020.02.29 |
[C#/WPF] MeshGeometry3D 클래스 : 구체 애니메이션 만들기 (0) | 2019.09.08 |
댓글을 달아 주세요