Title:

VRML & Java

Home
Publication List
deutsch
  
ISBN: 3827251575   ISBN: 3827251575   ISBN: 3827251575   ISBN: 3827251575 
 
  Wir empfehlen:       
 
VRML & Java

EAI - External Authoring Interface

Mittels des EAI ist es möglich den Inhalt eines VRML-Browsers innerhalb einer HTML-Seite über ein in dieselbe Seite eingebettetes Applet zu steuern, d.h. man verändert die VRML-Welt durch ein externes Interface. So kann die Welt dynamisch von außen zur Laufzeit erweitert / verändert werden (Erschaffung neuer Knoten / Ereignisse etc.).

Das EAI ist durch eine Plug-In-Architektur des WWW-Browsers mit dem VRML-Browser verbunden.

HTML-Datei

<HTML>
  <BODY>
     <APPLET CODE="test.class" MAYSCRIPT>
     </APPLET>
     <EMBED SRC="simple.wrl" WIDTH="300" HEIGHT="200">
  </BODY>
<HTML>

Die HTML-Datei enthält das eingebettete Applet und die VRML-Datei.

Über den Zusatz MAYSCRIPT im Applet-Tag erhält das Applet eine Instanz des vrml-Plug-In-Browsers. So ist es dem Applet möglich eine Instanz des Plug-In-Objektes zu erzeugen.

Applet

Um das externe Applet von Java aus realisieren zu können, werden folgende Klassen benötigt.

VRML-Pakete

  • vrml.external.Browser;
  • vrml.external.Node;
  • vrml.external.field.*;
  • vrml.external.exception.*;

Die in den Paketen verfügbaren Klassen bilden eine Erweiterung der Applet-Klasse. Um Events aus der VRML-Welt zu erhalten, kann zusätzlich das EventOutObserver-Interface implementiert werden.

Zu allererst muß eine Instanz vom Browser erschaffen werden.

Browser b = Browser.getBrowser();

Nachdem diese Verbindung aufgebaut ist, kann die VRML-Welt verändert werden. Es ist möglich auf Knoten über die Methode getNode(...) (durch Angabe des mit DEF definierten Knoten-Namens) zuzugreifen (falls der Knoten nicht gefunden wird, wird NULL zurückgeliefert).

Node TransformKnoten = b.getNode("TN");  //  DEF TN Transform { translation ....}

Existiert eine Referenz auf einen Knoten, so kann auf die Felder eventIn, eventOut und exposedField über die Methoden getEventIn(...) und getEventOut(...) zugegriffen werden (ebenfalls über den Namen). Da die Rückgabewerte jedoch für jeden Knoten unterschiedlich sind, muß das Feld vorher per cast in den richtigen Typ umgewandelt werden, bevor der Inhalt mit getValue() gelesen oder mit setValue(...) verändert werden kann.

EventInSFVec3f  TR = (EventInSFVec3f)TransformKnoten.getEventIn("translation");
float neuePosition[] = { 0 , 1 , 1 };
TR.setValue(neuePosition);

Um kontinuierlich Events empfangen zu können, muß folgendes getan werden:

  • das Interface EventOutObserver muß implementiert werden
  • es muß eine callback-Methode, die für die Verarbeitung der Ereignisse verantwortlich ist, geschrieben werden
  • es ist nötig eine neue Instanz des Observers zu erzeugen
  • die Events, auf die zugegriffen werden soll, müssen über die advise-Methode registriert werden

Beispiel EventOutObserver

class X implements EventOutObserver {

    public void callback (EventOut value, double timeStamp, Object data) { ... }

}

 

class Y {

    Y ( ) {

        Browser b = Browser.getBrowser();
        Node TouchSensorKnoten = b.getNode("TSK");

        X observe = new X();

        TouchSensorKnoten.getEventOut ( isOver ).advise (observe, null);

        }

 

Beispiel EAI

 

 

Index

  
VRML - das Kompendium : Einführung, Arbeitsbuch, Nachschlagewerk (Taschenbuch)
von Stephen N. Matsuba,
Bernie Roehl
Sonstige Artikel:
Gesammelte Werke (Gebundene Ausgabe)
von Manfred Hausmann
Von Advent bis Zuckerfest. Feste und Brauchtum im Jahreslauf (Taschenbuch)
von Willi Everding
Michael Bay's Texas Chainsaw Massacre
von Jessica Biel
 
    
     

Back to the topic sites:
ScientificPublication.com/Startseite/Informatik/Programmieren
StudyPaper.com/Startseite/Computer/Internet
StudyPaper.com/Startseite/Computer

External Links to this site are permitted without prior consent.

Publication List:
Scalable Vector Graphics (automatische Übersetzung)
Scalable Vector Graphics 1.1 (automatische Übersetzung)
   
  Home  |  deutsch  |  Set bookmark  |  Send a friend a link  |  Copyright ©  |  Impressum