.NET - 如何创建一个不填充行重叠的填充CustomLineCap?

时间:2016-01-05 15:15:41

标签: .net graphics

我试图在.NET中绘制一条使用实线箭头CustomLineCap的线,但是未填充与线相交的帽的部分。我尝试将cap的路径中的所有Y坐标设置为非负数,但CustomLineCap构造函数抛出了“Not Implemented”异常;显然,上限必须与负Y轴(即线本身)相交,而不是在线的终点处。

以下是我用于CustomLineCap的代码:

    GraphicsPath ArrowCapPath = new GraphicsPath();
    ArrowCapPath.AddLine(new Point(0, 4), new Point(2, -1)); 
    ArrowCapPath.AddLine(new Point(2, -1), new Point(-2, -1));
    ArrowCapPath.AddLine(new Point(-2, -1), new Point(0, 4));
    CustomLineCap ArrowCap = new CustomLineCap(ArrowCapPath, null);

“箭头”是一个高度为5且宽度为4的三角形。这条线本身在三角形中变为1,这是未填充的部分。

如何填写整个上限?

1 个答案:

答案 0 :(得分:1)

问题在于你的点在形状周围的“方向”。 CustomLineCaps always使用绕组FillMode,它不是GraphicPath使用的默认填充模式,它根据点之间的顺时针和逆时针角度查找形状的内部。您使用的积分将导致GDI认为您的上限是“由内而外”而不是填写。

反转你的观点应该解决问题,使“外部”成为“内部”并允许填充算法以你期望的方式工作。