WPF 2-D Bewegte Grafik wie?

07/12/2007 - 16:11 von Rainer Queck | Report spam
Hallo NG,

ich bin auf der Suche nach dem "Besten" Weg, in einer WPF Anwendung eine
Produktionslinie zu visualisieren.

Mein erster Ansatz sah so aus:

Auf einem Canvas wurden an der Position X=0 Y=Random über einen Timer kleine
Rechtecke positioniert.
Über einen zweiten Timer wurden die auf dem Canvas befindlichen Rechtecke
per Canvas.SetLeft(rect, <neue Position>) "weiter geschoben.

Solange die Anzahl der Rechtecke gering war (<600), entstand der Eindruck
einer gleichmàßig fließenden Produktionslinie.
Mit der Erhöhung der Anzahl von Rechtecken wird das ganze immer ruckeliger
und der (Dual Core) Prozessor kam schnell in die 100% Auslastung.

Offensichtlich ist das also nicht der Weg, mit dem eine solche Aufgabe
gelöst werden sollte.
Stellt sich mir die Frage, wie geht es besser?
Letztendlich sollen auf dieser Linie sehr viele Objekte (5000-10000) in
einer fließenden Bewegung dargestellt werden.
- Geht das überhaupt?
- ist ein Canvas das richtige Control?
- ???

Über Tips und Hinweise zu diesem Thema würde ich mich sehr freuen!

Gruß (und schönes Wochenende)
Rainer Queck
 

Lesen sie die antworten

#1 Frank Dzaebel
08/12/2007 - 07:21 | Warnen spam
Hallo Rainer,

ich bin auf der Suche nach dem "Besten" Weg, in einer WPF Anwendung eine
Produktionslinie zu visualisieren.



[Webcast: Windows Presentation Foundation (Teil 6-10) - Animationen]
http://www.microsoft.com/germany/ms...ry.aspx?id32309497

[Creating 2-D and 3-D Dynamic Animations in Windows Presentation Foundation]
http://msdn2.microsoft.com/en-us/li...80159.aspx

[Animation Overview]
http://msdn2.microsoft.com/en-us/li...52312.aspx

Oft wird eben eine simple:

[DoubleAnimation Class (System.Windows.Media.Animation)]
http://msdn2.microsoft.com/en-us/li...ation.aspx

benutzt.



Mit der Erhöhung der Anzahl von Rechtecken wird das ganze immer ruckeliger
und der (Dual Core) Prozessor kam schnell in die 100% Auslastung.



Genau das wàre eigentlich eher die Stàrke von WPF,
denn "normal" kann man sehr viele Elemente gleichzeitig
animieren, aber ich sehe schon .. 10000 Rechtecke gleichzeitig...
das ist natürlich nicht wenig! Die Grafikkarte ist hoffentlich auch
nicht die àlteste? Klar auch da gibt es natürliche Grenzen.


Letztendlich sollen auf dieser Linie sehr viele Objekte (5000-10000) in
einer fließenden Bewegung dargestellt werden.



- evtl. einige Objekte zusammenfassen ...

- ich meine, es ist ungünstig Rectangle-Klassen dynamisch
dem Canvas zuzufügen, sondern in diesem Fall
lieber "zeichnen". Also in Richtung <DrawingGroup>
<DrawingGroup.Children>, <GeometryDrawing ... />, o.à..
Bei 3D etwa den <Viewport3D> etc.

[Denis Dollfus' Blog: Un banc de poissons WPF]
http://www.ergotinfo.fr/architectur..._pois.html
(o.
http://64.233.179.104/translate_c?hl=de&langpair=fr%7Cde&u=http://www.ergotinfo.fr/architectur..._pois.html )

- Ggf. hier auch Tools wie:

[Microsoft Expression Blend]
http://www.microsoft.com/expression...?key=blend

geeignet.



ist ein Canvas das richtige Control?



Als Container IMHO vollkommen richtig.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen