VRML & Java | |
Wenn eine VRML-Welt dynamisch auf Benutzereingaben reagieren soll, dann reichen die bisher vorgestellten Knoten nicht mehr aus. Damit konnten keine Zustände gespeichert werden, es bestand nicht die Möglichkeit komplexe Berechnungen durchzuführen oder auf bedingte Anweisungen zu reagieren. Für solche Probleme steht ein Script-Knoten zur Verfügung, der Ereignisse empfangen, verarbeiten und senden kann.
Der Script-Knoten ist ein Bindeglied zu einer programmierbaren Schnittstelle, wobei diese entweder eine Skriptsprache wie JavaScript / VRMLScript oder eine Programmiersprache wie Java sein kann.
Java bietet im Vergleich zu den Skriptsprachen eine bessere Modularität, gewährleistet eine schnellere Ausführung und hat den Vorteil Netzwerkfunktionen implementieren zu können.
Script {
exposedField | MFString | url | [] |
field | MFBool | directOutput | FALSE |
field | MFBool | mustEvaluate | FALSE |
eventIn | eventType | eventName | |
field | fieldType | fieldName | Default |
eventOut | eventType | eventName |
}
Der Script-Knoten fungiert als Gateway zwischen VRML-Welt und dem Skript. Im url-Feld kann entweder eine Adresse zu einer Code-Datei (Java-Bytecode) oder der Programmcode einer Skriptsprache stehen. Ereignisse, die vom Script-Knoten empfangen werden, werden direkt zu der entsprechenden Funktion innerhalb der an das Skript gebundenen Sprache weitergeleitet.DEF X Script {
url | "Y.class" | ||
field | SFFloat | Wert | 2.0 |
eventIn | SFFloat | set_fraction | |
eventOut | SFVec3f | value_changed |
}
Um den Transfer von Daten & Events in die Programmiersprache Java zu gewährleisten benötigt man spezielle Klassen und Methoden.
VRML-Packages für Java
Die VRML-Packages gehören nicht zum Standardsprachumfang, sind aber bei VRML-Browsern, die Java unterstützen enthalten.
Diese VRML-Packages müssen importiert werden und es muß eine öffentliche Methode vorhanden sein, die die Script-Klasse erweitert.
import vrml.*;
import vrml.field.*;
import vrml.node.*;
public class Y extends Script
{
....
}
Alle VRML-Klassen sind aus java.lang abgeleitet ( die Exception-Klassen aus java.lang.Exception und alle anderen Klassen aus java.lang.Object ).
Methoden, die den Namen, den Zeitstempel oder den Wert eines Ereignisses liefern | |
Standardmethoden, um den Status des Browsers zu erhalten / verändern | |
Methoden zur Konvertierung der Datenformate
zwischen VRML und Java (SingleField & MultipleField). Lesen / Schreiben von Feldinhalten über getValue() / setValue() (bei Const-Feldern nur getValue()) möglich. |
|
direkter Zugriff auf eventIn / eventOut Felder (über die Angabe des Namens) | |
Basismethoden |
Die initialize()-Methode wird einmalig zum Programmstart ausgeführt.
Auf Felder & Events kann über die Methoden getField(...), getEventOut(...) und getEventIn(...) durch Angabe des Namens zugegriffen werden.
Die Ereignisverarbeitung geschieht über die Methoden processEvent(...) und processEvents(...), die immer genau dann aufgerufen werden, wenn an den Script-Knoten ein Ereignis weitergeleitet wird. Nach der Abarbeitung eines processEvents(...) wird die Methode eventsProcessed(...) aufgerufen.
Wird der Script-Knoten gelöscht oder die VRML-Welt durch eine andere ersetzt, ruft das Programm abschließend die shutdown()-Methode auf.