Class CRMainSceneBuilder
- All Implemented Interfaces:
BinaryContentHandler,ContentHandler,ProtoHandler,RouteHandler,ScriptHandler,StringContentHandler
This basic implementation does most of the hard work regardless of the individual renderer in use. The implementer of this class is only required to provide a single method - startNode(), although they are free to override any that they wish. It is strongly recommended that the overridden method be called on this class too to make sure state does not get out of alignment.
- Version:
- $Revision: 1.60 $
- Author:
- Justin Couch
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final StringMessage for the exceptions thrown for methods being called when they should not be (e.g. proto callbacks)protected booleanFlag indicating that the last field we processed had an invalid name.protected VRMLNodeFactoryThe base node factory used to create individual factoriesprotected int[]The stack of child indexes used during processingprotected intCopy of the top child index for efficiency purposesprotected VRMLNodeTypeCopy of the top node for efficiency purposesprotected VRMLScriptNodeTypeCopy of the current working script definitionprotected Map<String, VRMLNodeType> The mapping of def names (key) to node instances (value)protected org.j3d.util.HashSet<Class<?>> Set of classes that we don't want to loadprotected org.j3d.util.ErrorReporterThe error handler used for reporting errorsThe mapping of export node names (import foo.exportname AS bar) to their ImportProxyNode instance.protected Map<String, ExternalPrototypeDecl> The mapping of externproto names (key) to node instances (value)protected VRMLFieldReaderField Parser for the current sceneprotected org.j3d.util.HashSet<String> Set of DEF names to ignore when we come to USE declsprotected intCounter when we ignore a node type we don't know aboutprotected Map<String, VRMLNodeType> The mapping of imported node names (import foo.bar AS importname) to their ImportProxyNode instance.protected booleanFlag to indicate that one time initialization process has happenedprotected booleanFlag to indicate we are inside a script at the momentprotected booleanFlag to indicate we are currently under a StaticGroupprotected booleanFlag indicating what mode - VRML97 or VRML3.0 that we're usingprotected DocumentLocatorThe document locator to find error informationprotected intThe major version of the spec this file belongs to.protected WriteableSceneMetaDataThe metadata for this sceneprotected intThe minor version of the spec this file belongs to.protected VRMLNodeFactoryThe node factory used to create real node instancesprotected VRMLNodeType[]The stack of nodes used during processing the documentprotected CRProtoCreatorThe creator used to instantiate protosprotected Map<String, PrototypeDecl> The mapping of proto names (key) to node instances (value)protected VRMLWorldRootNodeTypeThe scene root nodeprotected CRVRMLSceneThe scene that we are currently buildingprotected SimpleStackThe working stack of currently building scripts.protected static final intThe increment size of the stack if it get overflowedprotected static final intThe initial size of the stack for element processingprotected FrameStateManagerThe state manager to currently useprotected intCounter when we discover a StaticGroup nodeprotected org.j3d.util.HashSet<String> Set of names under a StaticGroup so we can check for routesprotected intCounter to the top item in the stack arrayprotected static final StringError when an export statement is found in an VRML97 fileprotected static final StringError when an import statement is found in an VRML97 fileprotected static final StringName of the profile used for VRML97 compatibilityprotected StringThe current world's root URL -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedCreate a scene builder with the given node factory. -
Method Summary
Modifier and TypeMethodDescriptionvoidcomponentDecl(String componentInfo) A component declaration has been found in the code.voidDeclaration of the end of the document.voidNotification of the end of an EXTERNPROTO declaration.voidendField()Notification of the end of a field declaration.voidendNode()Notification of the end of a node declaration.voidNotification of the end of an ordinary proto body.voidNotification of the end of an ordinary proto declaration statement.voidNotification of the end of a script declaration.voidexportDecl(String defName, String exported) An EXPORT declaration has been found in the document.voidexternProtoURI(String[] values) Notification of the URI list for an EXTERNPROTO.voidfieldValue(boolean value) Set the value of the field at the given index as an boolean.voidfieldValue(boolean[] value, int len) Set the value of the field at the given index as an array of boolean.voidfieldValue(double value) Set the value of the field at the given index as an double.voidfieldValue(double[] value, int len) Set the value of the field at the given index as an array of doubles.voidfieldValue(float value) Set the value of the field at the given index as a float.voidfieldValue(float[] value, int len) Set the value of the field at the given index as an array of floats.voidfieldValue(int value) Set the value of the field at the given index as an integer.voidfieldValue(int[] value, int len) Set the value of the field at the given index as an array of integers.voidfieldValue(long value) Set the value of the field at the given index as an long.voidfieldValue(long[] value, int len) Set the value of the field at the given index as an array of longs.voidfieldValue(String value) The value of a normal field.voidfieldValue(String[] values) The value of an MFField where the underlying parser knows about how the values are broken up.voidfieldValue(String[] value, int len) Set the value of the field at the given index as an array of strings.protected abstract voidGenerate a protoCreator instance now because one has not been set yet.Grab the proto creator instance in use by this builder.getScene()Get the scene that was last built by this scene handler.voidimportDecl(String inline, String exported, String imported) An IMPORT declaration has been found in the document.voidA META declaration has been found in the code.voidprofileDecl(String profileName) A profile declaration has been found in the code.voidprotoFieldDecl(int access, String type, String name, Object value) Notification of a proto's field declaration.voidprotoIsDecl(String fieldName) Notification of a field value uses an IS statement.voidRelease any references to the scene that was last built by this scene handler.voidreset()Reset the builder.protected final voidResize the stack if needed.voidNotification of a ROUTE declaration in the file.voidscriptFieldDecl(int access, String type, String name, Object value) Notification of a script's field declaration.voidSet the document locator that can be used by the implementing code to find out information about the current line information.voidsetErrorReporter(org.j3d.util.ErrorReporter reporter) Set the error handler instance used by this instance of the builder.voidSet the frame state manager to use for the builder after this point.voidsetGlobals(Map<String, VRMLNodeType> defs, Map<String, PrototypeDecl> protos, Map<String, ExternalPrototypeDecl> externProtos) Set the global DEF map to be used within fields.voidsetLoadRequirements(boolean useVrml97, boolean useBackgrounds, boolean useFogs, boolean useLights, boolean useAudio, boolean useViewpoints, boolean useExternals) Set the flags about what to load.voidDeclaration of the start of the document.voidstartExternProtoDecl(String name) Notification of the start of an EXTERNPROTO declaration of the given name.voidstartField(String name) Notification of a field declaration.abstract voidNotification of the start of a node.voidNotification of the start of an ordinary proto body.voidstartProtoDecl(String name) Notification of the start of an ordinary (inline) proto declaration.voidNotification of the start of a script declaration.voidThe field value is a USE for the given node name.
-
Field Details
-
BAD_METHOD_MSG
Message for the exceptions thrown for methods being called when they should not be (e.g. proto callbacks)- See Also:
-
STACK_START_SIZE
protected static final int STACK_START_SIZEThe initial size of the stack for element processing- See Also:
-
STACK_INCREMENT
protected static final int STACK_INCREMENTThe increment size of the stack if it get overflowed- See Also:
-
VRML97_PROFILE_STRING
Name of the profile used for VRML97 compatibility- See Also:
-
VRML_IMPORT_ERROR
Error when an import statement is found in an VRML97 file- See Also:
-
VRML_EXPORT_ERROR
Error when an export statement is found in an VRML97 file- See Also:
-
protoCreator
The creator used to instantiate protos -
init
protected boolean initFlag to indicate that one time initialization process has happened -
errorReporter
protected org.j3d.util.ErrorReporter errorReporterThe error handler used for reporting errors -
locator
The document locator to find error information -
fieldParser
Field Parser for the current scene -
inScript
protected boolean inScriptFlag to indicate we are inside a script at the moment -
ignoreNodeCounter
protected int ignoreNodeCounterCounter when we ignore a node type we don't know about -
inStatic
protected boolean inStaticFlag to indicate we are currently under a StaticGroup -
staticDepthCounter
protected int staticDepthCounterCounter when we discover a StaticGroup node -
badFieldName
protected boolean badFieldNameFlag indicating that the last field we processed had an invalid name. fieldValue and startNode() calls then have to deal with this flag -
currentFieldIndex
protected int currentFieldIndexCopy of the top child index for efficiency purposes -
currentNode
Copy of the top node for efficiency purposes -
currentScript
Copy of the current working script definition -
scene
The scene that we are currently building -
metaData
The metadata for this scene -
root
The scene root node -
nodeStack
The stack of nodes used during processing the document -
childIndexStack
protected int[] childIndexStackThe stack of child indexes used during processing -
topOfStack
protected int topOfStackCounter to the top item in the stack array -
defMap
The mapping of def names (key) to node instances (value) -
protoMap
The mapping of proto names (key) to node instances (value) -
externProtoMap
The mapping of externproto names (key) to node instances (value) -
importProxyMap
The mapping of imported node names (import foo.bar AS importname) to their ImportProxyNode instance. -
exportProxyMap
The mapping of export node names (import foo.exportname AS bar) to their ImportProxyNode instance. Two level deep map. First level is by the DEF name of the appropriate Inline. This resolves to another Map that is keyed by the export name to the ImportProxyNode instance. -
scriptStack
The working stack of currently building scripts. -
baseNodeFactory
The base node factory used to create individual factories -
nodeFactory
The node factory used to create real node instances -
isVrml97
protected boolean isVrml97Flag indicating what mode - VRML97 or VRML3.0 that we're using -
dontLoadTypes
Set of classes that we don't want to load -
ignoreDefSet
Set of DEF names to ignore when we come to USE decls -
staticNodeSet
Set of names under a StaticGroup so we can check for routes -
worldURL
The current world's root URL -
majorVersion
protected int majorVersionThe major version of the spec this file belongs to. -
minorVersion
protected int minorVersionThe minor version of the spec this file belongs to. -
stateManager
The state manager to currently use
-
-
Constructor Details
-
CRMainSceneBuilder
Create a scene builder with the given node factory. If the factory reference is null then the default factory will be used.- Parameters:
fac- The factory instance to use.- Throws:
NullPointerException- The factory reference is null
-
-
Method Details
-
setDocumentLocator
Set the document locator that can be used by the implementing code to find out information about the current line information. This method is called by the parser to your code to give you a locator to work with. If this has not been set by the timestartDocument()has been called, you can assume that you will not have one available.- Specified by:
setDocumentLocatorin interfaceContentHandler- Parameters:
loc- The locator instance to use
-
startDocument
public void startDocument(String uri, String url, String encoding, String type, String version, String comment) throws SAVException, VRMLException Declaration of the start of the document. The parameters are all of the values that are declared on the header line of the file after the#start. The type string contains the representation of the first few characters of the file after the #. This allows us to work out if it is VRML97 or the later X3D spec.Version numbers change from VRML97 to X3D and aren't logical. In the first, it is
#VRML V2.0and the second is#X3D V1.0even though this second header represents a later spec.- Specified by:
startDocumentin interfaceContentHandler- Parameters:
uri- The URI of the file.url- The base URL of the file for resolving relative URIs contained in the fileencoding- The encoding of this document - utf8 or binarytype- The bytes of the first part of the file headerversion- The VRML version of this documentcomment- Any trailing text on this line. If there is none, this is null.- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
profileDecl
A profile declaration has been found in the code. IAW the X3D specification, this method will only ever be called once in the lifetime of the parser for this document. The name is the name of the profile for the document to use.- Specified by:
profileDeclin interfaceContentHandler- Parameters:
profileName- The name of the profile to use- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
componentDecl
A component declaration has been found in the code. There may be zero or more component declarations in the file, appearing just after the profile declaration. The textual information after the COMPONENT keyword is left unparsed and presented through this call. It is up to the user application to parse the component information.- Specified by:
componentDeclin interfaceContentHandler- Parameters:
componentInfo- The name of the component to use- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
metaDecl
A META declaration has been found in the code. There may be zero or more meta declarations in the file, appearing just after the component declaration. Each meta declaration has a key and value strings. No information is to be implied from this. It is for extra data only.- Specified by:
metaDeclin interfaceContentHandler- Parameters:
key- The value of the key stringvalue- The value of the value string- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
importDecl
public void importDecl(String inline, String exported, String imported) throws SAVException, VRMLException An IMPORT declaration has been found in the document. All three parameters will always be provided, regardless of whether the AS keyword has been used or not. The parser implementation will automatically set the local import name as needed.- Specified by:
importDeclin interfaceContentHandler- Parameters:
inline- The name of the inline DEF nodesexported- The exported name from the inlined fileimported- The local name to use for the exported name- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
exportDecl
An EXPORT declaration has been found in the document. Both parameters will always be provided regardless of whether the AS keyword has been used. The parser implementation will automatically set the exported name as needed.- Specified by:
exportDeclin interfaceContentHandler- Parameters:
defName- The DEF name of the nodes to be exportedexported- The name to be exported as- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
endDocument
Declaration of the end of the document. There will be no further parsing and hence events after this.- Specified by:
endDocumentin interfaceContentHandler- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
startNode
Notification of the start of a node. This is the opening statement of a node and it's DEF name. USE declarations are handled in a separate method.- Specified by:
startNodein interfaceContentHandler- Parameters:
name- The name of the node that we are about to parsedefName- The string associated with the DEF name. Null if not given for this node.- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
endNode
Notification of the end of a node declaration.- Specified by:
endNodein interfaceContentHandler- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
startField
Description copied from interface:ContentHandlerNotification of a field declaration. This notification is only called if it is a standard node. If the node is a script or PROTO declaration then theScriptHandlerorProtoHandlermethods are used.- Specified by:
startFieldin interfaceContentHandler- Parameters:
name- The name of the field declared- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
The value of a normal field. This is a string that represents the entire value of the field. MFStrings will have to be parsed. This is a terminating call for startField as well. The next call will either be anotherstartField()orendNode().If this field is an SFNode with a USE declaration you will have the
useDecl(String)method called rather than this method.- Specified by:
fieldValuein interfaceBinaryContentHandler- Specified by:
fieldValuein interfaceStringContentHandler- Parameters:
value- The value of this field- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
fieldValue
The value of an MFField where the underlying parser knows about how the values are broken up. The parser is not required to support this callback, but implementors of this interface should understand it. The most likely time we will have this method called is for MFString or URL lists. If called, it is guaranteed to split the strings along the SF node type boundaries.- Specified by:
fieldValuein interfaceStringContentHandler- Parameters:
values- The list of string representing the values- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
useDecl
The field value is a USE for the given node name. This is a terminating call for startField as well. The next call will either be anotherstartField()orendNode().- Specified by:
useDeclin interfaceContentHandler- Parameters:
defName- The name of the DEF string to use- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
endField
Notification of the end of a field declaration. This is called only at the end of an MFNode declaration. All other fields are terminated by eitheruseDecl(String)orfieldValue(String).- Specified by:
endFieldin interfaceContentHandler- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
fieldValue
Set the value of the field at the given index as an integer. This would be used to set SFInt32 field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the node- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an array of integers. This would be used to set MFInt32 field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the nodelen- The number of valid entries in the value array- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an boolean. This would be used to set SFBool field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the node- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an array of boolean. This would be used to set MFBool field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the nodelen- The number of valid entries in the value array- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as a float. This would be used to set SFFloat field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the node- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an array of floats. This would be used to set MFFloat, SFVec2f, SFVec3f and SFRotation field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the nodelen- The number of valid entries in the value array- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an long. This would be used to set SFTime field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the node- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an array of longs. This would be used to set MFTime field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the nodelen- The number of valid entries in the value array- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an double. This would be used to set SFDouble field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the node- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an array of doubles. This would be used to set MFDouble, SFVec2d and SFVec3d field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the nodelen- The number of valid entries in the value array- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
fieldValue
Set the value of the field at the given index as an array of strings. This would be used to set MFString field types.- Specified by:
fieldValuein interfaceBinaryContentHandler- Parameters:
value- The new value to use for the nodelen- The number of valid entries in the value array- Throws:
SAVException- This call is taken at the wrong time in the structure of the document.VRMLException- This call is taken at the wrong time in the structure of the document.
-
startProtoDecl
Notification of the start of an ordinary (inline) proto declaration. The proto has the given node name.- Specified by:
startProtoDeclin interfaceProtoHandler- Parameters:
name- The name of the proto- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
endProtoDecl
Notification of the end of an ordinary proto declaration statement.- Specified by:
endProtoDeclin interfaceProtoHandler- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
protoFieldDecl
public void protoFieldDecl(int access, String type, String name, Object value) throws SAVException, VRMLException Notification of a proto's field declaration. This is used for both external and ordinary protos. Externprotos don't allow the declaration of a value for the field. In this case, the parameter value will be null.- Specified by:
protoFieldDeclin interfaceProtoHandler- Parameters:
access- The access type (eg exposedField, field etc)type- The field type (eg SFInt32, MFVec3d etc)name- The name of the fieldvalue- The default value of the field. Null if not allowed.- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
protoIsDecl
Notification of a field value uses an IS statement. If we are running in VRML97 mode, this will throw an exception if the field access types do not match.- Specified by:
protoIsDeclin interfaceProtoHandler- Parameters:
fieldName- The name of the field that is being IS'd- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
startProtoBody
Notification of the start of an ordinary proto body. All nodes contained between here and the correspondingendProtoBody()statement form the body and not the normal scene graph information.- Specified by:
startProtoBodyin interfaceProtoHandler- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
endProtoBody
Notification of the end of an ordinary proto body. Parsing now returns to ordinary node declarations.- Specified by:
endProtoBodyin interfaceProtoHandler- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
startExternProtoDecl
Notification of the start of an EXTERNPROTO declaration of the given name. Between here and the matchingendExternProtoDecl()call you should only receiveprotoFieldDecl(int, java.lang.String, java.lang.String, java.lang.Object)calls.- Specified by:
startExternProtoDeclin interfaceProtoHandler- Parameters:
name- The node name of the extern proto- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
endExternProtoDecl
Notification of the end of an EXTERNPROTO declaration.- Specified by:
endExternProtoDeclin interfaceProtoHandler- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
externProtoURI
Notification of the URI list for an EXTERNPROTO. This is a complete list of URIs. The calling application is required to interpet the incoming strings. Even if the externproto has no URIs registered, this method shall be called. If there are none available, this will be called with a zero length list of values.- Specified by:
externProtoURIin interfaceProtoHandler- Parameters:
values- A list of strings representing all of the URI values- Throws:
SAVException- Always thrownVRMLException- Never thrown
-
startScriptDecl
Notification of the start of a script declaration. All calls between now and the correspondingendScriptDecl()call belong to this script node. This method will be called after the ContentHandlerstartNode()method call. All DEF information is contained in that method call and this just signifies the start of script processing so that we know to treat the field parsing callbacks a little differently.- Specified by:
startScriptDeclin interfaceScriptHandler- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
endScriptDecl
Notification of the end of a script declaration. This is guaranteed to be called before the ContentHandlerendNode()callback.- Specified by:
endScriptDeclin interfaceScriptHandler- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
scriptFieldDecl
public void scriptFieldDecl(int access, String type, String name, Object value) throws SAVException, VRMLException Notification of a script's field declaration. This is used for all fields excepturl,mustEvaluateanddirectOutputfields. These fields use the normal field callbacks ofContentHandler.- Specified by:
scriptFieldDeclin interfaceScriptHandler- Parameters:
access- The access type (eg exposedField, field etc)type- The field type (eg SFInt32, MFVec3d etc)name- The name of the fieldvalue- The default value of the field- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
routeDecl
public void routeDecl(String srcNodeName, String srcFieldName, String destNodeName, String destFieldName) throws SAVException, VRMLException Notification of a ROUTE declaration in the file. The context of this route should be assumed from the surrounding calls to start and end of proto and node bodies.- Specified by:
routeDeclin interfaceRouteHandler- Parameters:
srcNodeName- The name of the DEF of the source nodesrcFieldName- The name of the field to route values fromdestNodeName- The name of the DEF of the destination nodedestFieldName- The name of the field to route values to- Throws:
SAVException- This call is taken at the wrong time in the structure of the documentVRMLException- The content provided is invalid for this part of the document or can't be parsed
-
generateProtoCreator
protected abstract void generateProtoCreator()Generate a protoCreator instance now because one has not been set yet. -
getProtoCreator
Grab the proto creator instance in use by this builder.- Returns:
- An instance of the current creator
-
setErrorReporter
public void setErrorReporter(org.j3d.util.ErrorReporter reporter) Set the error handler instance used by this instance of the builder. The handler is used to report errors at the higher level. A value of null will clear the current instance and return to the default handling.- Parameters:
reporter- The instance to use or null to clear
-
getScene
Get the scene that was last built by this scene handler. If none of the methods have been called yet, this will return a null reference. The scene instance returned by this builder will not have had any external references resolved. Externprotos, scripts, Inlines and all other nodes that reference part of their data as a URL will need to be loaded separately.- Returns:
- The last built scene
-
releaseScene
public void releaseScene()Release any references to the scene that was last built by this scene handler. This should be called by the loader after a reference to the scene has been retrieved using the getScene() method. -
reset
public void reset()Reset the builder. This is used to make sure that the builder has been reset after a parsing run just in case the last parsing run exited abnormally and left us in an odd state. Sometimes this can prevent us from parsing again. This method should be called just before theVRMLReader.parse()method is called.The flags set about what to load are not reset by this method.
-
setGlobals
public void setGlobals(Map<String, VRMLNodeType> defs, Map<String, PrototypeDecl> protos, Map<String, ExternalPrototypeDecl> externProtos) Set the global DEF map to be used within fields. This is maintained between resets so it should be cleared when necessary.- Parameters:
defs- The new DEF map to useprotos- The new proto map to useexternProtos- The new externproto map to use
-
setLoadRequirements
public void setLoadRequirements(boolean useVrml97, boolean useBackgrounds, boolean useFogs, boolean useLights, boolean useAudio, boolean useViewpoints, boolean useExternals) Set the flags about what to load. Nodes defined as externals are inlines and extern protos.- Parameters:
useVrml97- true if the semantics should be VRML97 capable rather than the looser VRML 3.0.useBackgrounds- true if BackgroundNodeTypes should be loadeduseFogs- true if FogNodeTypes should be loadeduseLights- true if LightNodeTypes should be loadeduseAudio- true if AudioClipNodeTypes should be loadeduseViewpoints- true if ViewpointNodeTypes should loadeduseExternals- true if ExternalNodeTypes should be loaded
-
setFrameStateManager
Set the frame state manager to use for the builder after this point. Set a value of null it will clear the currently set items.- Parameters:
fsm- The state manager to use
-
resizeStack
protected final void resizeStack()Resize the stack if needed. Marked as final in order to encourage the compiler to inline the code for faster execution
-