Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.

Ähnliche Präsentationen


Präsentation zum Thema: "FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch."—  Präsentation transkript:

1 FH-Hof Interaktion Richard Göbel

2 FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch Ereignisse aktiviert, z.B.: Aktionen des Anwenders (Tastatur, Maus) Kollisionen Aktionen anderer Behavior-Objekte... Ein Behavior-Objekt führt für ein Ereignis eine Aktion auf einem Knoten des Graphen aus. Für die Erzeugung eines Behavior-Objekt muss eine eigene Unterklasse von Behavior definiert werden!

3 FH-Hof Aufbau einer Unterklasse von Behavior public class MyBehavior extends Behavior { private Node n; private WakeupCondition wakeup = new... ; public MyBehavior (Node aNode) { n = aNode; } public void initialize () { wakeupOn(wakeup); } public void processStimulus(Enumeration criteria) {... wakeupOn(wakeup); }

4 FH-Hof Beispiele für Unterklassen von WakeupCondition Eingaben mit Maus und Tastatur: WakeupOnAWTEvent Kollisionen zwischen Objekten: WakeupOnCollisionEntry, WakeupOnCollisionExit,... Von Behavior-Klassen ausgelöste Ereignisse: WakeupOnBehaviorPost Kombination von Ereignissen: WakeupAnd, WakeupAndOfOrs, WakeupOr, WakeupOrOfAnds und andere...

5 FH-Hof Beispiel für ein Behavior-Objekt im Szenengraph public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); TransformGroup trans = new TransformGroup(); trans.setCapability(TransformGroup.ALLOW_TRANSFORM _WRITE); objRoot.addChild(trans); MyBehavior beh = new MyBehavior(trans); beh.setSchedulingBounds(new BoundingSphere()); trans.addChild(beh);... }

6 FH-Hof Auswerten des Parameters der Methode processStimulus Alle relevanten Ereignisse werden der Methode processStimulus als ein Objekt der Klasse Enumeration übergeben. Zugriff auf die Ereignisse mit den Methoden: hasMoreElements nextElement Für die Abfrage eines Ereignis mit nextElement ist ein geeigneter Cast-Operator zu verwenden. In einigen Fällen kann ein Ereignis-Objekt mehrere elementare Ereignisse enthalten (z.B. WakeupOnAWTEvent)

7 FH-Hof Beispiel für die Auswertung des Parameters für processStimulus public void processStimulus(Enumeration criteria) { Object o; WakeupOnAWTEvent wu; AWTEvent[] events; while (criteria.hasMoreElements()) { o = criteria.nextElement(); if (o instanceof WakeupOnAWTEvent) { wu = (WakeupOnAWTEvent) o; events = wu.getAWTEvent(); for (int i = 0; i < events.length; i++) {... }

8 FH-Hof Auswahl von Objekten mit der Maus - Konzept Die Position eines Mausklicks im Canvas wird abgefragt. Ausgehend von dem Punkt im Canvas wird eine Linie entlang der Z-Achse erzeugt. Alle Objekte, welche die Linie berühren sind Kandidaten für die Auswahl. Nur registrierte Objekte (setPickable) werden bei der Auswahl berücksichtigt. Das erste registrierte Objekt wird in der Regel ausgewählt.

9 FH-Hof Auswahl von Objekten mit der Maus - Klasse PickMouseBehavior Die Klasse PickMouseBehavior implementiert: Initialize processStimulus PickMouseBehavior ruft die Methode updateScene mit den Koordinaten des Mausklicks auf. Das Attribut pickCanvas (Objekt der Klasse PickCanvas) übernimmt die Identifikation des selektierten Objekts. Der Entwickler muss eine Unterklasse von PickMouseBehavior mit der Methode updateScene implementieren!

10 FH-Hof Auswahl von Objekten mit der Maus - Beispiel für eine Unterklasse public class MyPickBehavior extends PickMouseBehavior { public MyPickBehavior (Canvas3D c, BranchGroup r, Bounds b) { super(c, r, b); this.setSchedulingBounds(b); pickCanvas.setMode(PickTool.BOUNDS); } public void updateScene(int xpos, int ypos) { pickCanvas.setShapeLocation(xpos, ypos); PickResult pickResult = pickCanvas.pickClosest(); if (pickResult != null) {... }}}

11 FH-Hof Auswahl von Objekten mit der Maus - Beispiel: Auswertung public class MyPickBehavior extends PickMouseBehavior {... public void updateScene(int xpos, int ypos) {... PickResult pickResult = pickCanvas.pickClosest(); if (pickResult != null) { SceneGraphPath path = pickResult.getSceneGraphPath(); Object o = path.getNode(path.nodeCount()-1); if (o instanceof TransformGroup) { tg = (TransformGroup) o; Enumeration children = tg.getAllChildren(); while (children.hasMoreElements()) {... }}}

12 FH-Hof Auswahl von Objekten mit der Maus - Verfahren für die Auswahl Argument für pickCanvas.setMode(... ): PickTool.BOUNDS: umschreibende Form PickTool.GEOMETRY: exakte Überprüfung zwischen Strahl und Geometrie PickTool.GEOMETRY_INTERSECT_INFO: exakte Überprüfung und Bestimmung der Überlappungsposition

13 FH-Hof Auswahl von Objekten mit der Maus - Knoten im Szenengraph public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); MyPickBehavior beh = new MyPickBehavior(this, objRoot, new BoundingSphere()); objRoot.addChild(beh); TransformGroup tg1 = new TransformGroup(); tg1.setCapability( TransformGroup.ENABLE_PICK_REPORTING); tg1.setCapability( TransformGroup.ALLOW_CHILDREN_READ);... objRoot.addChild(tg1); ColorCube cube = new ColorCube(0.2); cube.setPickable(true); tg1.addChild(cube1);...

14 FH-Hof Kommunikation zwischen Behavior-Objekten: Konzept Verwendung der Methode postId statt direktem Zugriff auf andere Behavior-Objekten. Mit postId werden durch Behavior-Objekte ausgelöste Ereignisse zusammen mit anderen Ereignissen einheitlich behandelt. Der Methode postId wird eine ganze Zahl zur Unterscheidung unterschiedlicher Ereignisse übergeben. Post-Ereignisse werden wie andere Ereignisse durch die Methode processStimulus bearbeitet.

15 FH-Hof Kommunikation zwischen Behavior-Objekten: Sender public class SendPost extends Behavior { private Node n; private WakeupCondition wakeup = new... ; public SendPost (... ) {... } public void initialize () {... } public void processStimulus(Enumeration criteria) {... other Beh.postId(1);... }

16 FH-Hof Kommunikation zwischen Behavior-Objekten: Empfänger public class ReceivePost extends Behavior {... public void processStimulus(Enumeration criteria) { Object o; WakeupOnBehaviorPost post while (criteria.hasMoreElements()) { o = criteria.nextElement();... if (o.getClass().getName() == "javax.media.j3d.WakeupOnBehaviorPost") { post = (WakeupOnBehaviorPost) o; int id = post.getPostId();... }

17 FH-Hof Kommunikation zwischen Behavior-Objekten: Beispiel


Herunterladen ppt "FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch."

Ähnliche Präsentationen


Google-Anzeigen