Projektgruppe Visual Analytics - Medieninformatik und Multimedia ...
Projektgruppe Visual Analytics - Medieninformatik und Multimedia ...
Projektgruppe Visual Analytics - Medieninformatik und Multimedia ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
180 Kapitel 10 Implementierung<br />
werden, welches die zu animierenden Punkte enthält. Dieses kann über das Property<br />
AnimationContainingFrameworkElement des AnimationModels einmalig gesetzt<br />
werden, sodass es bei der Verwendung des AnimationModels sonst nicht weiter<br />
beachtet werden muss. Damit die Animationen aller Diagrammpunkte über ein einziges<br />
Storyboard kontrolliert werden können, müssen die Diagrammpunkte im Namescope des<br />
AnimationContainingFrameworkElements registriert werden. Sie erhalten daher in<br />
der Methode AddToStoryboard einen eindeutigen Namen, müssen aber, bevor das<br />
AnimationModel für den Aufbau einer neuen Animation verwendet wird, wieder<br />
aus diesem Namescope entfernt werden. Hierfür ist die Methode Clear vorgesehen,<br />
welche das AnimationModel <strong>und</strong> das AnimationContainingFrameworkElement in<br />
ihre Anfangszustände zurückversetzt.<br />
Der Status des AnimationModels wird durch die beiden boolschen Properties<br />
AnimationIs-Paused <strong>und</strong> AnimationIsRunning beschrieben. Bevor die Animation<br />
gestartet wurde, haben beide den Wert false. In diesem Fall ist nur der<br />
Aufruf der Run Methode sinnvoll, denn Versuche, ein Storyboard, welches noch<br />
nie gestartet wurde, zu pausieren oder an eine bestimmte Stelle zu springen, sind<br />
nicht möglich. Wurde das Abspielen der Animationen durch einen Aufruf von<br />
Run gestartet, hat AnimationIsRunning den Wert true. Von nun an wird das<br />
Property AnimationIsPaused automatisch mit dem Zustand der Clock synchronisiert,<br />
welche das Storyboard intern steuert. Dies geschieht in dem Eventhandler<br />
Storyboard_CurrentTimeInvalidated. Ein Aufruf von Pause wird also direkt<br />
an das Storyboard weitergeleitet, <strong>und</strong> das Property nimmt daraufhin automatisch<br />
den richtigen Wert an. Ebenso verhält es sich, wenn die pausierte Animation<br />
fortgesetzt wird. Nachdem die Animation einmal vollständig abgespielt worden ist,<br />
wird der Status des AnimationModels im EventHandler Storyboard_Completed so<br />
gesetzt, dass AnimationIsRunning false ist, aber, anders als im Anfangszustand,<br />
AnimationIsPaused true. Ein Aufruf von Seek ist nur dann sinnvoll, wenn die<br />
Animation gerade pausiert oder noch nicht gestartet wurde. Die Methode erhält einen<br />
Zeitpunkt, an den das Storyboard springen soll. Da jedes KeyFrame für eine feste Dauer<br />
von einer Sek<strong>und</strong>e angezeigt wird, entspricht die Zeit in Sek<strong>und</strong>en gleichzeitig der<br />
Nummer des anzuzeigenden KeyFrames. Nachdem das Storyboard an die gewünschte<br />
Stelle gesprungen ist, wird es pausiert <strong>und</strong> kann über einen Aufruf der Resume-Methode<br />
fortgesetzt werden.