私のアプリケーションでは、多くのポイント (必要に応じて最大 100.000) を含む線を描画する必要があります。最初はポリラインを使用しましたが、これはポイントの数が多い場合には遅すぎることが判明しました。
私はいくつか読んでいて、DrawingVisual と StreamGeometry に来ましたが、うまくいきません。
簡単なチュートリアルに従って、次のクラスを作成しました。
class ConcentratieGrafiek : FrameworkElement
{
VisualCollection Visuals;
PointCollection PuntenCollectie;
public ConcentratieGrafiek(PointCollection Punten)
{
Visuals = new VisualCollection(this);
PuntenCollectie = Punten;
this.Loaded += new RoutedEventHandler(ConcentratieGrafiekLoaded);
}
void ConcentratieGrafiekLoaded(object sender, RoutedEventArgs e)
{
DrawingVisual Visual = new DrawingVisual();
StreamGeometry g = new StreamGeometry();
using (StreamGeometryContext cr = g.Open())
{
foreach (Point Punt in PuntenCollectie)
{
if (PuntenCollectie.IndexOf(Punt).Equals(0))
{
cr.BeginFigure(Punt, false, false);
}
else
{
cr.LineTo(Punt, false, false);
}
}
}
using (DrawingContext dc = Visual.RenderOpen())
{
Pen p = new Pen(Brushes.Black, 1);
dc.DrawGeometry(Brushes.Black, p, g);
}
Visuals.Add(Visual);
}
protected override Visual GetVisualChild(int index)
{
return Visuals[index];
}
protected override int VisualChildrenCount
{
get
{
return Visuals.Count;
}
}
}
必要な線のすべてのポイントは、Punten という PointCollection にあります。次に、この FrameworkElement を使用して Canvas に追加しようとします。
ActieveCanvas.Children.Add(new ConcentratieGrafiek(ConcentratiePunten) { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch });
「ActiveveCanvas」はキャンバスです。
情報: すべての点は、キャンバス内の (相対的な) X、Y 座標です。
私は何を間違っていますか?