Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/trapezium/vrml/grammar/VRML97.java


1   /*
2    * @(#)VRML97.java
3    *
4    * Copyright (c) 1998 by Trapezium Development LLC.  All Rights Reserved.
5    *
6    * The information in this file is the property of Trapezium Development LLC
7    * and may be used only in accordance with the terms of the license granted
8    * by Trapezium.
9    *
10   */
11  package com.trapezium.vrml.grammar;
12  
13  import com.trapezium.vrml.node.Node;
14  import com.trapezium.vrml.fields.Field;
15  import com.trapezium.vrml.node.NodeType;
16  import com.trapezium.util.ReturnInteger;
17  import com.trapezium.vrml.VrmlElement;
18  import com.trapezium.vrml.ScriptFunction;
19  import com.trapezium.vrml.ScriptFileParsed;
20  import com.trapezium.vrml.RouteDestination;
21  import com.trapezium.vrml.ROUTE;
22  import com.trapezium.vrml.fields.ISField;
23  import com.trapezium.vrml.node.ScriptInstance;
24  import com.trapezium.parse.TokenEnumerator;
25  import java.util.Hashtable;
26  import java.util.Enumeration;
27  import java.util.StringTokenizer;
28  
29  /**
30   *  Static public methods about the VRML specification.
31   *
32   *  This class contains information about all VRML 2.0 nodes, fields, and
33   *  default field values.  It has static public methods for accessing this
34   *  information, and is used mainly by the parser.
35   *
36   *  @author          Johannes N. Johannsen
37   *  @version         1.12, 25 Feb 1998, added Table 7 base profile limits,
38   *                   added MFTime support
39   *  @version         1.1, 8 Jan 1998
40   *
41   *  @since           1.1
42   */
43  public class VRML97 {
44      /** found an interface type that isn't field, exposedField, eventIn, or eventOut */
45      static public int UnknownInterfaceType = 0;
46  
47      /** field interface constant */
48      static public int field = 1;
49  
50      /** exposedField interface constant */
51      static public int exposedField = 2;
52  
53      /** eventIn interface constant */
54      static public int eventIn = 3;
55  
56      /** eventOut interface constant */
57      static public int eventOut = 4;
58  
59    /** Convert an interface type constant into a String */
60      static public String getInterfaceTypeStr( int itype ) {
61          if ( itype == field ) {
62              return( "field" );
63          } else if ( itype == exposedField ) {
64              return( "exposedField" );
65          } else if ( itype == eventIn ) {
66              return( "eventIn" );
67          } else if ( itype == eventOut ) {
68              return( "eventOut" );
69          } else {
70              return( "unknown interface type" );
71          }
72      }
73  
74      /** Constants representing built int field types */
75      static public int UnknownType = 99;
76    /** Built in VRML97 data type */
77    static public int SFBool = 100;
78    /** Built in VRML97 data type */
79    static public int SFColor = 101;
80    /** Built in VRML97 data type */
81    static public int MFColor = 102;
82    /** Built in VRML97 data type */
83    static public int SFFloat = 103;
84    /** Built in VRML97 data type */
85    static public int MFFloat = 104;
86    /** Built in VRML97 data type */
87    static public int SFImage = 105;
88    /** Built in VRML97 data type */
89    static public int SFInt32 = 106;
90    /** Built in VRML97 data type */
91    static public int MFInt32 = 107;
92    /** Built in VRML97 data type */
93    static public int SFNode = 108;
94    /** Built in VRML97 data type */
95    static public int MFNode = 109;
96    /** Built in VRML97 data type */
97    static public int SFRotation = 110;
98    /** Built in VRML97 data type */
99    static public int MFRotation = 111;
100   /** Built in VRML97 data type */
101   static public int SFString = 112;
102   /** Built in VRML97 data type */
103   static public int MFString = 113;
104   /** Built in VRML97 data type */
105   static public int SFTime = 114;
106   /** Built in VRML97 data type */
107   static public int MFTime = 115;
108   /** Built in VRML97 data type */
109   static public int SFVec2f = 116;
110   /** Built in VRML97 data type */
111   static public int MFVec2f = 117;
112   /** Built in VRML97 data type */
113   static public int SFVec3f = 118;
114   /** Built in VRML97 data type */
115   static public int MFVec3f = 119;
116   /** Vorlon data type indicating SFVec3f with only positive values */
117   static public int PositiveSFVec3f = 120;
118   /** Vorlon data type indicating bboxSize conventions, all positive or all -1 */
119   static public int BboxSizeSFVec3f = 121;
120 
121   /** Convert a field data type constant into its corresponding String.
122    *
123    *  @param  fieldType a VRML97 field type constant, e.g. SFxxxx or MFxxxx,
124    *    or one of the Vorlon extensions.
125    */
126   static public String getFieldTypeString( int fieldType ) {
127       switch( fieldType ) {
128         case 100:
129             return( "SFBool" );
130         case 101:
131             return( "SFColor" );
132         case 102:
133             return( "MFColor" );
134         case 103:
135             return( "SFFloat" );
136         case 104:
137             return( "MFFloat" );
138         case 105:
139             return( "SFImage" );
140         case 106:
141             return( "SFInt32" );
142         case 107:
143             return( "MFInt32" );
144         case 108:
145             return( "SFNode" );
146         case 109:
147             return( "MFNode" );
148         case 110:
149             return( "SFRotation" );
150         case 111:
151             return( "MFRotation" );
152         case 112:
153             return( "SFString" );
154         case 113:
155             return( "MFString" );
156         case 114:
157             return( "SFTime" );
158         case 115:
159             return( "MFTime" );
160         case 116:
161             return( "SFVec2f" );
162         case 117:
163             return( "MFVec2f" );
164         case 118:
165             return( "SFVec3f" );
166         case 119:
167             return( "MFVec3f" );
168         case 120:
169             return( "PositiveSFVec3f" );
170         case 121:
171             return( "BboxSizeSFVec3f" );
172         default:
173             return( null );
174         }
175     }
176 
177     static String[] bgUrlFields = {
178         "backUrl", "bottomUrl", "frontUrl", "leftUrl", "rightUrl", "topUrl" };
179     static Hashtable nodesWithUrls = new Hashtable();
180     static {
181         nodesWithUrls.put( "Anchor", "url" );
182         nodesWithUrls.put( "AudioClip", "url" );
183         nodesWithUrls.put( "Background", bgUrlFields );
184         nodesWithUrls.put( "ImageTexture", "url" );
185         nodesWithUrls.put( "Inline", "url" );
186         nodesWithUrls.put( "MovieTexture", "url" );
187         nodesWithUrls.put( "Script", "url" );
188     }
189     static public Object getUrlFieldList( String nodeName ) {
190         return( nodesWithUrls.get( nodeName ));
191     }
192     
193   /*
194       The following Hashtables have one Hashtable for each built in VRML
195       node.  Each node table has field names for its keys, and a FieldDescriptor
196       object for the corresponding value.  The FieldDescriptor contains the
197       interface type (field, exposedField, eventIn, eventOut), field type
198       (MFxxx, SFxxx, etc.), and initial value if any.
199 
200       At the end of all this, there is a hash table called "builtInNodes",
201       with keys being node names, and key values being the Hashtable for
202       that node.
203     */
204   static Hashtable anchorFields = new Hashtable();
205   static {
206       anchorFields.put( "addChildren", new FieldDescriptor( eventIn, MFNode ));
207       anchorFields.put( "removeChildren", new FieldDescriptor( eventIn, MFNode ));
208       anchorFields.put( "children", new MFFieldDescriptor( exposedField, MFNode, "[]", Table7.MFNodeLimit, 1 ));
209       anchorFields.put( "description", new FieldDescriptor( exposedField, SFString, "" ));
210       anchorFields.put( "parameter", new MFFieldDescriptor( exposedField, MFString, "[]", Table7.MFStringLimit, 1 ));
211       anchorFields.put( "url", new DEFuserFieldDescriptor( exposedField, MFString, "[]" ));
212       anchorFields.put( "bboxCenter", new FieldDescriptor( field, SFVec3f, "0 0 0" ));
213       anchorFields.put( "bboxSize", new FieldDescriptor( field, BboxSizeSFVec3f, "-1 -1 -1" ));
214   }
215   static Hashtable appearanceFields = new Hashtable();
216   static {
217       appearanceFields.put( "material", new FieldDescriptor( exposedField, SFNode, "NULL" ));
218       appearanceFields.put( "texture", new FieldDescriptor( exposedField, SFNode, "NULL" ));
219       appearanceFields.put( "textureTransform", new FieldDescriptor( exposedField, SFNode, "NULL" ));
220   }
221   static Hashtable audioClipFields = new Hashtable();
222   static {
223       audioClipFields.put( "description", new FieldDescriptor( exposedField, SFString, "" ));
224       audioClipFields.put( "loop", new FieldDescriptor( exposedField, SFBool, "FALSE" ));
225       audioClipFields.put( "pitch", new FieldDescriptor( exposedField, SFFloat, "1.0" ));
226       audioClipFields.put( "startTime", new FieldDescriptor( exposedField, SFTime, "0" ));
227       audioClipFields.put( "stopTime", new FieldDescriptor( exposedField, SFTime, "0" ));
228       audioClipFields.put( "url", new MFFieldDescriptor( exposedField, MFString, "[]", Table7.UrlLimit, 1 ));
229       audioClipFields.put( "duration_changed", new FieldDescriptor( eventOut, SFTime ));
230       audioClipFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
231   }
232   static Hashtable backgroundFields = new Hashtable();
233   static {
234       backgroundFields.put( "set_bind", new FieldDescriptor( eventIn, SFBool ));
235       backgroundFields.put( "groundAngle", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
236       backgroundFields.put( "groundColor", new FieldDescriptor( exposedField, MFColor, "[]" ));
237       backgroundFields.put( "backUrl", new FieldDescriptor( exposedField, MFString, "[]" ));
238       backgroundFields.put( "bottomUrl", new FieldDescriptor( exposedField, MFString, "[]" ));
239       backgroundFields.put( "frontUrl", new FieldDescriptor( exposedField, MFString, "[]" ));
240       backgroundFields.put( "leftUrl", new FieldDescriptor( exposedField, MFString, "[]" ));
241       backgroundFields.put( "rightUrl", new FieldDescriptor( exposedField, MFString, "[]" ));
242       backgroundFields.put( "topUrl", new FieldDescriptor( exposedField, MFString, "[]" ));
243       backgroundFields.put( "skyAngle", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
244       backgroundFields.put( "skyColor", new FieldDescriptor( exposedField, MFColor, "[ 0 0 0 ]" ));
245       backgroundFields.put( "isBound", new FieldDescriptor( eventOut, SFBool ));
246   }
247   static Hashtable billboardFields = new Hashtable();
248   static {
249       billboardFields.put( "addChildren", new FieldDescriptor( eventIn, MFNode ));
250       billboardFields.put( "removeChildren", new FieldDescriptor( eventIn, MFNode ));
251       billboardFields.put( "axisOfRotation", new FieldDescriptor( exposedField, SFVec3f, "0 1 0" ));
252       billboardFields.put( "children", new MFFieldDescriptor( exposedField, MFNode, "[]", Table7.MFNodeLimit, 1 ));
253       billboardFields.put( "bboxCenter", new FieldDescriptor( field, SFVec3f, "0 0 0" ));
254       billboardFields.put( "bboxSize", new FieldDescriptor( field, BboxSizeSFVec3f, "-1 -1 -1" ));
255   }
256   static Hashtable boxFields = new Hashtable();
257   static {
258       boxFields.put( "size", new FieldDescriptor( field, PositiveSFVec3f, "2 2 2" ));
259   }
260   static Hashtable collisionFields = new Hashtable();
261   static {
262       collisionFields.put( "addChildren", new FieldDescriptor( eventIn, MFNode ));
263       collisionFields.put( "removeChildren", new FieldDescriptor( eventIn, MFNode ));
264       collisionFields.put( "children", new MFFieldDescriptor( exposedField, MFNode, "[]", Table7.MFNodeLimit, 1 ));
265       collisionFields.put( "collide", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
266       collisionFields.put( "bboxCenter", new FieldDescriptor( field, SFVec3f, "0 0 0" ));
267       collisionFields.put( "bboxSize", new FieldDescriptor( field, BboxSizeSFVec3f, "-1 -1 -1" ));
268       collisionFields.put( "proxy", new FieldDescriptor( field, SFNode, "NULL" ));
269       collisionFields.put( "collideTime", new FieldDescriptor( eventOut, SFTime ));
270   }
271   static Hashtable colorFields = new Hashtable();
272   static {
273       colorFields.put( "color", new MFFieldDescriptor( exposedField, MFColor, "[]", Table7.MFColorLimit, 3 ));
274   }
275   static Hashtable colorInterpolatorFields = new Hashtable();
276   static {
277       colorInterpolatorFields.put( "set_fraction", new FieldDescriptor( eventIn, SFFloat ));
278       colorInterpolatorFields.put( "key", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
279       colorInterpolatorFields.put( "keyValue", new FieldDescriptor( exposedField, MFColor, "[]" ));
280       colorInterpolatorFields.put( "value_changed", new FieldDescriptor( eventOut, SFColor ));
281   }
282   static Hashtable coneFields = new Hashtable();
283   static {
284       coneFields.put( "bottomRadius", new FieldDescriptor( field, SFFloat, "1" ));
285       coneFields.put( "height", new FieldDescriptor( field, SFFloat, "2" ));
286       coneFields.put( "side", new FieldDescriptor( field, SFBool, "TRUE" ));
287       coneFields.put( "bottom", new FieldDescriptor( field, SFBool, "TRUE" ));
288   }
289   static Hashtable coordinateFields = new Hashtable();
290   static {
291       coordinateFields.put( "point", new MFFieldDescriptor( exposedField, MFVec3f, "[]", Table7.MFVec3fLimit, 3 ));
292   }
293   static Hashtable coordinateInterpolatorFields = new Hashtable();
294   static {
295       coordinateInterpolatorFields.put( "set_fraction", new FieldDescriptor( eventIn, SFFloat ));
296       coordinateInterpolatorFields.put( "key", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
297       coordinateInterpolatorFields.put( "keyValue", new FieldDescriptor( exposedField, MFVec3f, "[]" ));
298       coordinateInterpolatorFields.put( "value_changed", new FieldDescriptor( eventOut, MFVec3f ));
299   }
300   static Hashtable cylinderFields = new Hashtable();
301   static {
302       cylinderFields.put( "bottom", new FieldDescriptor( field, SFBool, "TRUE" ));
303       cylinderFields.put( "height", new FieldDescriptor( field, SFFloat, "2" ));
304       cylinderFields.put( "radius", new FieldDescriptor( field, SFFloat, "1" ));
305       cylinderFields.put( "side", new FieldDescriptor( field, SFBool, "TRUE" ));
306       cylinderFields.put( "top", new FieldDescriptor( field, SFBool, "TRUE" ));
307   }
308   static Hashtable cylinderSensorFields = new Hashtable();
309   static {
310       cylinderSensorFields.put( "autoOffset", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
311       cylinderSensorFields.put( "diskAngle", new FieldDescriptor( exposedField, SFFloat, "0.262" ));
312       cylinderSensorFields.put( "enabled", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
313       cylinderSensorFields.put( "maxAngle", new FieldDescriptor( exposedField, SFFloat, "-1" ));
314       cylinderSensorFields.put( "minAngle", new FieldDescriptor( exposedField, SFFloat, "0" ));
315       cylinderSensorFields.put( "offset", new FieldDescriptor( exposedField, SFFloat, "0" ));
316       cylinderSensorFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
317       cylinderSensorFields.put( "rotation_changed", new FieldDescriptor( eventOut, SFRotation ));
318       cylinderSensorFields.put( "trackPoint_changed", new FieldDescriptor( eventOut, SFVec3f ));
319   }
320   static Hashtable directionalLightFields = new Hashtable();
321   static {
322       directionalLightFields.put( "ambientIntensity", new FieldDescriptor( exposedField, SFFloat, "0" ));
323       directionalLightFields.put( "color", new FieldDescriptor( exposedField, SFColor, "1 1 1" ));
324       directionalLightFields.put( "direction", new FieldDescriptor( exposedField, SFVec3f, "0 0 -1" ));
325       directionalLightFields.put( "intensity", new FieldDescriptor( exposedField, SFFloat, "1" ));
326       directionalLightFields.put( "on", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
327   }
328   static Hashtable elevationGridFields = new Hashtable();
329   static {
330       elevationGridFields.put( "set_height", new FieldDescriptor( eventIn, MFFloat ));
331       elevationGridFields.put( "color", new FieldDescriptor( exposedField, SFNode, "NULL" ));
332       elevationGridFields.put( "normal", new FieldDescriptor( exposedField, SFNode, "NULL" ));
333       elevationGridFields.put( "texCoord", new FieldDescriptor( exposedField, SFNode, "NULL" ));
334       elevationGridFields.put( "height", new MFFieldDescriptor( field, MFFloat, "[]", Table7.ElevationGridHeightLimit, 1 ));
335       elevationGridFields.put( "ccw", new FieldDescriptor( field, SFBool, "TRUE" ));
336       elevationGridFields.put( "colorPerVertex", new FieldDescriptor( field, SFBool, "TRUE" ));
337       elevationGridFields.put( "creaseAngle", new FieldDescriptor( field, SFFloat, "0" ));
338       elevationGridFields.put( "normalPerVertex", new FieldDescriptor( field, SFBool, "TRUE" ));
339       elevationGridFields.put( "solid", new FieldDescriptor( field, SFBool, "TRUE" ));
340       elevationGridFields.put( "xDimension", new FieldDescriptor( field, SFInt32, "0" ));
341       elevationGridFields.put( "xSpacing", new FieldDescriptor( field, SFFloat, "0.0" ));
342       elevationGridFields.put( "zDimension", new FieldDescriptor( field, SFInt32, "0" ));
343       elevationGridFields.put( "zSpacing", new FieldDescriptor( field, SFFloat, "0.0" ));
344   }
345   static Hashtable extrusionFields = new Hashtable();
346   static {
347       extrusionFields.put( "set_crossSection", new FieldDescriptor( eventIn, MFVec2f ));
348       extrusionFields.put( "set_orientation", new FieldDescriptor( eventIn, MFRotation ));
349       extrusionFields.put( "set_scale", new FieldDescriptor( eventIn, MFVec2f ));
350       extrusionFields.put( "set_spine", new FieldDescriptor( eventIn, MFVec3f ));
351       extrusionFields.put( "beginCap", new FieldDescriptor( field, SFBool, "TRUE" ));
352       extrusionFields.put( "ccw", new FieldDescriptor( field, SFBool, "TRUE" ));
353       extrusionFields.put( "convex", new FieldDescriptor( field, SFBool, "TRUE" ));
354       extrusionFields.put( "creaseAngle", new FieldDescriptor( field, SFFloat, "0" ));
355       extrusionFields.put( "crossSection", new FieldDescriptor( field, MFVec2f, "[ 1 1, 1 -1, -1 -1, -1 1, 1 1 ]" ));
356       extrusionFields.put( "endCap", new FieldDescriptor( field, SFBool, "TRUE" ));
357       extrusionFields.put( "orientation", new MFFieldDescriptor( field, MFRotation, "0 0 1 0", Table7.MFRotationLimit, 4 ));
358       extrusionFields.put( "scale", new FieldDescriptor( field, MFVec2f, "1 1" ));
359       extrusionFields.put( "solid", new FieldDescriptor( field, SFBool, "TRUE" ));
360       extrusionFields.put( "spine", new FieldDescriptor( field, MFVec3f, "[ 0 0 0, 0 1 0 ]" ));
361   }
362   static Hashtable fogFields = new Hashtable();
363   static {
364       fogFields.put( "color", new FieldDescriptor( exposedField, SFColor, "1 1 1" ));
365       fogFields.put( "fogType", new FieldDescriptor( exposedField, SFString, "LINEAR" ));
366       fogFields.put( "visibilityRange", new FieldDescriptor( exposedField, SFFloat, "0" ));
367       fogFields.put( "set_bind", new FieldDescriptor( eventIn, SFBool ));
368       fogFields.put( "isBound", new FieldDescriptor( eventOut, SFBool ));
369   }
370   static Hashtable fontStyleFields = new Hashtable();
371   static {
372       fontStyleFields.put( "family", new FieldDescriptor( field, MFString, "\"SERIF\"" ));
373       fontStyleFields.put( "horizontal", new FieldDescriptor( field, SFBool, "TRUE" ));
374       fontStyleFields.put( "justify", new FieldDescriptor( field, MFString, "\"BEGIN\"" ));
375       fontStyleFields.put( "language", new FieldDescriptor( field, SFString, "\"\"" ));
376       fontStyleFields.put( "leftToRight", new FieldDescriptor( field, SFBool, "TRUE" ));
377       fontStyleFields.put( "size", new FieldDescriptor( field, SFFloat, "1.0" ));
378       fontStyleFields.put( "spacing", new FieldDescriptor( field, SFFloat, "1.0" ));
379       fontStyleFields.put( "style", new FieldDescriptor( field, SFString, "\"PLAIN\"" ));
380       fontStyleFields.put( "topToBottom", new FieldDescriptor( field, SFBool, "TRUE" ));
381   }
382   static Hashtable groupFields = new Hashtable();
383   static {
384       groupFields.put( "addChildren", new FieldDescriptor( eventIn, MFNode ));
385       groupFields.put( "removeChildren", new FieldDescriptor( eventIn, MFNode ));
386       groupFields.put( "children", new MFFieldDescriptor( exposedField, MFNode, "[]", Table7.MFNodeLimit, 1 ));
387       groupFields.put( "bboxCenter", new FieldDescriptor( field, SFVec3f, "0 0 0" ));
388       groupFields.put( "bboxSize", new FieldDescriptor( field, BboxSizeSFVec3f, "-1 -1 -1" ));
389   }
390   static Hashtable imageTextureFields = new Hashtable();
391   static {
392       imageTextureFields.put( "url", new MFFieldDescriptor( exposedField, MFString, "[]", Table7.UrlLimit, 1 ));
393       imageTextureFields.put( "repeatS", new FieldDescriptor( field, SFBool, "TRUE" ));
394       imageTextureFields.put( "repeatT", new FieldDescriptor( field, SFBool, "TRUE" ));
395   }
396   static Hashtable indexedFaceSetFields = new Hashtable();
397   static {
398       indexedFaceSetFields.put( "set_colorIndex", new FieldDescriptor( eventIn, MFInt32 ));
399       indexedFaceSetFields.put( "set_coordIndex", new FieldDescriptor( eventIn, MFInt32 ));
400       indexedFaceSetFields.put( "set_normalIndex", new FieldDescriptor( eventIn, MFInt32 ));
401       indexedFaceSetFields.put( "set_texCoordIndex", new FieldDescriptor( eventIn, MFInt32 ));
402       indexedFaceSetFields.put( "color", new FieldDescriptor( exposedField, SFNode, "NULL" ));
403       indexedFaceSetFields.put( "coord", new FieldDescriptor( exposedField, SFNode, "NULL" ));
404       indexedFaceSetFields.put( "normal", new FieldDescriptor( exposedField, SFNode, "NULL" ));
405       indexedFaceSetFields.put( "texCoord", new FieldDescriptor( exposedField, SFNode, "NULL" ));
406       indexedFaceSetFields.put( "ccw", new FieldDescriptor( field, SFBool, "TRUE" ));
407       indexedFaceSetFields.put( "colorIndex", new MFFieldDescriptor( field, MFInt32, "[]", Table7.MFInt32Limit, 1 ));
408       indexedFaceSetFields.put( "colorPerVertex", new FieldDescriptor( field, SFBool, "TRUE" ));
409       indexedFaceSetFields.put( "convex", new FieldDescriptor( field, SFBool, "TRUE" ));
410       indexedFaceSetFields.put( "coordIndex", new MFFieldDescriptor( field, MFInt32, "[]", Table7.MFInt32Limit, 1 ));
411       indexedFaceSetFields.put( "creaseAngle", new FieldDescriptor( field, SFFloat, "0" ));
412       indexedFaceSetFields.put( "normalIndex", new MFFieldDescriptor( field, MFInt32, "[]", Table7.MFInt32Limit, 1 ));
413       indexedFaceSetFields.put( "normalPerVertex", new FieldDescriptor( field, SFBool, "TRUE" ));
414       indexedFaceSetFields.put( "solid", new FieldDescriptor( field, SFBool, "TRUE" ));
415       indexedFaceSetFields.put( "texCoordIndex", new MFFieldDescriptor( field, MFInt32, "[]", Table7.MFInt32Limit, 1 ));
416   }
417   static Hashtable indexedLineSetFields = new Hashtable();
418   static {
419       indexedLineSetFields.put( "set_colorIndex", new FieldDescriptor( eventIn, MFInt32 ));
420       indexedLineSetFields.put( "set_coordIndex", new FieldDescriptor( eventIn, MFInt32 ));
421       indexedLineSetFields.put( "color", new FieldDescriptor( exposedField, SFNode, "NULL" ));
422       indexedLineSetFields.put( "coord", new FieldDescriptor( exposedField, SFNode, "NULL" ));
423       indexedLineSetFields.put( "colorIndex", new MFFieldDescriptor( field, MFInt32, "[]", Table7.ILSIndexLimit, 1 ));
424       indexedLineSetFields.put( "colorPerVertex", new FieldDescriptor( field, SFBool, "TRUE" ));
425       indexedLineSetFields.put( "coordIndex", new MFFieldDescriptor( field, MFInt32, "[]", Table7.ILSIndexLimit, 1 ));
426   }
427   static Hashtable inlineFields = new Hashtable();
428   static {
429       inlineFields.put( "url", new MFFieldDescriptor( exposedField, MFString, "[]", Table7.UrlLimit, 1 ));
430       inlineFields.put( "bboxCenter", new FieldDescriptor( field, SFVec3f, "0 0 0" ));
431       inlineFields.put( "bboxSize", new FieldDescriptor( field, BboxSizeSFVec3f, "-1 -1 -1" ));
432   }
433   static Hashtable LODFields = new Hashtable();
434   static {
435       LODFields.put( "level", new FieldDescriptor( exposedField, MFNode, "[]" ));
436       LODFields.put( "center", new FieldDescriptor( field, SFVec3f, "0 0 0" ));
437       LODFields.put( "range", new MFFieldDescriptor( field, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
438   }
439   static Hashtable materialFields = new Hashtable();
440   static {
441       materialFields.put( "ambientIntensity", new FieldDescriptor( exposedField, SFFloat, "0.2" ));
442       materialFields.put( "diffuseColor", new FieldDescriptor( exposedField, SFColor, "0.8 0.8 0.8" ));
443       materialFields.put( "emissiveColor", new FieldDescriptor( exposedField, SFColor, "0 0 0" ));
444       materialFields.put( "shininess", new FieldDescriptor( exposedField, SFFloat, "0.2" ));
445       materialFields.put( "specularColor", new FieldDescriptor( exposedField, SFColor, "0 0 0" ));
446       materialFields.put( "transparency", new FieldDescriptor( exposedField, SFFloat, "0" ));
447   }
448   static Hashtable movieTextureFields = new Hashtable();
449   static {
450       movieTextureFields.put( "loop", new FieldDescriptor( exposedField, SFBool, "FALSE" ));
451       movieTextureFields.put( "speed", new FieldDescriptor( exposedField, SFFloat, "1" ));
452       movieTextureFields.put( "startTime", new FieldDescriptor( exposedField, SFTime, "0" ));
453       movieTextureFields.put( "stopTime", new FieldDescriptor( exposedField, SFTime, "0" ));
454       movieTextureFields.put( "url", new MFFieldDescriptor( exposedField, MFString, "[]", Table7.UrlLimit, 1 ));
455       movieTextureFields.put( "repeatS", new FieldDescriptor( field, SFBool, "TRUE" ));
456       movieTextureFields.put( "repeatT", new FieldDescriptor( field, SFBool, "TRUE" ));
457       movieTextureFields.put( "duration_changed", new FieldDescriptor( eventOut, SFTime ));
458       movieTextureFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
459   }
460   static Hashtable navigationInfoFields = new Hashtable();
461   static {
462       navigationInfoFields.put( "set_bind", new FieldDescriptor( eventIn, SFBool ));
463       navigationInfoFields.put( "avatarSize", new FieldDescriptor( exposedField, MFFloat, "[ 0.25, 1.6, 0.75 ]" ));
464       navigationInfoFields.put( "headlight", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
465       navigationInfoFields.put( "speed", new FieldDescriptor( exposedField, SFFloat, "1.0" ));
466       navigationInfoFields.put( "type", new FieldDescriptor( exposedField, MFString, "\"WALK\"" ));
467       navigationInfoFields.put( "visibilityLimit", new FieldDescriptor( exposedField, SFFloat, "0.0" ));
468       navigationInfoFields.put( "isBound", new FieldDescriptor( eventOut, SFBool ));
469   }
470   static Hashtable normalFields = new Hashtable();
471   static {
472       normalFields.put( "vector", new MFFieldDescriptor( exposedField, MFVec3f, "[]", Table7.MFVec3fLimit, 3 ));
473   }
474   static Hashtable normalInterpolatorFields = new Hashtable();
475   static {
476       normalInterpolatorFields.put( "set_fraction", new FieldDescriptor( eventIn, SFFloat ));
477       normalInterpolatorFields.put( "key", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
478       normalInterpolatorFields.put( "keyValue", new FieldDescriptor( exposedField, MFVec3f, "[]" ));
479       normalInterpolatorFields.put( "value_changed", new FieldDescriptor( eventOut, MFVec3f ));
480   }
481   static Hashtable orientationInterpolatorFields = new Hashtable();
482   static {
483       orientationInterpolatorFields.put( "set_fraction", new FieldDescriptor( eventIn, SFFloat ));
484       orientationInterpolatorFields.put( "key", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
485       orientationInterpolatorFields.put( "keyValue", new MFFieldDescriptor( exposedField, MFRotation, "[]", Table7.MFRotationLimit, 4 ));
486       orientationInterpolatorFields.put( "value_changed", new FieldDescriptor( eventOut, SFRotation ));
487   }
488   static Hashtable pixelTextureFields = new Hashtable();
489   static {
490       pixelTextureFields.put( "image", new FieldDescriptor( exposedField, SFImage, "0 0 0" ));
491       pixelTextureFields.put( "repeatS", new FieldDescriptor( field, SFBool, "TRUE" ));
492       pixelTextureFields.put( "repeatT", new FieldDescriptor( field, SFBool, "TRUE" ));
493   }
494   static Hashtable planeSensorFields = new Hashtable();
495   static {
496       planeSensorFields.put( "autoOffset", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
497       planeSensorFields.put( "enabled", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
498       planeSensorFields.put( "maxPosition", new FieldDescriptor( exposedField, SFVec2f, "-1 -1" ));
499       planeSensorFields.put( "minPosition", new FieldDescriptor( exposedField, SFVec2f, "0 0" ));
500       planeSensorFields.put( "offset", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
501       planeSensorFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
502       planeSensorFields.put( "trackPoint_changed", new FieldDescriptor( eventOut, SFVec3f ));
503       planeSensorFields.put( "translation_changed", new FieldDescriptor( eventOut, SFVec3f ));
504   }
505   static Hashtable pointLightFields = new Hashtable();
506   static {
507       pointLightFields.put( "ambientIntensity", new FieldDescriptor( exposedField, SFFloat, "0" ));
508       pointLightFields.put( "attenuation", new FieldDescriptor( exposedField, SFVec3f, "1 0 0" ));
509       pointLightFields.put( "color", new FieldDescriptor( exposedField, SFColor, "1 1 1" ));
510       pointLightFields.put( "intensity", new FieldDescriptor( exposedField, SFFloat, "1" ));
511       pointLightFields.put( "location", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
512       pointLightFields.put( "on", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
513       pointLightFields.put( "radius", new FieldDescriptor( exposedField, SFFloat, "100" ));
514   }
515   static Hashtable pointSetFields = new Hashtable();
516   static {
517       pointSetFields.put( "color", new FieldDescriptor( exposedField, SFNode, "NULL" ));
518       pointSetFields.put( "coord", new FieldDescriptor( exposedField, SFNode, "NULL" ));
519   }
520   static Hashtable positionInterpolatorFields = new Hashtable();
521   static {
522       positionInterpolatorFields.put( "set_fraction", new FieldDescriptor( eventIn, SFFloat ));
523       positionInterpolatorFields.put( "key", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
524       positionInterpolatorFields.put( "keyValue", new MFFieldDescriptor( exposedField, MFVec3f, "[]", Table7.MFInterpolatorLimit, 3 ));
525       positionInterpolatorFields.put( "value_changed", new FieldDescriptor( eventOut, SFVec3f ));
526   }
527   static Hashtable proximitySensorFields = new Hashtable();
528   static {
529       proximitySensorFields.put( "center", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
530       proximitySensorFields.put( "size", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
531       proximitySensorFields.put( "enabled", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
532       proximitySensorFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
533       proximitySensorFields.put( "position_changed", new FieldDescriptor( eventOut, SFVec3f ));
534       proximitySensorFields.put( "orientation_changed", new FieldDescriptor( eventOut, SFRotation ));
535       proximitySensorFields.put( "enterTime", new FieldDescriptor( eventOut, SFTime ));
536       proximitySensorFields.put( "exitTime", new FieldDescriptor( eventOut, SFTime ));
537   }
538   static Hashtable scalarInterpolatorFields = new Hashtable();
539   static {
540       scalarInterpolatorFields.put( "set_fraction", new FieldDescriptor( eventIn, SFFloat ));
541       scalarInterpolatorFields.put( "key", new MFFieldDescriptor( exposedField, MFFloat, "[]", Table7.MFFloatLimit, 1 ));
542       scalarInterpolatorFields.put( "keyValue", new FieldDescriptor( exposedField, MFFloat, "[]" ));
543       scalarInterpolatorFields.put( "value_changed", new FieldDescriptor( eventOut, SFFloat ));
544   }
545   static Hashtable scriptFields = new Hashtable();
546   static {
547       scriptFields.put( "url", new MFFieldDescriptor( exposedField, MFString, "[]", Table7.UrlLimit, 1 ));
548       scriptFields.put( "directOutput", new FieldDescriptor( field, SFBool, "FALSE" ));
549       scriptFields.put( "mustEvaluate", new FieldDescriptor( field, SFBool, "FALSE" ));
550   }
551   static Hashtable shapeFields = new Hashtable();
552   static {
553       shapeFields.put( "appearance", new FieldDescriptor( exposedField, SFNode, "NULL" ));
554       shapeFields.put( "geometry", new FieldDescriptor( exposedField, SFNode, "NULL" ));
555   }
556   static Hashtable soundFields = new Hashtable();
557   static {
558       soundFields.put( "direction", new FieldDescriptor( exposedField, SFVec3f, "0 0 1" ));
559       soundFields.put( "intensity", new FieldDescriptor( exposedField, SFFloat, "1" ));
560       soundFields.put( "location", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
561       soundFields.put( "maxBack", new FieldDescriptor( exposedField, SFFloat, "10" ));
562       soundFields.put( "maxFront", new FieldDescriptor( exposedField, SFFloat, "10" ));
563       soundFields.put( "minBack", new FieldDescriptor( exposedField, SFFloat, "1" ));
564       soundFields.put( "minFront", new FieldDescriptor( exposedField, SFFloat, "1" ));
565       soundFields.put( "priority", new FieldDescriptor( exposedField, SFFloat, "0" ));
566       soundFields.put( "source", new FieldDescriptor( exposedField, SFNode, "NULL" ));
567       soundFields.put( "spatialize", new FieldDescriptor( field, SFBool, "TRUE" ));
568   }
569   static Hashtable sphereFields = new Hashtable();
570   static {
571       sphereFields.put( "radius", new FieldDescriptor( field, SFFloat, "1" ));
572   }
573   static Hashtable sphereSensorFields = new Hashtable();
574   static {
575       sphereSensorFields.put( "autoOffset", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
576       sphereSensorFields.put( "enabled", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
577       sphereSensorFields.put( "offset", new FieldDescriptor( exposedField, SFRotation, "0 1 0 0" ));
578       sphereSensorFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
579       sphereSensorFields.put( "rotation_changed", new FieldDescriptor( eventOut, SFRotation ));
580       sphereSensorFields.put( "trackPoint_changed", new FieldDescriptor( eventOut, SFVec3f ));
581   }
582   static Hashtable spotLightFields = new Hashtable();
583   static {
584       spotLightFields.put( "ambientIntensity", new FieldDescriptor( exposedField, SFFloat, "0" ));
585       spotLightFields.put( "attenuation", new FieldDescriptor( exposedField, SFVec3f, "1 0 0" ));
586       spotLightFields.put( "beamWidth", new FieldDescriptor( exposedField, SFFloat, "1.570796" ));
587       spotLightFields.put( "color", new FieldDescriptor( exposedField, SFColor, "1 1 1" ));
588       spotLightFields.put( "cutOffAngle", new FieldDescriptor( exposedField, SFFloat, "0.785398" ));
589       spotLightFields.put( "direction", new FieldDescriptor( exposedField, SFVec3f, "0 0 -1" ));
590       spotLightFields.put( "intensity", new FieldDescriptor( exposedField, SFFloat, "1" ));
591       spotLightFields.put( "location", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
592       spotLightFields.put( "on", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
593       spotLightFields.put( "radius", new FieldDescriptor( exposedField, SFFloat, "100" ));
594   }
595   static Hashtable switchFields = new Hashtable();
596   static {
597       switchFields.put( "choice", new MFFieldDescriptor( exposedField, MFNode, "[]", Table7.MFNodeLimit, 1 ));
598       switchFields.put( "whichChoice", new FieldDescriptor( exposedField, SFInt32, "-1" ));
599   }
600   static Hashtable textFields = new Hashtable();
601   static {
602       textFields.put( "string", new MFFieldDescriptor( exposedField, MFString, "[]", Table7.TextStringLimit, 1 ));
603       textFields.put( "fontStyle", new FieldDescriptor( exposedField, SFNode, "NULL" ));
604       textFields.put( "length", new FieldDescriptor( exposedField, MFFloat, "[]" ));
605       textFields.put( "maxExtent", new FieldDescriptor( exposedField, SFFloat, "0.0" ));
606   }
607   static Hashtable textureCoordinateFields = new Hashtable();
608   static {
609       textureCoordinateFields.put( "point", new MFFieldDescriptor( exposedField, MFVec2f, "[]", Table7.MFVec2fLimit, 2 ));
610   }
611   static Hashtable textureTransformFields = new Hashtable();
612   static {
613       textureTransformFields.put( "center", new FieldDescriptor( exposedField, SFVec2f, "0 0" ));
614       textureTransformFields.put( "rotation", new FieldDescriptor( exposedField, SFFloat, "0" ));
615       textureTransformFields.put( "scale", new FieldDescriptor( exposedField, SFVec2f, "1 1" ));
616       textureTransformFields.put( "translation", new FieldDescriptor( exposedField, SFVec2f, "0 0" ));
617   }
618   static Hashtable timeSensorFields = new Hashtable();
619   static {
620       timeSensorFields.put( "cycleInterval", new FieldDescriptor( exposedField, SFTime, "1" ));
621       timeSensorFields.put( "enabled", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
622       timeSensorFields.put( "loop", new FieldDescriptor( exposedField, SFBool, "FALSE" ));
623       timeSensorFields.put( "startTime", new FieldDescriptor( exposedField, SFTime, "0" ));
624       timeSensorFields.put( "stopTime", new FieldDescriptor( exposedField, SFTime, "0" ));
625       timeSensorFields.put( "cycleTime", new FieldDescriptor( eventOut, SFTime ));
626       timeSensorFields.put( "fraction_changed", new FieldDescriptor( eventOut, SFFloat ));
627       timeSensorFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
628       timeSensorFields.put( "time", new FieldDescriptor( eventOut, SFTime ));
629   }
630   static Hashtable touchSensorFields = new Hashtable();
631   static {
632       touchSensorFields.put( "enabled", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
633       touchSensorFields.put( "hitNormal_changed", new FieldDescriptor( eventOut, SFVec3f ));
634       touchSensorFields.put( "hitPoint_changed", new FieldDescriptor( eventOut, SFVec3f ));
635       touchSensorFields.put( "hitTexCoord_changed", new FieldDescriptor( eventOut, SFVec2f ));
636       touchSensorFields.put( "isActive", new FieldDescriptor( eventOut, SFBool ));
637       touchSensorFields.put( "isOver", new FieldDescriptor( eventOut, SFBool ));
638       touchSensorFields.put( "touchTime", new FieldDescriptor( eventOut, SFTime ));
639   }
640   static Hashtable transformFields = new Hashtable();
641   static {
642       transformFields.put( "addChildren", new FieldDescriptor( eventIn, MFNode ));
643       transformFields.put( "removeChildren", new FieldDescriptor( eventIn, MFNode ));
644       transformFields.put( "center", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
645       transformFields.put( "children", new MFFieldDescriptor( exposedField, MFNode, "[]",  Table7.MFNodeLimit, 1 ));
646       transformFields.put( "rotation", new FieldDescriptor( exposedField, SFRotation, "0 0 1 0" ));
647       transformFields.put( "scale", new FieldDescriptor( exposedField, PositiveSFVec3f, "1 1 1" ));
648       transformFields.put( "scaleOrientation", new FieldDescriptor( exposedField, SFRotation, "0 0 1 0" ));
649       transformFields.put( "translation", new FieldDescriptor( exposedField, SFVec3f, "0 0 0" ));
650       transformFields.put( "bboxCenter", new FieldDescriptor( field, SFVec3f, "0 0 0" ));
651       transformFields.put( "bboxSize", new FieldDescriptor( field, BboxSizeSFVec3f, "-1 -1 -1" ));
652   }
653   static Hashtable viewpointFields = new Hashtable();
654   static {
655       viewpointFields.put( "set_bind", new FieldDescriptor( eventIn, SFBool ));
656       viewpointFields.put( "fieldOfView", new FieldDescriptor( exposedField, SFFloat, "0.785398" ));
657       viewpointFields.put( "jump", new FieldDescriptor( exposedField, SFBool, "TRUE" ));
658       viewpointFields.put( "orientation", new FieldDescriptor( exposedField, SFRotation, "0 0 1 0" ));
659       viewpointFields.put( "position", new FieldDescriptor( exposedField, SFVec3f, "0 0 10" ));
660       viewpointFields.put( "description", new FieldDescriptor( field, SFString, "\"\"" ));
661       viewpointFields.put( "bindTime", new FieldDescriptor( eventOut, SFTime ));
662       viewpointFields.put( "isBound", new