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 Unterklassen von WakeupCondition Eingaben mit Maus und Tastatur: WakeupOnAWTEvent Kollisionen zwischen Objekten: WakeupOnCollisionEntry,... Von Behavior-Klassen ausgelöste Ereignisse: WakeupOnBehaviorPost Kombination von Ereignissen: WakeupAnd, WakeupOr, WakeupOrOfAnds,... und andere...

5 FH-Hof Behavior-Objekt im Szenengraph - Beispiel public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); TransformGroup trans = new TransformGroup(); trans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(trans); OtherBehavior beh = new OtherBehavior(trans); beh.setSchedulingBounds( new BoundingSphere()); trans.addChild(beh);... }

6 FH-Hof Parameter 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 Parameter der Methode 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 - Konzept Die Position eines Mausklicks im Canvas wird abgefragt. Ausgehend von dem Punkt im Canvas wird eine Linie senkrecht zur "Projektionsfläche" 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 - PickMouseBehavior Die Klasse PickMouseBehavior implementiert: initialize processStimulus PickMouseBehavior ruft die Methode updateScene mit 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 - Beispiel Unterklasse public class MyPickBeh extends PickMouseBehavior { public MyPickBeh ( 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 – Beispiel 1 updateScene public class MyPickBeh extends PickMouseBehavior {... public void updateScene(int xpos, int ypos) {... PickResult pickResult = pickCanvas.pickClosest(); if (pickResult != null) { Node node = pickResult.getObject();... // Operation für dieses Objekt, z.B.: Object obj = node.getUserData();... }}}

12 FH-Hof Auswahl von Objekten – Beispiel 2 updateScene public class MyPickBeh extends PickMouseBehavior {... public void updateScene(int xpos, int ypos) {... PickResult pickResult = pickCanvas.pickClosest(); if (pickResult != null) { SceneGraphPath path = pickResult.getSceneGraphPath(); if (path.nodeCount > 0) { Object o = path.getNode(path.nodeCount()-1); if (o instanceof TransformGroup) { tg = (TransformGroup) o;... }}}}

13 FH-Hof Auswahl von Objekten - Verfahren 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

14 FH-Hof Auswahl von Objekten – Szenengraph I public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); BoundingSphere bp = new BoundingSphere(); MyPickBeh beh = new MyPickBeh(this, objRoot, bp); objRoot.addChild(beh);... ColorCube cube = new ColorCube(0.2); MyClass myObject = new MyClass(...); cube.setUserData(myObject); cube.setPickable(true); objRoot.addChild(cube1);...

15 FH-Hof Auswahl von Objekten – Szenengraph II public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); BoundingSphere bp = new BoundingSphere(); MyPickBeh beh = new MyPickBeh(this, objRoot, bp); objRoot.addChild(beh); TransformGroup tg1 = new TransformGroup(); tg1.setCapability( TransformGroup.ENABLE_PICK_REPORTING);... objRoot.addChild(tg1); ColorCube cube = new ColorCube(0.2); cube.setPickable(true); tg1.addChild(cube);...


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