none
Comment optimizer l'usage de polyline en wpf. RRS feed

  • Question

  • Bonjour a tous,

    Je viens de debuter l'etude de developpement graphique en WPF.

    Ci-dessous un example pour afficher une serie de points dans un canvas en wpf.

    public Polyline NormalizedValues(Polyline pl)
    {
      Polyline result = new Polyline();
     
      for (int i = 0; i < pl.Points.Count; i++)
      {
        Point pt = pl.Points[i];
        Point npt = NormalizedValue(pt);
     
        result.Points.Add(npt);
      }
     
      return result;
    }
     
    public Point NormalizedValue(Point pt)
    {
      Point npt = new Point();
     
      npt.X = (pt.X - _ca.xMin) * chartCanvas.Width / (_ca.xMax - _ca.xMin);
      npt.Y = chartCanvas.Height -
               (pt.Y - _ca.yMin) * chartCanvas.Height / (_ca.yMax - _ca.yMin);
     
      return npt;
    }
     
    public void Draw()
    {
      // Clean the chart area.
      chartCanvas.Children.Clear();
     
      foreach (Trace tr in _Traces)
      {
         Polyline Normalized = NormalizedValues(tr.Values);
         Normalized.Stroke = tr.Color;
         chartCanvas.Children.Add(Normalized);
      }
    }

    Si je reste dans un rayon de +-100 points, l'affichage en boucle est tres fluide.

    Dans le cas de 1024 poiints, le temps daffichage diminue fortement.

    Comment pourrais-je ameliorer la performance de l'usage de polyline ? Pourriez-vous m'expliquer la technique la plus utilisee en wpf dans le domaine des graphiques 2d ?  Je souhaiterais obtenir des informations, liens a ce sujet pour me permettre de comprendre la meilleure approche pour afficher la serie de points le plus rapidement possible.

    Je vous en remercie d'avance.

    Bien a vous.

    MiQi

    samedi 3 novembre 2012 16:03

Réponses

  • Bonjour,

    C'est un peu difficile sans connaître le contexte. L'idée générale est souvent d'en faire le moins possible. Serait-il possible de modifier le graphique plutôt que de le recréer de A à Z comme on le semble faire ici ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Proposé comme réponse Aurel Bera lundi 5 novembre 2012 10:07
    • Marqué comme réponse Aurel Bera mardi 6 novembre 2012 14:17
    samedi 3 novembre 2012 19:59

Toutes les réponses