19.01.2015 Aufrufe

Projektgruppe Visual Analytics - Medieninformatik und Multimedia ...

Projektgruppe Visual Analytics - Medieninformatik und Multimedia ...

Projektgruppe Visual Analytics - Medieninformatik und Multimedia ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!