Wpf StreamGeometry неожиданные значения - PullRequest
0 голосов
/ 24 августа 2018

Я рисую какую-то диаграмму вот так:

var geometry = new StreamGeometry();

using (var ctx = geometry.Open())
{
    ctx.BeginFigure(new Point(offset, MyCanvas.Height), false, false);

    for (var i = 0; i < interpolated.Count; i++)
    {
        var x = i * partWidth / interpolated.Count + offset;
        ctx.LineTo(new Point(x, MyCanvas.Height - interpolated[i]), true, false);
    }

    ctx.LineTo(new Point(offset + partWidth, MyCanvas.Height), true, false);
    ctx.LineTo(new Point(offset, MyCanvas.Height), true, false);

    geometry.FillRule = FillRule.EvenOdd;
    geometry.Freeze();

    var path = new Path
                {
                    Stroke = Brushes.Black,
                    StrokeThickness = 1,
                    Data = geometry,
                    Fill = Brushes.Black
                };
    MyCanvas.Children.Add(path);
}

Все мои значения в interpolated[] = 0..40.

Высота моего холста = 50

Вот что я получаю:

enter image description here

Я не понимаю, почему некоторые точки находятся ниже линии, которую я рисую так:

 var zeroLine = new Line
        {
            X1 = 0,
            X2 = 790,
            Y1 = MyCanvas.Height,
            Y2 = MyCanvas.Height,
            Stroke = Brushes.Coral,
            StrokeThickness = 1
        };
        MyCanvas.Children.Add(zeroLine);

Если значение MyCanvas.Height больше значений моих данных (это точно), то MyCanvas.Height - interpolated[i], поскольку Y всегда должно быть меньше оранжевой линии, верно?

Как я понимаю, StreamGeometry рисует эти части за пределами заданных точек по проекту? Можно ли это предотвратить?

1 Ответ

0 голосов
/ 24 августа 2018

Это связано с StrokeLineJoin пути, который по умолчанию равен Miter.

Установите вместо Round:

var path = new Path
{
    Stroke = Brushes.Black,
    StrokeThickness = 1,
    StrokeLineJoin = PenLineJoin.Round,
    Data = geometry
};

Как примечание, вместо Пути с Геометрией, состоящей из множества отдельных линий, вы также можете использовать элемент Полилинии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...