我有以下单元测试:
[TestMethod]
public void IntersectionTest()
{
var lineStreamGeometry = new StreamGeometry { FillRule = FillRule.EvenOdd };
using (var sgc = lineStreamGeometry.Open())
{
sgc.BeginFigure(new Point(), false, false);
sgc.LineTo(new Point(10, 0), true, true);
sgc.LineTo(new Point(0, 10), true, true);
}
lineStreamGeometry.Freeze();
var lineGeomtry = new LineGeometry(new Point(), new Point(10,0));
var rectangleGeometry = new RectangleGeometry(new Rect(new Point(-20, -20), new Point(20, 20)));
var geometryFillContains = rectangleGeometry.FillContainsWithDetail(lineGeomtry);
var streamFillContains = rectangleGeometry.FillContainsWithDetail(lineStreamGeometry);
Assert.AreEqual(geometryFillContains, streamFillContains);
}这两行都在我的RectangleGeometry中,但是与StreamGeometry的交集结果是不正确的。之所以发生这种情况,是因为BeginFigure的BeginFigure参数是false。
我可以将isFilled设置为true,以使单元测试满足,但当RectangleGeometry落入它所导致的不可见的闭合三角形内时,就会产生问题。
我正在寻找一个函数,它适用于各种几何,只有当两个几何图形都是填充/闭多边形时,FillContainsWithDetail才能正确工作。
发布于 2018-06-14 06:17:54
将Pen分配给StreamGeometry解决了我的问题:
var streamFillContains = rectangleGeometry.FillContainsWithDetail(lineStreamGeometry.GetWidenedPathGeometry(new Pen(null, 0.1)));https://stackoverflow.com/questions/50839222
复制相似问题