Как добавить «статические» полигоны формы в картевую карту?C#

Место общения программистов C#
Ответить
Anonymous
 Как добавить «статические» полигоны формы в картевую карту?

Сообщение Anonymous »

Используя LiveCharts2 (v2.0.0-rc5.4), я хочу иметь картевую карту, где я могу добавить несколько полигонов на «фон» диаграммы, созданной из списка очков. Просматривая все примеры в документах, я не вижу ничего, что мне нужно. Эти многоугольники по существу останутся статичными и не перемещаются после добавления, но все равно должны придерживаться панорамирования/масштабирования на диаграмме, как любой обычный элемент. Они в основном представляют «зоны», когда одна точка постоянно перемещается по диаграмме и информации, появляющейся на основе «зоны», она находится. наложенный холст, как SO: < /p>

Код: Выделить всё

private void Chart_OnUpdateFinished(IChartView chart)
{
OverlayCanvas.Children.Clear();

var polygon = new Polygon()
{
// set color, etc.
};

foreach (var point in points)
{
var pixel = Chart.ScaleDataToPixels(point);
polygon.Points.Add(new Point(pixel.X, pixel.Y));
}

OverlayCanvas.Children.Add(polygon);
}
< /code>
Это «сработало», но была задержка с обновлением Canvas, когда диаграмма обновляется. Такое ощущение, что должен быть способ использовать саму диаграмму, которая обрабатывает простое масштабирование и панорамирование.public class PolygonGeometry : DrawnGeometry, IDrawnElement
{
private readonly IEnumerable _points;

public PolygonGeometry(IEnumerable points)
{
_points = points;
}

public void Draw(SkiaSharpDrawingContext context)
{
using var path = new SKPath();
var first = true;
foreach (var pt in _points)
{
if (first)
{
path.MoveTo(pt);
first = false;
}
else
{
path.LineTo(pt);
}
}
path.Close();
context.Canvas.DrawPath(path, context.ActiveSkiaPaint);
}

public override LvcSize Measure()
{
return new();
}
}
ниже добавляется в список визуальных эффектов, что визуализации диаграммы связаны.public class PolygonVisual : Visual
{
private readonly PolygonGeometry _geometry;

public PolygonVisual(SKColor fillColor, IEnumerable points)
{
_geometry = new PolygonGeometry(points)
{
Fill = new SolidColorPaint(new SKColor(245, 40, 145, 200)),
Stroke = new SolidColorPaint(SKColors.Blue, 2)
};

}

protected override IDrawnElement DrawnElement => _geometry;

protected override void Measure(Chart chart)
{
// No scaling needed for absolute coordinates
}
}
< /code>
Ничего не появляется на графике в этом случае, но никаких исключений также не появляется. < /p>
Вот пример того, что я пытаюсь сделать. Существует зеленый поли, желтый поли и красный поли, который в этом случае покрывает всю диаграмму. На картинке все они начинаются с 0,0, но это не всегда всегда имеет место:



Подробнее здесь: https://stackoverflow.com/questions/797 ... sian-chart
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»