Надежный способ найти пересечение между незаполненной StreamGeometry и RectangleGeometry - PullRequest
0 голосов
/ 13 июня 2018

У меня есть следующий модульный тест:

[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 работает правильно, только если обе геометрии заполнены / замкнуты многоугольниками.

1 Ответ

0 голосов
/ 14 июня 2018

Назначение Pen для StreamGeometry решило мою проблему:

var streamFillContains = rectangleGeometry.FillContainsWithDetail(lineStreamGeometry.GetWidenedPathGeometry(new Pen(null, 0.1)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...