728x90
반응형
728x170
■ Canvas 클래스에서 캔버스 확장을 사용하는 방법을 보여준다.
▶ CanvasExtension.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace TestProject
{
/// <summary>
/// 캔버스 확장
/// </summary>
public static class CanvasExtension
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 중심점 구하기 - GetCenterPoint(shape)
/// <summary>
/// 중심점 구하기
/// </summary>
/// <param name="shape">도형</param>
/// <returns>중심점</returns>
public static Point GetCenterPoint(this Shape shape)
{
double centerX = (Canvas.GetLeft(shape) + Canvas.GetRight (shape)) / 2.0;
double centerY = (Canvas.GetTop (shape) + Canvas.GetBottom(shape)) / 2.0;
return new Point(centerX, centerY);
}
#endregion
#region 테두리 사각형 구하기 - GetBoundRectangle(shape)
/// <summary>
/// 테두리 사각형 구하기
/// </summary>
/// <param name="shape">도형</param>
/// <returns>테두리 사각형</returns>
public static Rect GetBoundRectangle(this Shape shape)
{
return new Rect(Canvas.GetLeft(shape), Canvas.GetTop(shape), shape.Width, shape.Height);
}
#endregion
#region 테두리 일치시키기 - MatchBounds(shape1, shape2)
/// <summary>
/// 테두리 일치시키기
/// </summary>
/// <param name="shape1">도형 1</param>
/// <param name="shape2">도형 2</param>
public static void MatchBounds(this Shape shape1, Shape shape2)
{
shape1.SetBounds(shape2.GetBoundRectangle());
}
#endregion
#region 사각형 그리기 - DrawRectangle(canvas, left, top, width, height, fillBrush, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 사각형 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <returns>사각형</returns>
public static Rectangle DrawRectangle
(
this Canvas canvas,
double left,
double top,
double width,
double height,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
Rectangle rectangle = new Rectangle();
rectangle.SetValue(left, top, width, height, fillBrush, strokeBrush, strokeThickness, strokeDashCollection);
canvas.Children.Add(rectangle);
return rectangle;
}
#endregion
#region 사각형 그리기 - DrawRectangle(canvas, left, top, width, height, fillBrush, strokeBrush, strokeThickness)
/// <summary>
/// 사각형 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <returns>사각형</returns>
public static Rectangle DrawRectangle
(
this Canvas canvas,
double left,
double top,
double width,
double height,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness
)
{
return canvas.DrawRectangle(left, top, width, height, fillBrush, strokeBrush, strokeThickness, null);
}
#endregion
#region 사각형 그리기 - DrawRectangle(canvas, left, top, width, height, fillBrush, strokeBrush)
/// <summary>
/// 사각형 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <returns>사각형</returns>
public static Rectangle DrawRectangle
(
this Canvas canvas,
double left,
double top,
double width,
double height,
Brush fillBrush,
Brush strokeBrush
)
{
return canvas.DrawRectangle(left, top, width, height, fillBrush, strokeBrush, 1, null);
}
#endregion
#region 타원 그리기 - DrawEllipse(canvas, left, top, width, height, fillBrush, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 타원 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <returns>타원</returns>
public static Ellipse DrawEllipse
(
this Canvas canvas,
double left,
double top,
double width,
double height,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
Ellipse ellipse = new Ellipse();
ellipse.SetValue(left, top, width, height, fillBrush, strokeBrush, strokeThickness, strokeDashCollection);
canvas.Children.Add(ellipse);
return ellipse;
}
#endregion
#region 타원 그리기 - DrawEllipse(canvas, left, top, width, height, fillBrush, strokeBrush, strokeThickness)
/// <summary>
/// 타원 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <returns>타원</returns>
public static Ellipse DrawEllipse
(
this Canvas canvas,
double left,
double top,
double width,
double height,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness
)
{
return canvas.DrawEllipse(left, top, width, height, fillBrush, strokeBrush, strokeThickness, null);
}
#endregion
#region 타원 그리기 - DrawEllipse(canvas, left, top, width, height, fillBrush, strokeBrush)
/// <summary>
/// 타원 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <returns>타원</returns>
public static Ellipse DrawEllipse(this Canvas canvas, double left, double top, double width, double height, Brush fillBrush, Brush strokeBrush)
{
return canvas.DrawEllipse(left, top, width, height, fillBrush, strokeBrush, 1, null);
}
#endregion
#region 다각형 그리기 - DrawPolygon(canvas, pointCollection, fillBrush, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 다각형 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="pointCollection">포인트 컬렉션</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <returns>다각형</returns>
public static Polygon DrawPolygon
(
this Canvas canvas,
PointCollection pointCollection,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
Polygon polygon = new Polygon();
polygon.Points = pointCollection;
polygon.SetFillAndStroke(fillBrush, strokeBrush, strokeThickness, strokeDashCollection);
canvas.Children.Add(polygon);
return polygon;
}
#endregion
#region 다각형 그리기 - DrawPolygon(canvas, pointCollection, fillBrush, strokeBrush, strokeThickness)
/// <summary>
/// 다각형 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="pointCollection">포인트 컬렉션</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <returns>다각형</returns>
public static Polygon DrawPolygon
(
this Canvas canvas,
PointCollection pointCollection,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness
)
{
return canvas.DrawPolygon(pointCollection, fillBrush, strokeBrush, strokeThickness, null);
}
#endregion
#region 다각형 그리기 - DrawPolygon(canvas, pointCollection, fillBrush, strokeBrush)
/// <summary>
/// 다각형 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="pointCollection">포인트 컬렉션</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <returns>다각형</returns>
public static Polygon DrawPolygon(this Canvas canvas, PointCollection pointCollection, Brush fillBrush, Brush strokeBrush)
{
return canvas.DrawPolygon(pointCollection, fillBrush, strokeBrush, 1, null);
}
#endregion
#region 다각선 그리기 - DrawPolyline(canvas, pointCollection, fillBrush, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 다각선 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="pointCollection">포인트 컬렉션</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <returns>다각선</returns>
public static Polyline DrawPolyline
(
this Canvas canvas,
PointCollection pointCollection,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
Polyline polyline = new Polyline();
polyline.Points = pointCollection;
polyline.SetFillAndStroke(fillBrush, strokeBrush, strokeThickness, strokeDashCollection);
canvas.Children.Add(polyline);
return polyline;
}
#endregion
#region 다각선 그리기 - DrawPolyline(canvas, pointCollection, fillBrush, strokeBrush, strokeThickness)
/// <summary>
/// 다각선 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="pointCollection">포인트 컬렉션</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <returns>다각선</returns>
public static Polyline DrawPolyline
(
this Canvas canvas,
PointCollection pointCollection,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness
)
{
return canvas.DrawPolyline(pointCollection, fillBrush, strokeBrush, strokeThickness, null);
}
#endregion
#region 다각선 그리기 - DrawPolyline(canvas, pointCollection, fillBrush, strokeBrush)
/// <summary>
/// 다각선 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="pointCollection">포인트 컬렉션</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <returns>다각선</returns>
public static Polyline DrawPolyline(this Canvas canvas, PointCollection pointCollection, Brush fillBrush, Brush strokeBrush)
{
return canvas.DrawPolyline(pointCollection, fillBrush, strokeBrush, 1, null);
}
#endregion
#region 레이블 그리기 - DrawLabel(canvas, left, top, width, height, text, fontFamily, fontSize, fontWeight, fontStyle, borderBrush, borderThickness,
backgroundBrush, foregroundBrush, horizontalAlignment, verticalAlignment)
/// <summary>
/// 레이블 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="text">텍스트</param>
/// <param name="fontFamily">폰트 패밀리</param>
/// <param name="fontSize">폰트 크기</param>
/// <param name="fontWeight">폰트 가중치</param>
/// <param name="fontStyle">폰트 스타일</param>
/// <param name="borderBrush">테두리 브러시</param>
/// <param name="borderThickness">테두리 두께</param>
/// <param name="backgroundBrush">배경 브러시</param>
/// <param name="foregroundBrush">전경 브러시</param>
/// <param name="horizontalAlignment">수평 정렬</param>
/// <param name="verticalAlignment">수직 정렬</param>
/// <returns>레이블</returns>
public static Label DrawLabel
(
this Canvas canvas,
double left,
double top,
double width,
double height,
string text,
string fontFamily,
double fontSize,
FontWeight fontWeight,
FontStyle fontStyle,
Brush borderBrush,
Thickness borderThickness,
Brush backgroundBrush,
Brush foregroundBrush,
HorizontalAlignment horizontalAlignment,
VerticalAlignment verticalAlignment
)
{
Label label = new Label();
Canvas.SetLeft(label, left);
Canvas.SetTop(label , top );
label.Width = width;
label.Height = height;
label.BorderBrush = borderBrush;
label.BorderThickness = borderThickness;
label.Background = backgroundBrush;
label.Foreground = foregroundBrush;
label.HorizontalContentAlignment = horizontalAlignment;
label.VerticalContentAlignment = verticalAlignment;
label.FontFamily = new FontFamily(fontFamily);
label.FontSize = fontSize;
label.FontWeight = fontWeight;
label.FontStyle = fontStyle;
label.Content = text;
canvas.Children.Add(label);
return label;
}
#endregion
#region 레이블 그리기 - DrawLabel(canvas, left, top, width, height, text, fontFamily, fontSize, fontWeight, fontStyle, borderBrush, borderThickness,
backgroundBrush, foregroundBrush, horizontalAlignment, verticalAlignment)
/// <summary>
/// 레이블 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="text">텍스트</param>
/// <param name="fontFamily">폰트 패밀리</param>
/// <param name="fontSize">폰트 크기</param>
/// <param name="fontWeight">폰트 가중치</param>
/// <param name="fontStyle">폰트 스타일</param>
/// <param name="borderBrush">테두리 브러시</param>
/// <param name="borderThickness">테두리 두께</param>
/// <param name="backgroundBrush">배경 브러시</param>
/// <param name="foregroundBrush">전경 브러시</param>
/// <param name="horizontalAlignment">수평 정렬</param>
/// <param name="verticalAlignment">수직 정렬</param>
/// <returns>레이블</returns>
public static Label DrawLabel
(
this Canvas canvas,
double left,
double top,
double width,
double height,
string text,
string fontFamily,
double fontSize,
FontWeight fontWeight,
FontStyle fontStyle,
Brush borderBrush,
double borderThickness,
Brush backgroundBrush,
Brush foregroundBrush,
HorizontalAlignment horizontalAlignment,
VerticalAlignment verticalAlignment
)
{
return canvas.DrawLabel
(
left,
top,
width,
height,
text,
fontFamily,
fontSize,
fontWeight,
fontStyle,
borderBrush,
new Thickness(borderThickness),
backgroundBrush,
foregroundBrush,
horizontalAlignment,
verticalAlignment
);
}
#endregion
#region 레이블 그리기 - DrawLabel(canvas, left, top, width, height, text, fontFamily, fontSize, fontWeight, fontStyle, borderBrush, borderThickness,
backgroundBrush, foregroundBrush, horizontalAlignment, verticalAlignment)
/// <summary>
/// 레이블 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="text">텍스트</param>
/// <param name="fontFamily">폰트 패밀리</param>
/// <param name="fontSize">폰트 크기</param>
/// <param name="fontWeight">폰트 가중치</param>
/// <param name="fontStyle">폰트 스타일</param>
/// <param name="borderBrush">테두리 브러시</param>
/// <param name="borderThickness">테두리 두께</param>
/// <param name="backgroundBrush">배경 브러시</param>
/// <param name="foregroundBrush">전경 브러시</param>
/// <returns>레이블</returns>
public static Label DrawLabel
(
this Canvas canvas,
double left,
double top,
double width,
double height,
string text,
string fontFamily,
double fontSize,
FontWeight fontWeight,
FontStyle fontStyle,
Brush borderBrush,
double borderThickness,
Brush backgroundBrush,
Brush foregroundBrush
)
{
return canvas.DrawLabel
(
left,
top,
width,
height,
text,
fontFamily,
fontSize,
fontWeight,
fontStyle,
borderBrush,
new Thickness(borderThickness),
backgroundBrush,
foregroundBrush,
HorizontalAlignment.Center,
VerticalAlignment.Center
);
}
#endregion
#region 선 그리기 - DrawLine(canvas, x1, y1, x2, y2, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 선 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="x1">X1</param>
/// <param name="y1">Y1</param>
/// <param name="x2">X2</param>
/// <param name="y2">Y2</param>
/// <param name="strokeBrush">스트로크 브로시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <returns>선</returns>
public static Line DrawLine
(
this Canvas canvas,
double x1,
double y1,
double x2,
double y2,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
Line line = new Line();
line.X1 = x1;
line.Y1 = y1;
line.X2 = x2;
line.Y2 = y2;
line.Stroke = strokeBrush;
line.StrokeThickness = strokeThickness;
if(strokeDashCollection != null)
{
line.StrokeDashArray = strokeDashCollection;
}
canvas.Children.Add(line);
return line;
}
#endregion
#region 선 그리기 - DrawLine(canvas, x1, y1, x2, y2, strokeBrush, strokeThickness)
/// <summary>
/// 선 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="x1">X1</param>
/// <param name="y1">Y1</param>
/// <param name="x2">X2</param>
/// <param name="y2">Y2</param>
/// <param name="strokeBrush">스트로크 브로시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <returns>선</returns>
public static Line DrawLine(this Canvas canvas, double x1, double y1, double x2, double y2, Brush strokeBrush, double strokeThickness)
{
return canvas.DrawLine(x1, y1, x2, y2, strokeBrush, strokeThickness, null);
}
#endregion
#region 선 그리기 - DrawLine(canvas, x1, y1, x2, y2, strokeBrush)
/// <summary>
/// 선 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="x1">X1</param>
/// <param name="y1">Y1</param>
/// <param name="x2">X2</param>
/// <param name="y2">Y2</param>
/// <param name="strokeBrush">스트로크 브로시</param>
/// <returns>선</returns>
public static Line DrawLine(this Canvas canvas, double x1, double y1, double x2, double y2, Brush strokeBrush)
{
return canvas.DrawLine(x1, y1, x2, y2, strokeBrush, 1, null);
}
#endregion
#region 점 그리기 - DrawDot(canvas, centerX, centerY, radius, fillBrush, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 점 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="centerX">중심 X</param>
/// <param name="centerY">중심 Y</param>
/// <param name="radius">반지름</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <returns>타원</returns>
public static Ellipse DrawDot
(
this Canvas canvas,
double centerX,
double centerY,
double radius,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
return canvas.DrawEllipse
(
centerX - radius,
centerY - radius,
2.0 * radius,
2.0 * radius,
fillBrush,
strokeBrush,
strokeThickness,
strokeDashCollection
);
}
#endregion
#region 점 그리기 - DrawDot(canvas, label, centerX, centerY, radius, fillBrush, strokeBrush, strokeThickness, strokeDashCollection,
text, fontFamily, fontSize, fontWeight, fontStyle, borderBrush, borderThickness, backgroundBrush, foregroundBrush)
/// <summary>
/// 점 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="label">레이블</param>
/// <param name="centerX">중심 X</param>
/// <param name="centerY">중심 Y</param>
/// <param name="radius">반지름</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <param name="text">텍스트</param>
/// <param name="fontFamily">폰트 패밀리</param>
/// <param name="fontSize">폰트 크기</param>
/// <param name="fontWeight">폰트 가중치</param>
/// <param name="fontStyle">폰트 스타일</param>
/// <param name="borderBrush">테두리 브러시</param>
/// <param name="borderThickness">테두리 두께</param>
/// <param name="backgroundBrush">배경 브러시</param>
/// <param name="foregroundBrush">전경 브러시</param>
/// <returns>타원</returns>
public static Ellipse DrawDot
(
this Canvas canvas,
out Label label,
double centerX,
double centerY,
double radius,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection,
string text,
string fontFamily,
double fontSize,
FontWeight fontWeight,
FontStyle fontStyle,
Brush borderBrush,
Thickness borderThickness,
Brush backgroundBrush,
Brush foregroundBrush
)
{
Ellipse ellipse = canvas.DrawDot(centerX, centerY, radius, fillBrush, strokeBrush, strokeThickness, strokeDashCollection);
label = canvas.DrawLabel
(
centerX - radius,
centerY - radius,
2.0 * radius,
2.0 * radius,
text,
fontFamily,
fontSize,
fontWeight,
fontStyle,
borderBrush,
borderThickness,
backgroundBrush,
foregroundBrush,
HorizontalAlignment.Center,
VerticalAlignment.Center
);
return ellipse;
}
#endregion
#region 점 그리기 - DrawDot(canvas, label, centerX, centerY, radius, fillBrush, strokeBrush, strokeThickness, strokeDashCollection,
text, fontFamily, fontSize, fontWeight, fontStyle, backgroundBrush, foregroundBrush)
/// <summary>
/// 점 그리기
/// </summary>
/// <param name="canvas">캔버스</param>
/// <param name="label">레이블</param>
/// <param name="centerX">중심 X</param>
/// <param name="centerY">중심 Y</param>
/// <param name="radius">반지름</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
/// <param name="text">텍스트</param>
/// <param name="fontFamily">폰트 패밀리</param>
/// <param name="fontSize">폰트 크기</param>
/// <param name="fontWeight">폰트 가중치</param>
/// <param name="fontStyle">폰트 스타일</param>
/// <param name="backgroundBrush">배경 브러시</param>
/// <param name="foregroundBrush">전경 브러시</param>
/// <returns>타원</returns>
public static Ellipse DrawDot
(
this Canvas canvas,
out Label label,
double centerX,
double centerY,
double radius,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection,
string text,
string fontFamily,
double fontSize,
FontWeight fontWeight,
FontStyle fontStyle,
Brush backgroundBrush,
Brush foregroundBrush
)
{
return canvas.DrawDot
(
out label,
centerX,
centerY,
radius,
fillBrush,
strokeBrush,
strokeThickness,
strokeDashCollection,
text,
fontFamily,
fontSize,
fontWeight,
fontStyle,
null,
new Thickness(),
backgroundBrush,
foregroundBrush
);
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Private
#region 테두리 설정하기 - SetBounds(shape, left, top, width, height)
/// <summary>
/// 테두리 설정하기
/// </summary>
/// <param name="shape">도형</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
private static void SetBounds(this Shape shape, double left, double top, double width, double height)
{
Canvas.SetLeft(shape, left);
Canvas.SetTop (shape, top );
shape.Width = width;
shape.Height = height;
}
#endregion
#region 테두리 설정하기 - SetBounds(shape, boundRectangle)
/// <summary>
/// 테두리 설정하기
/// </summary>
/// <param name="shape">도형</param>
/// <param name="boundRectangle">테두리 사각형</param>
private static void SetBounds(this Shape shape, Rect boundRectangle)
{
shape.SetBounds(boundRectangle.Left, boundRectangle.Top, boundRectangle.Width, boundRectangle.Height);
}
#endregion
#region 채우기/스트로크 설정하기 - SetFillAndStroke(shape, fillBrush, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 채우기/스트로크 설정하기
/// </summary>
/// <param name="shape">도형</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
private static void SetFillAndStroke
(
this Shape shape,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
shape.Fill = fillBrush;
shape.Stroke = strokeBrush;
shape.StrokeThickness = strokeThickness;
if(strokeDashCollection != null)
{
shape.StrokeDashArray = strokeDashCollection;
}
}
#endregion
#region 값 설정하기 - SetValue(shape, left, top, width, height, fillBrush, strokeBrush, strokeThickness, strokeDashCollection)
/// <summary>
/// 값 설정하기
/// </summary>
/// <param name="shape">도형</param>
/// <param name="left">왼쪽 좌표</param>
/// <param name="top">위쪽 좌표</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="fillBrush">채우기 브러시</param>
/// <param name="strokeBrush">스트로크 브러시</param>
/// <param name="strokeThickness">스트로크 두께</param>
/// <param name="strokeDashCollection">스트로크 대시 컬렉션</param>
private static void SetValue
(
this Shape shape,
double left,
double top,
double width,
double height,
Brush fillBrush,
Brush strokeBrush,
double strokeThickness,
DoubleCollection strokeDashCollection
)
{
shape.SetBounds(left, top, width, height);
shape.SetFillAndStroke(fillBrush, strokeBrush, strokeThickness, strokeDashCollection);
}
#endregion
}
}
▶ 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="TestProject"
FontFamily="나눔고딕코딩"
FontSize="16">
<Canvas Name="canvas" />
</Window>
▶ MainWindow.xaml.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
Loaded += Window_Loaded;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 윈도우 로드시 처리하기 - Window_Loaded(sender, e)
/// <summary>
/// 윈도우 로드시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.canvas.DrawEllipse
(
100,
50,
100,
100,
Brushes.LightGreen,
Brushes.Green,
3,
new DoubleCollection() { 5, 5 }
);
this.canvas.DrawRectangle
(
300,
50,
100,
100,
Brushes.LightBlue,
Brushes.Blue
);
this.canvas.DrawLine
(
500,
50,
600,
150,
Brushes.Red,
4
);
PointCollection pointCollection1 = new PointCollection()
{
new Point( 50, 250),
new Point(260, 200),
new Point(180, 310),
new Point(130, 250),
new Point( 70, 360)
};
this.canvas.DrawPolygon
(
pointCollection1,
Brushes.Pink,
Brushes.Red,
2,
new DoubleCollection() { 2, 2 }
);
PointCollection pointCollection2 = new PointCollection()
{
new Point(330, 200),
new Point(380, 240),
new Point(370, 290),
new Point(300, 270),
new Point(310, 220),
new Point(340, 260)
};
this.canvas.DrawPolyline
(
pointCollection2,
Brushes.Transparent,
Brushes.Green,
3
);
this.canvas.DrawLabel
(
500,
200,
100,
100,
"Centered",
"나눔고딕코딩",
16,
FontWeights.DemiBold,
FontStyles.Italic,
Brushes.Black,
1,
Brushes.Yellow,
Brushes.Blue
);
this.canvas.DrawDot
(
100,
400,
10,
Brushes.LightCyan,
Brushes.Blue,
1,
null
);
this.canvas.DrawDot
(
150,
400,
10,
Brushes.LightCyan,
Brushes.Blue,
1,
null
);
this.canvas.DrawDot
(
200,
400,
5,
Brushes.Blue,
null,
1,
null
);
this.canvas.DrawDot
(
250,
400,
5,
Brushes.Blue,
null,
1,
null
);
Label dotLabel;
this.canvas.DrawDot
(
out dotLabel,
300,
400,
20,
Brushes.LightYellow,
Brushes.Black,
2,
null,
"1",
"나눔고딕코딩",
16,
FontWeights.Normal,
FontStyles.Normal,
null,
new Thickness(2),
null,
Brushes.Red
);
this.canvas.DrawDot
(
out dotLabel,
350,
400,
20,
Brushes.Orange,
Brushes.Blue,
1,
null,
"2",
"나눔고딕코딩",
16,
FontWeights.Normal,
FontStyles.Normal,
null,
Brushes.Black
);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF/.NET6] ColorConverter 클래스 : ConvertFromString 정적 메소드를 사용해 16진수 색상 코드에서 색상 구하기 (0) | 2022.10.02 |
---|---|
[C#/WPF/.NET6] Screen 클래스 : FromHandle 정적 메소드를 사용해 Window 객체의 화면 구하기 (0) | 2022.10.02 |
[C#/WPF/.NET6] WPF 프로젝트에서 WinForm 사용하기 (0) | 2022.10.02 |
[C#/WPF/.NET6] 누겟 설치 : Microsoft.Web.WebView2 (0) | 2022.09.30 |
[C#/WPF/.NET6] WebView2 엘리먼트 : WebView2 미설치시 자동 설치하기 (0) | 2022.09.30 |
[C#/WPF/.NET6] BitmapImage 클래스 : WINFORM Bitmap 객체에서 비트맵 이미지 구하기 (0) | 2022.08.20 |
[C#/WPF/.NET6] Image 클래스 : 움직이는 GIF 이미지 만들기 (0) | 2022.08.20 |
[C#/WPF] BlurEffect 엘리먼트 : 네온싸인 효과 만들기 (0) | 2022.07.23 |
[C#/WPF] DropShadowEffect 엘리먼트 : 네온싸인 효과 만들기 (0) | 2022.07.23 |
[C#/WPF] DropShadowEffect 엘리먼트 : 네온싸인 효과 만들기 (0) | 2022.07.23 |
댓글을 달아 주세요