728x90
반응형
728x170
using System.Drawing;
using System.Drawing.Drawing2D;
#region 라운드 사각형 패스 구하기 - GetRoundedRectanglePath(rectangle, radiusX, radiusY, roundUpperLeft, roundUpperRight, roundLowerRight, roundLowerLeft)
/// <summary>
/// 라운드 사각형 패스 구하기
/// </summary>
/// <param name="rectangle">사각형</param>
/// <param name="radiusX">반경 X</param>
/// <param name="radiusY">반경 Y</param>
/// <param name="roundUpperLeft">좌상단 라운드 여부</param>
/// <param name="roundUpperRight">우상단 라운드 여부</param>
/// <param name="roundLowerRight">우하단 라운드 여부</param>
/// <param name="roundLowerLeft">좌하단 라운드 여부</param>
/// <returns>라운드 사각형 패스</returns>
public GraphicsPath GetRoundedRectanglePath
(
RectangleF rectangle,
float radiusX,
float radiusY,
bool roundUpperLeft,
bool roundUpperRight,
bool roundLowerRight,
bool roundLowerLeft
)
{
PointF point1;
PointF point2;
GraphicsPath path = new GraphicsPath();
if(roundUpperLeft)
{
RectangleF cornerRectangle = new RectangleF
(
rectangle.X,
rectangle.Y,
2 * radiusX,
2 * radiusY
);
path.AddArc(cornerRectangle, 180, 90);
point1 = new PointF(rectangle.X + radiusX, rectangle.Y);
}
else
{
point1 = new PointF(rectangle.X, rectangle.Y);
}
if(roundUpperRight)
{
point2 = new PointF(rectangle.Right - radiusX, rectangle.Y);
}
else
{
point2 = new PointF(rectangle.Right, rectangle.Y);
}
path.AddLine(point1, point2);
if(roundUpperRight)
{
RectangleF cornerRectangle = new RectangleF
(
rectangle.Right - 2 * radiusX,
rectangle.Y,
2 * radiusX,
2 * radiusY
);
path.AddArc(cornerRectangle, 270, 90);
point1 = new PointF(rectangle.Right, rectangle.Y + radiusY);
}
else
{
point1 = new PointF(rectangle.Right, rectangle.Y);
}
if(roundLowerRight)
{
point2 = new PointF(rectangle.Right, rectangle.Bottom - radiusY);
}
else
{
point2 = new PointF(rectangle.Right, rectangle.Bottom);
}
path.AddLine(point1, point2);
if(roundLowerRight)
{
RectangleF cornerRectangle = new RectangleF
(
rectangle.Right - 2 * radiusX,
rectangle.Bottom - 2 * radiusY,
2 * radiusX,
2 * radiusY
);
path.AddArc(cornerRectangle, 0, 90);
point1 = new PointF(rectangle.Right - radiusX, rectangle.Bottom);
}
else
{
point1 = new PointF(rectangle.Right, rectangle.Bottom);
}
if(roundLowerLeft)
{
point2 = new PointF(rectangle.X + radiusX, rectangle.Bottom);
}
else
{
point2 = new PointF(rectangle.X, rectangle.Bottom);
}
path.AddLine(point1, point2);
if(roundLowerLeft)
{
RectangleF cornerRectangle = new RectangleF
(
rectangle.X,
rectangle.Bottom - 2 * radiusY,
2 * radiusX,
2 * radiusY
);
path.AddArc(cornerRectangle, 90, 90);
point1 = new PointF(rectangle.X, rectangle.Bottom - radiusY);
}
else
{
point1 = new PointF(rectangle.X, rectangle.Bottom);
}
if(roundUpperLeft)
{
point2 = new PointF(rectangle.X, rectangle.Y + radiusY);
}
else
{
point2 = new PointF(rectangle.X, rectangle.Y);
}
path.AddLine(point1, point2);
path.CloseFigure();
return path;
}
#endregion
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] Point 구조체 : 거리 구하기 (0) | 2020.07.27 |
---|---|
[C#/WINFORM] PictureBox 클래스 : 배경 이미지 위에 그리기 (0) | 2020.07.27 |
[C#/WINFORM] 햇살(Sunburst) 차트에서 마우스 아래 섹션 찾기 (0) | 2020.07.27 |
[C#/WINFORM] ListBox 클래스 : 사용자 항목 드래그하기 (0) | 2020.07.26 |
[C#/WINFORM] ListBox 클래스 : 사용자 항목 배열하기 (0) | 2020.07.26 |
[C#/WINFORM] GraphicsPath 클래스 : 라운드 사각형 패스 구하기 (0) | 2020.07.24 |
[C#/WINFORM] 핀터레스트 스타일 대각선 그림 몽타지 사용하기 (0) | 2020.07.24 |
[C#/WINFORM] Bitmap 클래스 : 색상 영역 설정하기 (0) | 2020.07.23 |
[C#/WINFORM] Bitmap 클래스 : 모노크롬 비트맵 구하기 (0) | 2020.07.23 |
[C#/WINFORM] DataGridView 클래스 : CellDoubleClick 이벤트를 사용해 체크 박스 컬럼 입력하기 (0) | 2020.07.23 |
[C#/WINFORM] 이미지 리스트에서 이미지 드래그하기 (0) | 2020.07.22 |
댓글을 달아 주세요