This annex describes the Java classes and methods that allow Script nodes (see "6.40 Script") to interact with associated scenes. See "4.12 Scripting" for a general description of scripting languages in VRML. Note that Java is not required by VRML, but any implementation of Java with VRML Script nodes must conform with the requirements specified in this annex.
Java(tm) is an object-oriented, platform-independent, multi-threaded, general-purpose programming environment developed at Sun Microsystems, Inc. See [JAVA] for a full description of the Java programming language . This annex describes the Java bindings of VRML to the Script node.
The url field of the Script node contains the URL of a file containing the Java byte code, for example:
Script { url "http://foo.co.jp/Example.class" eventIn SFBool start }
The file extension for Java byte code is .class.
The MIME type for Java byte code is defined as follows:
Events to the Script node are passed to the corresponding Java method (processEvent or processEvents) in the script. It is necessary to specify the script in the url field of the Script node.
If a Java byte code file is specified in the url field, the following three conditions shall hold:
For example, the following Script node has one eventIn field whose name is start.
Script { url "http://foo.co.jp/Example1.class" eventIn SFBool start }
This node points to the script file Example1.class. Its source (Example1.java) looks like this:
import vrml.*; import vrml.field.*; import vrml.node.*; public class Example1 extends Script { ... // This method is called when any event is received public void processEvent (Event e) { // ... perform some operation ... } }
In the above example, when the start eventIn is sent the processEvent() method is executed and receives the eventIn.
When a Script node receives an eventIn, a processEvent() or processEvents() method in the file specified in url field of the Script node is called, which receives the eventIn as Java objects (Event object, see "B.4.3 processEvent() and processEvents() method").
The Event object has three fields of information associated with it: name, value and timestamp whose values are passed by the eventIn. These can be retrieved using the corresponding method on the Event object.
public class Event implements Cloneable { public String getName(); public ConstField getValue(); public double getTimeStamp(); // other methods ... }
Suppose that the eventIn type is SFXXX and eventIn name is eventInYYY, then
In the example below, the eventIn name is start and the eventIn value is cast to ConstSFBool. Also, the timestamp for the time when the eventIn occurred is available as a double. These are passed as an Event object to processEvent() method:
public void processEvent(Event e) { if(e.getName().equals("start")){ ConstSFBool v = (ConstSFBool)e.getValue(); if(v.getValue()==true){ // ... perform some operation with e.getTimeStamp()... } } }
Authors can define a processEvents() method within a class that is called when the script receives some set of events. The prototype of processEvents() method is
public void processEvents(int count, Event events[]);
count indicates the number of events delivered. events is the array of events delivered. Its default behavior is to iterate over each event, calling processEvent() on each one as follows:
public void processEvents(int count, Event events[]) { for (int i = 0; i < count; i++) { processEvent( events[i] ); } }
Although authors might change this operation by giving a user-defined processEvents() method, in most cases, they only change processEvent() method and eventsProcessed() method as described below.
When multiple eventIns are routed from single node to single script node and eventIns which have the same timestamp are received, processEvents() receives multiple events as an event array. Otherwise, each incoming event invokes separate processEvents().
For example, the processEvents() method receives two events in the following case:
Transform { children [ DEF TS TouchSensor {} Shape { geometry Cone {} } ] } DEF SC Script { url "Example.class" eventIn SFBool isActive eventIn SFTime touchTime } ROUTE TS.isActive TO SC.isActive ROUTE TS.touchTime TO SC.touchTime
Authors can define a processEvent() method within a class. The prototype of processEvent() is
public void processEvent(Event event);
Its default behavior is no operation.
Authors can define an eventsProcessed() method within a class that is called after some set of events has been received. This allows Script nodes that do not rely on the ordering of events received to generate fewer events than an equivalent Script node that generates events whenever events are received. The eventsProcessed() method is called after every invocation of processEvents().
Events generated from an eventsProcessed() method are given the timestamp of the last event processed.
The prototype of eventsProcessed() method is
public void eventsProcessed();
Its default behavior is no operation.
Authors can define a shutdown() method within a class that is called when the corresponding Script node is deleted.
The prototype of shutdown() method is
public void shutdown();
Its default behavior is no operation.
Authors can define an initialize() method within a class that is called before any event is generated. The various methods on Script such as getEventIn(), getEventOut(), getExposedField(), and getField() are not guaranteed to return correct values before the call to initialize() (i. e., in the constructor). initialize() is called once during the life of Script object.
The prototype of initialize() method is
public void initialize();
Its default behavior is no operation. See Example2.class in paragraph B.5.1 for an example user-specified initialize() method.
The fields, eventIns, and eventOuts of a Script node are accessible from their corresponding Java classes.
Each field defined in the Script node is available to the script by using its name. Its value can be read or written. This value is persistent across function calls. EventOuts defined in the Script node can also be read. EventIns defined in the Script node can also be written to.
Accessing fields of Script node can be done by using the three following types of Script class methods:
When you call the setValue(), set1Value(), addValue(), insertValue(), delete() or clear() method on a Field object obtained by the getField() method, the new value is stored in the corresponding VRML node's field (see also "B.6.3 Array handling"). In the case of the set1Value(), addValue(), insertValue() or delete() methods, essentially all elements of a VRML node's field are retrieved, then the value specified as an argument is set, added, inserted, deleted (as appropriate) to/from the elements, and then stored as the elements in the corresponding VRML node's field. In the case of the clear() method, all elements of a VRML node's field are cleared (see the definition of clear() method).
When you call the setValue(), set1Value(), addValue(), insertValue(), delete() or clear() method on a Field object obtained by the getEventOut() method, the call generates an eventOut in the VRML scene (see also "B.6.3 Array handling"). The effect of this eventOut is specified by the associated Route in the VRML scene. In the case of the set1Value(), addValue(), insertValue() or delete() methods, essentially all elements of VRML node's eventOut field are retrieved, then the value specified as an argument is set, added, inserted or deleted (as appropriate) to/from the elements, then stored as the elements in the corresponding VRML node's eventOut field, and then the elements are sent as an eventOut. In the case of the clear() method, all elements of VRML node's eventOut field are cleared (see the definition of clear() method).
When you call setValue() or clear() method on a Field object obtained by getEventIn() method, the call generates an eventIn to the Script node. When you call the set1Value(), addValue(), insertValue() or delete() method on a Field object obtained by the getEventIn() method, the exception (InvalidFieldChangeException) is thrown.
For example, the following Script node (Example2) defines an eventIn start, a field state, and an eventOut on. The method initialize() is invoked before any events are received, and the method processEvent() is invoked when start receives an event:
Script { url "Example2.class" eventIn SFBool start field SFBool state TRUE eventOut SFBool on }
// Example2 toggles a persistent field variables "state" in both // the applet and VRML Script node each time when eventIn "start" // is received, then sets eventOut "on" equal to true and returns it // to the VRML Script node import vrml.*; import vrml.field.*; import vrml.node.*; public class Example2 extends Script { private SFBool state; // field private SFBool on; // eventOut public void initialize(){ state = (SFBool) getField("state"); on = (SFBool) getEventOut("on"); } public void processEvent(Event e) { if(state.getValue()==true){ on.setValue(false); // set false to eventOut 'on' state.setValue(false); } else { on.setValue(true); // set true to eventOut 'on' state.setValue(true); } } }
If a script program has an access to a node, then any eventIn, eventOut or exposedField of that node is accessible by using the getEventIn(), getEventOut() or getExposedField() method defined on the node's class (see "B.6 Exposed classes and methods for nodes and fields").
The typical way for a script program to have an access to another VRML node is to have an SFNode field which provides a reference to the other node. The following Example3 shows how this is done:
DEF SomeNode Transform { } Script { field SFNode node USE SomeNode # SomeNode should be a Transform node eventIn SFVec3f pos # new value to be inserted in SomeNode's # translation field url "Example3.class" } Example3.java: import vrml.*; import vrml.field.*; import vrml.node.*; public class Example3 extends Script { private SFNode node; // field private SFVec3f trans; // translation field captured from remote // Transform node public void initialize(){ node = (SFNode) getField("node"); } public void processEvent(Event e) { // gets the reference to 'translation' field of Transform node trans = (SFVec3f)((Node) node.getValue()).getExposedField("translation"); // reset translation to value given Event e, which is eventIn pos // in the VRML Script node. trans.setValue((ConstSFVec3f)e.getValue()); } }
Assume that the thread which executes processEvent() (or processEvents()) is called 'main' thread and any other thread, except for the 'main' thread, is called 'sub' thread. Sending eventOuts/eventIns in 'main' thread follows the model described in "4.10.3 Execution model" and sending eventOuts/eventIns in any 'sub' thread follows the model described in "4.12.6 Asynchronous scripts."
In the 'main' thread: Calling one of the setValue(), set1Value, addValue(), insertValue(), clear() or delete() methods on an eventOut/eventIn sends that event at that time. Calling the methods multiple times during one execution of the thread still only sends one event which corresponds to the first call of the method. All other calls are ignored. The event is assigned the same timestamp as the initial event which caused the main thread to execute.
In the 'sub' thread: Calling one of the setValue(), set1Value, addValue(), insertValue(), clear() or delete() method on an eventOut/eventIn sends that event at that time. Calling the methods multiple times during one execution of the thread sends one event per call of the method. The browser assigns the timestamp to the event.
Note: sending eventIns is ordinarily performed by the VRML scene, not Java applets. Exceptions may result as specified in paragraph B.5.1.
Java classes for VRML are defined in the packages: vrml, vrml.node and vrml.field.
The Field class extends Java's Object class by default; thus, Field has the full functionality of the Object class, including the getClass() method. The rest of the package defines a "Const" read-only class for each VRML field type, with a getValue() method for each class; and another read/write class for each VRML field type, with both getValue() and setValue() methods for each class. A getValue() method converts a VRML-type value into a Java-type value. A setValue() method converts a Java-type value into a VRML-type value and sets it to the VRML field. Note that names for corresponding VRML-types and Java-types are identical.
Most of the setValue() methods and set1Value() methods are listed as "throws exception," meaning that errors are possible. It may be necessary to write exception handlers (using Java's catch() method) when those methods are used. Any method not listed as "throws exception" is guaranteed to generate no exceptions. Each method that throws an exception includes a prototype showing which exception(s) can be thrown.
All VRML data types have equivalent classes in Java. The Field class is the root of all field types.
public abstract class Field implements Cloneable { // methods }
This class has two subclasses: read-only classes and writable classes
SFBool, SFColor, MFColor, SFFloat, MFFloat, SFImage, SFInt32, MFInt32, SFNode, MFNode, SFRotation, MFRotation, SFString, MFString, SFVec2f, MFVec2f, SFVec3f, MFVec3f, SFTime, MFTime
The Java Field class and its subclasses have several methods to get and set values: getSize(), getValue(), get1Value(), setValue(), set1Value(), addValue(), insertValue(), clear(), delete() and toString(). In these methods, getSize(), get1Value(), set1Value(), addValue(), insertValue(), clear() and delete() are only available for multiple value field classes(MF classes). See also "B.6.3 Array handling" and "B.9.2.1 vrml Package" for each class' methods definition.
Some constructors and other methods of the field classes take an array as an argument.
float colors[]
colors[] consists of a set of three float-values (representing red, green and blue).
float rotations[]
rotations[] consists of a set of four float-values (representing axisX, axisY, axisZ and angle).
float vec2s[]
vec2s[] consists of a set of two float-values (representing x and y).
float vec3s[]
vec3s[] consists of a set of three float-values (representing x, y and z).
float colors[][]
colors[][] consists of an array of three float-values (representing red, green and blue).
float rotations[][]
rotations[][] consists of an array of four float-values (representing axisX, axisY, axisZ and angle).
float vec2s[][]
vec2s[][] consists of an array of two float-values (representing x and y).
float vec3s[][]
vec3s[][] consists of an array of three float-values (representing x, y and z).
The following describes how arrays are interpreted in detail for each
constructor and method.
Suppose NA represents the number of elements in the array specified
as an argument of some constructors and other methods, and NT represents
the number of elements which the target object requires or has. For example,
if the target object is SFColor, it requires exactly 3 float values.
In the following description, suppose SF* represents subclasses of Field class, ConstSF* represents subclasses of ConstField class, MF* represents subclasses of MField class and ConstMF* represents subclasses of ConstMField class.
- SFColor and ConstSFColor, NT is exactly 3.
- MFColor and ConstMFColor, NT is a multiple of 3, and NA is rounded down to a multiple of 3.
- SFRotation and ConstSFRotation, NT is exactly 4.
- MFRotation and ConstMFRotation, NT is a multiple of 4, and NA is rounded down to a multiple of 4.
- SFVec2f and ConstSFVec2f, NT is exactly 2.
- MFVec2f and ConstMFVec2f, NT is a multiple of 2, and NA is rounded down to a multiple of 2.
- SFVec3f and ConstSFVec3f, NT is exactly 3.
- MFVec3f and ConstMFVec3f, NT is a multiple of 3, and NA is rounded down to a multiple of 3.
For example, when the array is used as an argument of the setValue()
for SFColor, the array shall contain at least 3 float values. If the array
contains more than 3 float values, the first 3 values are used.
For example, when the array is used as an argument of the constructor for MFColor, the array shall contain at least 3 float values. If the array contains 3N, 3N +1 or 3N + 2 float values, the first 3N values are used.
The valid elements are copied to a new array and the rules for a single-dimensional array are applied to the new array for each methods.
The Node class has several methods: getType(), getEventOut(), getEventIn(), getExposedField(), getBrowser() and toString().
When you call the setValue(), set1Value(), addValue(), insertValue(), delete() or clear() method on a Field object obtained by the getExposedField() method, the call generates an eventOut in the VRML scene (see also "B.6.3 Array handling"). The effect of this eventOut is specified by the associated Route in the VRML scene. In the case of the set1Value(), addValue(), insertValue() or delete() methods, essentially all elements of VRML node's exposedField are retrieved, then the value specified as an argument is set, added, inserted or deleted (as appropriate) to/from the elements, then stored as the elements in the corresponding VRML node's exposedField, and then the elements are sent as an eventOut. In the case of the clear() method, all elements of VRML node's exposedField are cleared (see the definition of clear() method).
When you call setValue() or clear() method on a Field object obtained by getEventIn() method, the call generates an eventIn to the Script node. When you call the set1Value(), addValue(), insertValue() or delete() method on the Field object, an exception (InvalidFieldChangeException) is thrown.
This section lists the public Java interfaces to the Browser class, which allows scripts to get and set browser information. For descriptions of the following methods, see "4.12.10 Browser Script Interface." Table B.1 lists the Browser class methods.
Return value |
Method name |
String | getName() |
String | getVersion() |
float | getCurrentSpeed() |
float | getCurrentFrameRate() |
String | getWorldURL() |
void | replaceWorld(BaseNode[] nodes) |
BaseNode[] | createVrmlFromString(String vrmlSyntax) |
void | createVrmlFromURL(String[] url, BaseNode node
String event) |
void | addRoute(BaseNode fromNode, String fromEventOut,
BaseNode toNode, String toEventIn) |
void | deleteRoute(BaseNode fromNode, String fromEventOut,
BaseNode toNode, String toEventIn) |
void | loadURL(String[] url, String[] parameter) |
void | setDescription(String description) |
See "B.9.2.1 vrml Package" for each method's definition.
Table B.2 contains conversions from the types used in Browser class to Java types.
VRML type |
Java type |
---|---|
SFString |
String |
SFFloat |
float |
MFString |
String[] |
MFNode |
BaseNode[] |
When a relative URL is specified as an argument of loadURL() and createVrmlFromURL(), the path is relative to the VRML file that contains the Script node.
The Java classes defined by a user can be used in the Java program. They are first searched from the directories specified in the CLASSPATH environment variable and then the directory where the Java program is placed.
If the Java class is in a package, this package is searched from the directories specified in the CLASSPATH environment variable and then the directory where the Java program is placed.
Java programs have access to the full set of classes available in java.*. All parts of Java are required to work as "normal" for Java. So all methods specified in this annex are required to be thread-safe. The security model is browser specific.
Java methods may throw the following exceptions:
It is not guaranteed that such exceptions will be thrown.
If exceptions are not redefined by authors, a browser's behavior is unspecified (see "B.10 Example of exception class").
The following is an example of a Script node which determines whether a given color contains a lot of red. The Script node exposes a color field, an eventIn, and an eventOut:
Script { field SFColor currentColor 0 0 0 eventIn SFColor colorIn eventOut SFBool isRed url "Example4.class" }
The following is the source code for the Example4.java file that gets called every time an eventIn is routed to the above Script node:
Example4.java:
import vrml.*; import vrml.field.*; import vrml.node.*; public class Example4 extends Script { // Declare field(s) private SFColor currentColor; // Declare eventOut private SFBool isRed; // buffer for SFColor.getValue(). private float colorBuff[] = new float[3]; public void initialize(){ currentColor = (SFColor) getField("currentColor"); isRed = (SFBool) getEventOut("isRed"); } public void processEvent(Event e){ // This method is called when a colorIn event is received currentColor.setValue((ConstSFColor)e.getValue()); } public void eventsProcessed() { currentColor.getValue(colorBuff); if (colorBuff[0] >= 0.5) // if red is at or above 50% isRed.setValue(true); } }
Details on when the methods defined in Example4.java are called may be found in "4.10.3 Execution Model."
DEF Example5 Script { url "Example5.class" field MFString target_url "foo.wrl" eventIn MFNode nodesLoaded eventIn SFBool trigger_event } Example5.java: import vrml.*; import vrml.field.*; import vrml.node.*; public class Example5 extends Script { private MFString target_url; // field private Browser browser; public void initialize(){ target_url = (MFString)getField("target_url"); browser = this.getBrowser(); } public void processEvent(Event e){ if(e.getName().equals("trigger_event")){ // do something and then fetch values String[] urls; urls = new String[target_url.getSize()]; target_url.getValue(urls); browser.createVrmlFromURL(urls, this, "nodesLoaded"); } if(e.getName().equals("nodesLoaded")){ // do something } } }
DEF Sensor TouchSensor {} DEF Example Script { url "Example6.class" field SFNode fromNode USE Sensor eventIn SFBool clicked eventIn SFBool trigger_event }
Example6.java: import vrml.*; import vrml.field.*; import vrml.node.*; public class Example6 xtends Script { private SFNode fromNode; private Browser browser; public void initialize(){ fromNode = (SFNode) getField("fromNode"); browser = this.getBrowser(); } public void processEvent(Event e){ if(e.getName().equals("trigger_event")){ // do something and then add routing browser.addRoute(fromNode.getValue(), "isActive", this, "clicked"); } if(e.getName().equals("clicked")){ // do something } } }
The classes are divided into three packages: vrml, vrml.field and vrml.node.
java.lang.Object | +- vrml.Event +- vrml.Browser +- vrml.Field | +- vrml.field.SFBool | +- vrml.field.SFColor | +- vrml.field.SFFloat | +- vrml.field.SFImage | +- vrml.field.SFInt32 | +- vrml.field.SFNode | +- vrml.field.SFRotation | +- vrml.field.SFString | +- vrml.field.SFTime | +- vrml.field.SFVec2f | +- vrml.field.SFVec3f | | | +- vrml.MField | | +- vrml.field.MFColor | | +- vrml.field.MFFloat | | +- vrml.field.MFInt32 | | +- vrml.field.MFNode | | +- vrml.field.MFRotation | | +- vrml.field.MFString | | +- vrml.field.MFTime | | +- vrml.field.MFVec2f | | +- vrml.field.MFVec3f | | | +- vrml.ConstField | +- vrml.field.ConstSFBool | +- vrml.field.ConstSFColor | +- vrml.field.ConstSFFloat | +- vrml.field.ConstSFImage | +- vrml.field.ConstSFInt32 | +- vrml.field.ConstSFNode | +- vrml.field.ConstSFRotation | +- vrml.field.ConstSFString | +- vrml.field.ConstSFTime | +- vrml.field.ConstSFVec2f | +- vrml.field.ConstSFVec3f | | | +- vrml.ConstMField | +- vrml.field.ConstMFColor | +- vrml.field.ConstMFFloat | +- vrml.field.ConstMFInt32 | +- vrml.field.ConstMFNode | +- vrml.field.ConstMFRotation | +- vrml.field.ConstMFString | +- vrml.field.ConstMFTime | +- vrml.field.ConstMFVec2f | +- vrml.field.ConstMFVec3f | +- vrml.BaseNode +- vrml.node.Node +- vrml.node.Script java.lang.Exception +- java.lang.RuntimeException +- vrml.InvalidEventInException +- vrml.InvalidEventOutException +- vrml.InvalidExposedFieldException +- vrml.InvalidFieldChangeException +- vrml.InvalidFieldException +- vrml.InvalidRouteException +- vrml.InvalidVRMLSyntaxException
package vrml; public class Event implements Cloneable { public String getName(); public double getTimeStamp(); public ConstField getValue(); public Object clone(); // This overrides a method in Object public String toString(); } public class Browser { private Browser(); // This overrides a method in Object public String toString(); // Browser interface public String getName(); public String getVersion(); public float getCurrentSpeed(); public float getCurrentFrameRate(); public String getWorldURL(); public void replaceWorld(BaseNode[] nodes); public BaseNode[] createVrmlFromString(String vrmlSyntax) throws InvalidVRMLSyntaxException; public void createVrmlFromURL(String[] url, BaseNode node, String event) public void addRoute(BaseNode fromNode, String fromEventOut, BaseNode toNode, String toEventIn); public void deleteRoute(BaseNode fromNode, String fromEventOut, BaseNode toNode, String toEventIn); public void loadURL(String[] url, String[] parameter) public void setDescription(String description); } public abstract class Field implements Cloneable { public Object clone(); } public abstract class MField extends Field { public abstract int getSize(); public abstract void clear(); public abstract void delete(int index); } public abstract class ConstField extends Field { } public abstract class ConstMField extends ConstField { public abstract int getSize(); } // // This is the general BaseNode class // public abstract class BaseNode { // Returns the type of the node. If the node is a prototype // it returns the name of the prototype. public String getType(); // Get the Browser that this node is contained in. public Browser getBrowser(); }
package vrml.field; public class SFBool extends Field { public SFBool(); public SFBool(boolean value); public boolean getValue(); public void setValue(boolean b); public void setValue(ConstSFBool b); public void setValue(SFBool b); // This overrides a method in Object public String toString(); } public class SFColor extends Field { public SFColor(); public SFColor(float red, float green, float blue); public void getValue(float colors[]); public float getRed(); public float getGreen(); public float getBlue(); public void setValue(float colors[]); public void setValue(float red, float green, float blue); public void setValue(ConstSFColor color); public void setValue(SFColor color); // This overrides a method in Object public String toString(); } public class SFFloat extends Field { public SFFloat(); public SFFloat(float f); public float getValue(); public void setValue(float f); public void setValue(ConstSFFloat f); public void setValue(SFFloat f); // This overrides a method in Object public String toString(); } public class SFImage extends Field { public SFImage(); public SFImage(int width, int height, int components, byte pixels[]); public int getWidth(); public int getHeight(); public int getComponents(); public void getPixels(byte pixels[]); public void setValue(int width, int height, int components, byte pixels[]); public void setValue(ConstSFImage image); public void setValue(SFImage image); // This overrides a method in Object public String toString(); } public class SFInt32 extends Field { public SFInt32(); public SFInt32(int value); public int getValue(); public void setValue(int i); public void setValue(ConstSFInt32 i); public void setValue(SFInt32 i); // This overrides a method in Object public String toString(); } public class SFNode extends Field { public SFNode(); public SFNode(BaseNode node); public BaseNode getValue(); public void setValue(BaseNode node); public void setValue(ConstSFNode node); public void setValue(SFNode node); // This overrides a method in Object public String toString(); } public class SFRotation extends Field { public SFRotation(); public SFRotation(float axisX, float axisY, float axisZ, float angle); public void getValue(float rotations[]); public void setValue(float rotations[]); public void setValue(float axisX, float axisY, float axisZ, float angle); public void setValue(ConstSFRotation rotation); public void setValue(SFRotation rotation); // This overrides a method in Object public String toString(); } public class SFString extends Field { public SFString(); public SFString(String s); public String getValue(); public void setValue(String s); public void setValue(ConstSFString s); public void setValue(SFString s); // This overrides a method in Object public String toString(); } public class SFTime extends Field { public SFTime(); public SFTime(double time); public double getValue(); public void setValue(double time); public void setValue(ConstSFTime time); public void setValue(SFTime time); // This overrides a method in Object public String toString(); } public class SFVec2f extends Field { public SFVec2f(); public SFVec2f(float x, float y); public void getValue(float vec2s[]); public float getX(); public float getY(); public void setValue(float vec2s[]); public void setValue(float x, float y); public void setValue(ConstSFVec2f vec); public void setValue(SFVec2f vec); // This overrides a method in Object public String toString(); } public class SFVec3f extends Field { public SFVec3f(); public SFVec3f(float x, float y, float z); public void getValue(float vec3s[]); public float getX(); public float getY(); public float getZ(); public void setValue(float vec3s[]); public void setValue(float x, float y, float z); public void setValue(ConstSFVec3f vec); public void setValue(SFVec3f vec); // This overrides a method in Object public String toString(); } public class MFColor extends MField { public MFColor(); public MFColor(float colors[][]); public MFColor(float colors[]); public MFColor(int size, float colors[]); public void getValue(float colors[][]); public void getValue(float colors[]); public void setValue(float colors[][]); public void setValue(float colors[]); public void setValue(int size, float colors[]); /**************************************************** color[0] ... color[size - 1] are used as color data in the way that color[0], color[1], and color[2] represent the first color. The number of colors is defined as "size / 3". ***************************************************/ public void setValue(MFColor colors); public void setValue(ConstMFColor colors); public void get1Value(int index, float colors[]); public void get1Value(int index, SFColor color); public void set1Value(int index, ConstSFColor color); public void set1Value(int index, SFColor color); public void set1Value(int index, float red, float green, float blue); public void addValue(ConstSFColor color); public void addValue(SFColor color); public void addValue(float red, float green, float blue); public void insertValue(int index, ConstSFColor color); public void insertValue(int index, SFColor color); public void insertValue(int index, float red, float green, float blue); // This overrides a method in Object public String toString(); } public class MFFloat extends MField { public MFFloat(); public MFFloat(int size, float values[]); public MFFloat(float values[]); public void getValue(float values[]); public void setValue(float values[]); public void setValue(int size, float values[]); public void setValue(MFFloat value); public void setValue(ConstMFFloat value); public float get1Value(int index); public void set1Value(int index, float f); public void set1Value(int index, ConstSFFloat f); public void set1Value(int index, SFFloat f); public void addValue(float f); public void addValue(ConstSFFloat f); public void addValue(SFFloat f); public void insertValue(int index, float f); public void insertValue(int index, ConstSFFloat f); public void insertValue(int index, SFFloat f); // This overrides a method in Object public String toString(); } public class MFInt32 extends MField { public MFInt32(); public MFInt32(int size, int values[]); public MFInt32(int values[]); public void getValue(int values[]); public void setValue(int values[]); public void setValue(int size, int values[]); public void setValue(MFInt32 value); public void setValue(ConstMFInt32 value); public int get1Value(int index); public void set1Value(int index, int i); public void set1Value(int index, ConstSFInt32 i); public void set1Value(int index, SFInt32 i); public void addValue(int i); public void addValue(ConstSFInt32 i); public void addValue(SFInt32 i); public void insertValue(int index, int i); public void insertValue(int index, ConstSFInt32 i); public void insertValue(int index, SFInt32 i); // This overrides a method in Object public String toString(); } public class MFNode extends MField { public MFNode(); public MFNode(int size, BaseNode node[]); public MFNode(BaseNode node[]); public void getValue(BaseNode node[]); public void setValue(BaseNode node[]); public void setValue(int size, BaseNode node[]); public void setValue(MFNode node); public void setValue(ConstMFNode node); public BaseNode get1Value(int index); public void set1Value(int index, BaseNode node); public void set1Value(int index, ConstSFNode node); public void set1Value(int index, SFNode node); public void addValue(BaseNode node); public void addValue(ConstSFNode node); public void addValue(SFNode node); public void insertValue(int index, BaseNode node); public void insertValue(int index, ConstSFNode node); public void insertValue(int index, SFNode node); // This overrides a method in Object public String toString(); } public class MFRotation extends MField { public MFRotation(); public MFRotation(float rotations[][]); public MFRotation(float rotations[]); public MFRotation(int size, float rotations[]); public void getValue(float rotations[][]); public void getValue(float rotations[]); public void setValue(float rotations[][]); public void setValue(float rotations[]); public void setValue(int size, float rotations[]); public void setValue(MFRotation rotations); public void setValue(ConstMFRotation rotations); public void get1Value(int index, float rotations[]); public void get1Value(int index, SFRotation rotation); public void set1Value(int index, ConstSFRotation rotation); public void set1Value(int index, SFRotation rotation); public void set1Value(int index, float axisX, float axisY, float axisZ, float angle); public void addValue(ConstSFRotation rotation); public void addValue(SFRotation rotation); public void addValue(float axisX, float axisY, float axisZ, float angle); public void insertValue(int index, ConstSFRotation rotation); public void insertValue(int index, SFRotation rotation); public void insertValue(int index, float axisX, float axisY, float axisZ, float angle); // This overrides a method in Object public String toString(); } public class MFString extends MField { public MFString(); public MFString(int size, String s[]); public MFString(String s[]); public void getValue(String s[]); public void setValue(String s[]); public void setValue(int size, String s[]); public void setValue(MFString s); public void setValue(ConstMFString s); public String get1Value(int index); public void set1Value(int index, String s); public void set1Value(int index, ConstSFString s); public void set1Value(int index, SFString s); public void addValue(String s); public void addValue(ConstSFString s); public void addValue(SFString s); public void insertValue(int index, String s); public void insertValue(int index, ConstSFString s); public void insertValue(int index, SFString s); // This overrides a method in Object public String toString(); } public class MFTime extends MField { public MFTime(); public MFTime(int size, double times[]); public MFTime(double times[]); public void getValue(double times[]); public void setValue(double times[]); public void setValue(int size, double times[]); public void setValue(MFTime times); public void setValue(ConstMFTime times); public double get1Value(int index); public void set1Value(int index, double time); public void set1Value(int index, ConstSFTime time); public void set1Value(int index, SFTime time); public void addValue(double time); public void addValue(ConstSFTime time); public void addValue(SFTime time); public void insertValue(int index, double time); public void insertValue(int index, ConstSFTime time); public void insertValue(int index, SFTime time); // This overrides a method in Object public String toString(); } public class MFVec2f extends MField { public MFVec2f(); public MFVec2f(float vec2s[][]); public MFVec2f(float vec2s[]); public MFVec2f(int size, float vec2s[]); public void getValue(float vec2s[][]); public void getValue(float vec2s[]); public void setValue(float vec2s[][]); public void setValue(float vec2s[]); public void setValue(int size, float vec2s[]); public void setValue(MFVec2f vecs); public void setValue(ConstMFVec2f vecs); public void get1Value(int index, float vec2s[]); public void get1Value(int index, SFVec2f vec); public void set1Value(int index, float x, float y); public void set1Value(int index, ConstSFVec2f vec); public void set1Value(int index, SFVec2f vec); public void addValue(float x, float y); public void addValue(ConstSFVec2f vec); public void addValue(SFVec2f vec); public void insertValue(int index, float x, float y); public void insertValue(int index, ConstSFVec2f vec); public void insertValue(int index, SFVec2f vec); // This overrides a method in Object public String toString(); } public class MFVec3f extends MField { public MFVec3f(); public MFVec3f(float vec3s[][]); public MFVec3f(float vec3s[]); public MFVec3f(int size, float vec3s[]); public void getValue(float vec3s[][]); public void getValue(float vec3s[]); public void setValue(float vec3s[][]); public void setValue(float vec3s[]); public void setValue(int size, float vec3s[]); public void setValue(MFVec3f vecs); public void setValue(ConstMFVec3f vecs); public void get1Value(int index, float vec3s[]); public void get1Value(int index, SFVec3f vec); public void set1Value(int index, float x, float y, float z); public void set1Value(int index, ConstSFVec3f vec); public void set1Value(int index, SFVec3f vec); public void addValue(float x, float y, float z); public void addValue(ConstSFVec3f vec); public void addValue(SFVec3f vec); public void insertValue(int index, float x, float y, float z); public void insertValue(int index, ConstSFVec3f vec); public void insertValue(int index, SFVec3f vec); // This overrides a method in Object public String toString(); } public class ConstSFBool extends ConstField { public ConstSFBool(boolean value); public boolean getValue(); // This overrides a method in Object public String toString(); } public class ConstSFColor extends ConstField { public ConstSFColor(float red, float green, float blue); public void getValue(float colors[]); public float getRed(); public float getGreen(); public float getBlue(); // This overrides a method in Object public String toString(); } public class ConstSFFloat extends ConstField { public ConstSFFloat(float value); public float getValue(); // This overrides a method in Object public String toString(); } public class ConstSFImage extends ConstField { public ConstSFImage(int width, int height, int components, byte pixels[]); public int getWidth(); public int getHeight(); public int getComponents(); public void getPixels(byte pixels[]); // This overrides a method in Object public String toString(); } public class ConstSFInt32 extends ConstField { public ConstSFInt32(int value); public int getValue(); // This overrides a method in Object public String toString(); } public class ConstSFNode extends ConstField { public ConstSFNode(BaseNode node); public BaseNode getValue(); // This overrides a method in Object public String toString(); } public class ConstSFRotation extends ConstField { public ConstSFRotation(float axisX, float axisY, float axisZ, float angle); public void getValue(float rotations[]); // This overrides a method in Object public String toString(); } public class ConstSFString extends ConstField { public ConstSFString(String value); public String getValue(); // This overrides a method in Object public String toString(); } public class ConstSFTime extends ConstField { public ConstSFTime(double time); public double getValue(); // This overrides a method in Object public String toString(); } public class ConstSFVec2f extends ConstField { public ConstSFVec2f(float x, float y); public void getValue(float vec2s[]); public float getX(); public float getY(); // This overrides a method in Object public String toString(); } public class ConstSFVec3f extends ConstField { public ConstSFVec3f(float x, float y, float z); public void getValue(float vec3s[]); public float getX(); public float getY(); public float getZ(); // This overrides a method in Object public String toString(); } public class ConstMFColor extends ConstMField { public ConstMFColor(float colors[][]); public ConstMFColor(float colors[]); public ConstMFColor(int size, float colors[]); public void getValue(float colors[][]); public void getValue(float colors[]); public void get1Value(int index, float colors[]); public void get1Value(int index, SFColor color); // This overrides a method in Object public String toString(); } public class ConstMFFloat extends ConstMField { public ConstMFFloat(int size, float values[]); public ConstMFFloat(float values[]); public void getValue(float values[]); public float get1Value(int index); // This overrides a method in Object public String toString(); } public class ConstMFInt32 extends ConstMField { public ConstMFInt32(int size, int values[]); public ConstMFInt32(int values[]); public void getValue(int values[]); public int get1Value(int index); // This overrides a method in Object public String toString(); } public class ConstMFNode extends ConstMField { public ConstMFNode(int size, BaseNode node[]); public ConstMFNode(BaseNode node[]); public void getValue(BaseNode node[]); public BaseNode get1Value(int index); // This overrides a method in Object public String toString(); } public class ConstMFRotation extends ConstMField { public ConstMFRotation(float rotations[][]); public ConstMFRotation(float rotations[]); public ConstMFRotation(int size, float rotations[]); public void getValue(float rotations[][]); public void getValue(float rotations[]); public void get1Value(int index, float rotations[]); public void get1Value(int index, SFRotation rotation); // This overrides a method in Object public String toString(); } public class ConstMFString extends ConstMField { public ConstMFString(int size, String s[]); public ConstMFString(String s[]); public void getValue(String values[]); public String get1Value(int index); // This overrides a method in Object public String toString(); } public class ConstMFTime extends ConstMField { public ConstMFTime(int size, double times[]); public ConstMFTime(double times[]); public void getValue(double times[]); public double get1Value(int index); // This overrides a method in Object public String toString(); } public class ConstMFVec2f extends ConstMField { public ConstMFVec2f(float vec2s[][]); public ConstMFVec2f(float vec2s[]); public ConstMFVec2f(int size, float vec2s[]); public void getValue(float vec2s[][]); public void getValue(float vec2s[]); public void get1Value(int index, float vec2s[]); public void get1Value(int index, SFVec2f vec); // This overrides a method in Object public String toString(); } public class ConstMFVec3f extends ConstMField { public ConstMFVec3f(float vec3s[][]); public ConstMFVec3f(float vec3s[]); public ConstMFVec3f(int size, float vec3s[]); public void getValue(float vec3s[][]); public void getValue(float vec3s[]); public void get1Value(int index, float vec3s[]); public void get1Value(int index, SFVec3f vec); // This overrides a method in Object public String toString(); }
package vrml.node;
// // This is the general Node class // public abstract class Node extends BaseNode { // Get an EventIn by name. Return value is write-only. // Throws an InvalidEventInException if eventInName isn't a valid // eventIn name for a node of this type. public final Field getEventIn(String eventInName); // Get an EventOut by name. Return value is read-only. // Throws an InvalidEventOutException if eventOutName isn't a valid // eventOut name for a node of this type. public final ConstField getEventOut(String eventOutName); // Get an exposed field by name. // Throws an InvalidExposedFieldException if exposedFieldName isn't a valid // exposedField name for a node of this type. public final Field getExposedField(String exposedFieldName); // This overrides a method in Object public String toString(); } // // This is the general Script class, to be subclassed by all scripts. // Note that the provided methods allow the script author to explicitly // throw tailored exceptions in case something goes wrong in the // script. // public abstract class Script extends BaseNode { // This method is called before any event is generated public void initialize(); // Get a Field by name. // Throws an InvalidFieldException if fieldName isn't a valid // field name for a node of this type. protected final Field getField(String fieldName); // Get an EventOut by name. // Throws an InvalidEventOutException if eventOutName isn't a valid // eventOut name for a node of this type. protected final Field getEventOut(String eventOutName); // Get an EventIn by name. // Throws an InvalidEventInException if eventInName isn't a valid // eventIn name for a node of this type. protected final Field getEventIn(String eventInName); // processEvents() is called automatically when the script receives // some set of events. It shall not be called directly except by its subclass. // count indicates the number of events delivered. public void processEvents(int count, Event events[]); // processEvent() is called automatically when the script receives // an event. public void processEvent(Event event); // eventsProcessed() is called after every invocation of processEvents(). public void eventsProcessed() // shutdown() is called when this Script node is deleted. public void shutdown(); // This overrides a method in Object public String toString(); }
public class InvalidEventInException extends IllegalArgumentException { /** * Constructs an InvalidEventInException with no detail message. */ public InvalidEventInException(){ super(); } /** * Constructs an InvalidEventInException with the specified detail message. * A detail message is a String that describes this particular exception. * @param s the detail message */ public InvalidEventInException(String s){ super(s); } } public class InvalidEventOutException extends IllegalArgumentException { public InvalidEventOutException(){ super(); } public InvalidEventOutException(String s){ super(s); } } public class InvalidExposedFieldException extends IllegalArgumentException { public InvalidExposedFieldException(){ super(); } public InvalidExposedFieldException(String s){ super(s); } } public class InvalidFieldChangeException extends IllegalArgumentException { public InvalidFieldChangeException(){ super(); } public InvalidFieldChangeException(String s){ super(s); } } public class InvalidFieldException extends IllegalArgumentException { public InvalidFieldException(){ super(); } public InvalidFieldException(String s){ super(s); } } public class InvalidRouteException extends IllegalArgumentException { public InvalidRouteException(){ super(); } public InvalidRouteException(String s){ super(s); } } public class InvalidVRMLSyntaxException extends Exception { public InvalidVRMLSyntaxException(){ super(); } public InvalidVRMLSyntaxException(String s){ super(s); } // This overrides a method in Exception public String getMessage(); }
http://vag.vrml.org/VRML97/DIS/part1/java.html