У меня есть следующий модульный тест:
[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
неверен.Это происходит потому, что параметр isFilled
для BeginFigure
равен false
.
. Я могу установить isFilled
в true
, чтобы выполнить модульный тест, но это вызывает проблемы, когда RectangleGeometry
попадает в невидимый закрывающий треугольник, который он вызывает.
Я ищу функцию, которая работает со всеми видами геометрий, FillContainsWithDetail
работает правильно, только если обе геометрии заполнены / замкнуты многоугольниками.