我正在尝试创建一个带有圆形矩形和底部的东西的弹出气泡,我在下面的图像中用绿色圈出:
但正如你已经猜到的那样,这不是我想要的样子,而是:
我想出了如何按我应该的方式绘制它,但在这种情况下,当我在路径周围添加边框时,它会将那个小三角形和圆角矩形分开。
这是我正在使用的代码:
public static GraphicsPath CreateBubblePath(Rectangle rect, int radius)
{
GraphicsPath p = new GraphicsPath();
GraphicsPath p2 = new GraphicsPath();
p.StartFigure();
p2.StartFigure();
int pointHeigt = 3 * radius;
//Top Left Corner
p.AddArc(rect.X, rect.Y, 2 * radius, 2 * radius, 180, 90);
//Top Edge
p.AddLine(rect.X + radius, rect.Y, rect.X + rect.Width - radius, rect.Y);
//Top Right Corner
p.AddArc(rect.X + rect.Width - 2 * radius, rect.Y, 2 * radius, 2 * radius, 270, 90);
//Right Edge
p.AddLine(rect.X + rect.Width, rect.Y + radius, rect.X + rect.Width, rect.Y + rect.Height - radius - pointHeigt);
//Bottom Right Corner
p.AddArc(rect.X + rect.Width - (2 * radius), rect.Y + rect.Height - radius - pointHeigt, 2 * radius, 2 * radius, 0, 90);
//Bottom Edge 1/2
//METHOD 1
p.AddLine(rect.X + rect.Width - radius, rect.Y + rect.Height - 2 * radius, rect.X + (rect.Width / 2) + pointHeigt, rect.Y + rect.Height - 2 * radius);
p.AddArc(rect.X + (rect.Width / 2), rect.Y + rect.Height - 2 * radius , pointHeigt, pointHeigt, 180, 90);
p.AddArc(rect.X + (rect.Width / 2) - pointHeigt, rect.Y + rect.Height - 2 * radius, pointHeigt, pointHeigt, 270, 90);
p.AddLine(rect.X + (rect.Width / 2) - pointHeigt, rect.Y + rect.Height - 2 * radius, rect.X + radius, rect.Y + rect.Height - 2 * radius);
//METHOD 2///////////////////////////////////////
//p.AddLine(rect.X + rect.Width - radius, rect.Y + rect.Height - 2 * radius, rect.X + radius, rect.Y + rect.Height - 2 * radius);
//p2.AddArc(rect.X + (rect.Width / 2), rect.Y + rect.Height - 2 * radius, pointHeigt, pointHeigt, 180, 90);
//p2.AddArc(rect.X + (rect.Width / 2) - pointHeigt, rect.Y + rect.Height - 2 * radius, pointHeigt, pointHeigt, 270, 90);
//p2.CloseFigure();
////////////////////////////////
//Bottom Left Corner
p.AddArc(rect.X, rect.Y + rect.Height - radius - pointHeigt, 2 * radius, 2 * radius, 90, 90);
//Left Edge
p.AddLine(rect.X, rect.Y + rect.Height - radius - pointHeigt, rect.X, rect.Y + radius);
p.CloseFigure();
//METHOD 2
//p.AddPath(p2, true);
return p;
}