728x90
반응형
728x170
■ StreamGeometry 클래스를 사용해 다각형을 그리는 방법을 보여준다.
▶ 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="StreamGeometry 클래스 : 다각형 그리기"
FontFamily="나눔고딕코딩"
FontSize="16">
<Grid>
<Path Name="path"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Stroke="Turquoise"
StrokeThickness="5" />
</Grid>
</Window>
▶ MainWindow.xaml.cs
using System;
using System.Windows;
using System.Windows.Media;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
StreamGeometry geometry = GetPolygonStreamGeometry(new Point(200, 200), 200, 8, 0);
geometry.FillRule = FillRule.EvenOdd;
geometry.Freeze();
this.path.Data = geometry;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 다각형 스트림 지오메트리 구하기 - GetPolygonStreamGeometry(centerPoint, radius, sideCount, offsetDegree)
/// <summary>
/// 다각형 스트림 지오메트리 구하기
/// </summary>
/// <param name="centerPoint">중심 포인트</param>
/// <param name="radius">반경</param>
/// <param name="sideCount">사이드 수</param>
/// <param name="offsetDegree">오프셋 각도</param>
/// <returns>다각형 스트림 지오메트리</returns>
private StreamGeometry GetPolygonStreamGeometry(Point centerPoint, double radius, int sideCount, double offsetDegree)
{
StreamGeometry geometry = new StreamGeometry();
using(StreamGeometryContext context = geometry.Open())
{
double step = 2 * Math.PI / Math.Max(sideCount, 3);
Point currentPoint = centerPoint;
double radian = Math.PI * offsetDegree / 180.0;
for(int i = 0; i < sideCount; i++, radian += step)
{
currentPoint.X = centerPoint.X + radius * Math.Cos(radian);
currentPoint.Y = centerPoint.Y + radius * Math.Sin(radian);
if(i == 0)
{
context.BeginFigure(currentPoint, true, true);
}
else
{
context.LineTo(currentPoint, true, false);
}
}
}
return geometry;
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] 누겟 설치 : FFME.Windows (0) | 2020.10.25 |
---|---|
[C#/WPF] 커스텀 윈도우 크롬 사용하기 (0) | 2020.10.13 |
[C#/WPF] 파노라마 뷰 사용하기 (0) | 2020.09.24 |
[C#/WPF] PolyBezierSegment 클래스 : 1개 이상의 연결되는 베지어 곡선(Quadratic Bezier Curve) 그리기 (0) | 2020.09.23 |
[C#/WPF] PolyQuadraticBezierSegment 클래스 : 1개 이상의 연결되는 2차 베지어 곡선(Quadratic Bezier Curve) 그리기 (0) | 2020.09.23 |
[C#/WPF] StreamGeometry 클래스 : 선 그리기 (0) | 2020.09.23 |
[C#/WPF] StreamGeometry 클래스 : 2차 베지어 곡선(Quadratic Bezier Curve) 그리기 (0) | 2020.09.23 |
[C#/WPF] StreamGeometry 클래스 : 1개 이상의 연결되는 2차 베지어 곡선(Quadratic Bezier Curve) 그리기 (0) | 2020.09.23 |
[C#/WPF] StreamGeometry 클래스 : 다각선 그리기 (0) | 2020.09.23 |
[C#/WPF] StreamGeometry 클래스 : 1개 이상의 연결된 베지어 곡선(Bezier Curve) 그리기 (0) | 2020.09.23 |
댓글을 달아 주세요