public class VolumeDataObject extends X3DConcreteNode implements VolumeData
| Modifier and Type | Field and Description |
|---|---|
static float[] |
BBOXCENTER_DEFAULT_VALUE
SFVec3f field named bboxCenter has default value {0f,0f,0f} (Java syntax) or 0 0 0 (XML syntax).
|
static float[] |
BBOXSIZE_DEFAULT_VALUE
SFVec3f field named bboxSize has default value {-1f,-1f,-1f} (Java syntax) or -1 -1 -1 (XML syntax).
|
static java.lang.String |
COMPONENT
String constant COMPONENT defines X3D component for the VolumeData element: VolumeRendering
|
static java.lang.String |
containerField_DEFAULT_VALUE
containerField describes typical field relationship of a node to its parent.
|
static float[] |
DIMENSIONS_DEFAULT_VALUE
SFVec3f field named dimensions has default value {1f,1f,1f} (Java syntax) or 1 1 1 (XML syntax).
|
static java.lang.String |
fromField_DIMENSIONS
fromField ROUTE name for SFVec3f field named dimensions.
|
static java.lang.String |
fromField_METADATA
fromField ROUTE name for SFNode field named metadata.
|
static java.lang.String |
fromField_RENDERSTYLE
fromField ROUTE name for SFNode field named renderStyle.
|
static java.lang.String |
fromField_VOXELS
fromField ROUTE name for SFNode field named voxels.
|
static int |
LEVEL
Integer constant LEVEL provides default X3D VolumeRendering component level for this element: 1
|
static java.lang.String |
NAME
String constant NAME provides name of this element: VolumeData.
|
static java.lang.String |
toField_DIMENSIONS
toField ROUTE name for SFVec3f field named dimensions.
|
static java.lang.String |
toField_METADATA
toField ROUTE name for SFNode field named metadata.
|
static java.lang.String |
toField_RENDERSTYLE
toField ROUTE name for SFNode field named renderStyle.
|
static java.lang.String |
toField_VOXELS
toField ROUTE name for SFNode field named voxels.
|
CLASS_DEFAULT_VALUE, containerField_ALTERNATE_VALUES, DEF_DEFAULT_VALUE, USE_DEFAULT_VALUEvalidationResult| Constructor and Description |
|---|
VolumeDataObject()
Constructor for VolumeDataObject to initialize member variables with default values.
|
VolumeDataObject(java.lang.String DEFlabel)
Utility constructor that assigns DEF label after initializing member variables with default values.
|
| Modifier and Type | Method and Description |
|---|---|
VolumeDataObject |
addComments(CommentsBlock newCommentsBlock)
Add CommentsBlock to contained commentsList.
|
VolumeDataObject |
addComments(java.lang.String newComment)
Add comment as String to contained commentsList.
|
VolumeDataObject |
addComments(java.lang.String[] newComments)
Add comments as String[] array to contained commentsList.
|
VolumeDataObject |
clearMetadata()
Utility method to clear SFNode value of metadata field.
|
VolumeDataObject |
clearRenderStyle()
Utility method to clear SFNode value of renderStyle field.
|
VolumeDataObject |
clearVoxels()
Utility method to clear SFNode value of voxels field.
|
X3DConcreteElement |
findElementByNameValue(java.lang.String nameValue)
Recursive method to provide object reference to node or statement by name attribute, if found as part of this element or in a contained element.
|
X3DConcreteElement |
findElementByNameValue(java.lang.String nameValue,
java.lang.String elementName)
Recursive method to provide object reference to node or statement by name attribute, if found as part of this element or in a contained element.
|
X3DConcreteNode |
findNodeByDEF(java.lang.String DEFvalue)
Recursive method to provide object reference to node by DEF, if found as this node or in a contained node.
|
java.lang.String |
getAccessType(java.lang.String fieldName)
Indicate accessType corresponding to given fieldName.
|
float[] |
getBboxCenter()
Provide array of 3-tuple float results from initializeOnly SFVec3f field named bboxCenter.
|
float[] |
getBboxSize()
Provide array of 3-tuple float results within allowed range of [0,infinity), or default value [-1 -1 -1], from initializeOnly SFVec3f field named bboxSize.
|
java.lang.String |
getComponent()
Defines X3D component for the VolumeData element: VolumeRendering
|
int |
getComponentLevel()
Provides default X3D component level for this element: 1
|
java.lang.String |
getContainerFieldDefault()
containerField describes typical field relationship of a node to its parent.
|
float[] |
getDimensions()
Provide array of 3-tuple float results within allowed range of (0,infinity) from inputOutput SFVec3f field named dimensions.
|
java.lang.String |
getElementName()
Provides name of this element: VolumeData
|
java.lang.String |
getFieldType(java.lang.String fieldName)
Indicate type corresponding to given fieldName.
|
ISObject |
getIS()
Provide field named IS for establishing IS/connect field connections between ProtoInterface fields and internal ProtoBody nodes.
|
X3DMetadataObject |
getMetadata()
Provide X3DMetadataObject instance (using a properly typed node) from inputOutput SFNode field metadata.
|
X3DVolumeRenderStyleNode |
getRenderStyle()
Provide X3DVolumeRenderStyleNode instance (using a properly typed node) from inputOutput SFNode field renderStyle.
|
X3DTexture3DNode |
getVoxels()
Provide X3DTexture3DNode instance (using a properly typed node) from inputOutput SFNode field voxels.
|
boolean |
hasElementByNameValue(java.lang.String nameValue,
java.lang.String elementName)
Recursive method to determine whether node or statement with given name attribute is found, meaning both objects are attached to same scene graph.
|
boolean |
hasMetadata()
Indicate whether an object is available for inputOutput SFNode field metadata.
|
boolean |
hasNodeByDEF(java.lang.String DEFvalue)
Recursive method to determine whether node with DEFvalue is found, meaning both objects are attached to same scene graph.
|
boolean |
hasRenderStyle()
Indicate whether an object is available for inputOutput SFNode field renderStyle.
|
boolean |
hasVoxels()
Indicate whether an object is available for inputOutput SFNode field voxels.
|
void |
initialize()
Initialize all member variables to default values.
|
VolumeDataObject |
setBboxCenter(float[] newValue)
Assign 3-tuple float array to initializeOnly SFVec3f field named bboxCenter.
|
VolumeDataObject |
setBboxCenter(float x,
float y,
float z)
Assign values to SFVec3f bboxCenter field, similar to
setBboxCenter(float[]). |
VolumeDataObject |
setBboxCenter(SFVec3fObject newValue)
Assign typed object value to SFVec3f bboxCenter field, similar to
setBboxCenter(float[]). |
VolumeDataObject |
setBboxSize(float[] newValue)
Assign 3-tuple float array within allowed range of [0,infinity), or default value [-1 -1 -1], to initializeOnly SFVec3f field named bboxSize.
|
VolumeDataObject |
setBboxSize(float x,
float y,
float z)
Assign values to SFVec3f bboxSize field, similar to
setBboxSize(float[]). |
VolumeDataObject |
setBboxSize(SFVec3fObject newValue)
Assign typed object value to SFVec3f bboxSize field, similar to
setBboxSize(float[]). |
VolumeDataObject |
setCssClass(SFStringObject newValue)
Assign typed object value to SFString cssClass field, similar to
setCssClass(String). |
VolumeDataObject |
setCssClass(java.lang.String newValue)
Assign String value to inputOutput SFString field named class.
|
VolumeDataObject |
setDEF(SFStringObject newValue)
Assign typed object value to SFString DEF field, similar to
setDEF(String). |
VolumeDataObject |
setDEF(java.lang.String newValue)
Assign String value to inputOutput SFString field named DEF.
|
VolumeDataObject |
setDimensions(float[] newValue)
Assign 3-tuple float array within allowed range of (0,infinity) to inputOutput SFVec3f field named dimensions.
|
VolumeDataObject |
setDimensions(float x,
float y,
float z)
Assign values to SFVec3f dimensions field, similar to
setDimensions(float[]). |
VolumeDataObject |
setDimensions(SFVec3fObject newValue)
Assign typed object value to SFVec3f dimensions field, similar to
setDimensions(float[]). |
VolumeDataObject |
setIS(ISObject newValue)
Assign field named IS for establishing IS/connect field connections between ProtoInterface fields and internal ProtoBody nodes.
|
VolumeDataObject |
setMetadata(ProtoInstanceObject newValue)
Assign ProtoInstance (using a properly typed node) to inputOutput SFNode field metadata.
|
VolumeDataObject |
setMetadata(X3DMetadataObject newValue)
Assign X3DMetadataObject instance (using a properly typed node) to inputOutput SFNode field metadata.
|
VolumeDataObject |
setRenderStyle(ProtoInstanceObject newValue)
Assign ProtoInstance (using a properly typed node) to inputOutput SFNode field renderStyle.
|
VolumeDataObject |
setRenderStyle(X3DVolumeRenderStyleNode newValue)
Assign X3DVolumeRenderStyleNode instance (using a properly typed node) to inputOutput SFNode field renderStyle.
|
VolumeDataObject |
setUSE(SFStringObject newValue)
Assign typed object value to SFString USE field, similar to
setUSE(String). |
VolumeDataObject |
setUSE(java.lang.String newValue)
Assign String value to inputOutput SFString field named USE.
|
VolumeDataObject |
setUSE(VolumeDataObject DEFnode)
Assign a USE reference to another DEF node of same node type, similar to
setUSE(String). |
VolumeDataObject |
setVoxels(ProtoInstanceObject newValue)
Assign ProtoInstance (using a properly typed node) to inputOutput SFNode field voxels.
|
VolumeDataObject |
setVoxels(X3DTexture3DNode newValue)
Assign X3DTexture3DNode instance (using a properly typed node) to inputOutput SFNode field voxels.
|
java.lang.String |
toStringClassicVRML(int indentLevel)
Recursive method to provide ClassicVRML string serialization.
|
java.lang.String |
toStringVRML97(int indentLevel)
Recursive method to provide VRML97 string serialization.
|
java.lang.String |
toStringX3D(int indentLevel)
Recursive method to provide X3D string serialization of this model subgraph, utilizing XML encoding and conforming to X3D Canonical Form.
|
java.lang.String |
validate()
Recursive method to validate this element plus all contained nodes and statements,
using both datatype-specification value checks and regular expression (regex) checking of corresponding string values.
|
getContainerFieldAlternateValues, getContainerFieldOverride, getCssClass, getDEF, getUSE, isNode, isStatement, isUSE, resetContainerFieldOverride, setConcreteCssClass, setConcreteDEF, setConcreteUSE, setContainerFieldOverrideclearParentObject, findAncestorElementByName, findAncestorProtoBody, findAncestorSceneObject, findAncestorX3DObject, getPackageName, getParentObject, getValidationResult, hasAncestorElementByName, hasAncestorProtoBody, hasAncestorSceneObject, hasAncestorX3DObject, setParentObject, toStringClassicVRML, toStringVRML97, toStringX3Dpublic static final java.lang.String NAME
public static final java.lang.String COMPONENT
public static final int LEVEL
public static final float[] BBOXCENTER_DEFAULT_VALUE
public static final float[] BBOXSIZE_DEFAULT_VALUE
public static final float[] DIMENSIONS_DEFAULT_VALUE
public static final java.lang.String containerField_DEFAULT_VALUE
public static final java.lang.String fromField_DIMENSIONS
public static final java.lang.String toField_DIMENSIONS
public static final java.lang.String fromField_METADATA
public static final java.lang.String toField_METADATA
public static final java.lang.String fromField_RENDERSTYLE
public static final java.lang.String toField_RENDERSTYLE
public static final java.lang.String fromField_VOXELS
public static final java.lang.String toField_VOXELS
public VolumeDataObject()
public VolumeDataObject(java.lang.String DEFlabel)
DEFlabel - unique DEF name for this X3D nodepublic final java.lang.String getElementName()
getElementName in class X3DConcreteElementpublic final java.lang.String getComponent()
getComponent in class X3DConcreteElementpublic final int getComponentLevel()
getComponentLevel in class X3DConcreteElementpublic java.lang.String getFieldType(java.lang.String fieldName)
getFieldType in class X3DConcreteElementfieldName - name of field in this X3D nodeConfigurationProperties.ERROR_UNKNOWN_FIELD_TYPEpublic java.lang.String getAccessType(java.lang.String fieldName)
getAccessType in class X3DConcreteElementfieldName - name of field in this X3D nodeConfigurationProperties.ERROR_UNKNOWN_FIELD_ACCESSTYPEpublic final java.lang.String getContainerFieldDefault()
getContainerFieldDefault in class X3DConcreteNodepublic final void initialize()
initialize in class X3DConcreteNodepublic float[] getBboxCenter()
getBboxCenter in interface X3DBoundedObjectgetBboxCenter in interface VolumeDatagetBboxCenter in interface X3DVolumeDataNodepublic VolumeDataObject setBboxCenter(float[] newValue)
setBboxCenter in interface X3DBoundedObjectsetBboxCenter in interface VolumeDatasetBboxCenter in interface X3DVolumeDataNodenewValue - is new value for the bboxCenter field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setBboxCenter(SFVec3fObject newValue)
setBboxCenter(float[]).newValue - is new value for the bboxCenter field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setBboxCenter(float x, float y, float z)
setBboxCenter(float[]).x - first componenty - second componentz - third componentVolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public float[] getBboxSize()
getBboxSize in interface X3DBoundedObjectgetBboxSize in interface VolumeDatagetBboxSize in interface X3DVolumeDataNodepublic VolumeDataObject setBboxSize(float[] newValue)
setBboxSize in interface X3DBoundedObjectsetBboxSize in interface VolumeDatasetBboxSize in interface X3DVolumeDataNodenewValue - is new value for the bboxSize field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setBboxSize(SFVec3fObject newValue)
setBboxSize(float[]).newValue - is new value for the bboxSize field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setBboxSize(float x, float y, float z)
setBboxSize(float[]).x - first componenty - second componentz - third componentVolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public float[] getDimensions()
getDimensions in interface VolumeDatagetDimensions in interface X3DVolumeDataNodepublic VolumeDataObject setDimensions(float[] newValue)
setDimensions in interface VolumeDatasetDimensions in interface X3DVolumeDataNodenewValue - is new value for the dimensions field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setDimensions(SFVec3fObject newValue)
setDimensions(float[]).newValue - is new value for the dimensions field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setDimensions(float x, float y, float z)
setDimensions(float[]).x - first componenty - second componentz - third componentVolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public X3DMetadataObject getMetadata()
getMetadata in interface X3DChildNodegetMetadata in interface X3DNodegetMetadata in interface VolumeDatagetMetadata in interface X3DVolumeDataNodegetMetadataProtoInstance(),
X3D Scene Authoring Hints: Metadata Nodespublic VolumeDataObject setMetadata(X3DMetadataObject newValue)
setMetadata in interface X3DChildNodesetMetadata in interface X3DNodesetMetadata in interface VolumeDatasetMetadata in interface X3DVolumeDataNodesetMetadata in class X3DConcreteNodenewValue - is new value for the metadata field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).setMetadata(ProtoInstanceObject),
X3D Scene Authoring Hints: Metadata Nodespublic VolumeDataObject clearMetadata()
VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive
setAttribute method invocations).public VolumeDataObject setMetadata(ProtoInstanceObject newValue)
setMetadata in class X3DConcreteNodenewValue - is new value for the metadata field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).setMetadata(X3DMetadataObject)public boolean hasMetadata()
getMetadata(),
getMetadataProtoInstance(),
X3D Scene Authoring Hints: Metadata Nodespublic X3DVolumeRenderStyleNode getRenderStyle()
getRenderStyle in interface VolumeDatagetRenderStyleProtoInstance()public VolumeDataObject setRenderStyle(X3DVolumeRenderStyleNode newValue)
setRenderStyle in interface VolumeDatanewValue - is new value for the renderStyle field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).setRenderStyle(ProtoInstanceObject)public VolumeDataObject clearRenderStyle()
VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive
setAttribute method invocations).public VolumeDataObject setRenderStyle(ProtoInstanceObject newValue)
newValue - is new value for the renderStyle field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).setRenderStyle(X3DVolumeRenderStyleNode)public boolean hasRenderStyle()
getRenderStyle(),
getRenderStyleProtoInstance()public X3DTexture3DNode getVoxels()
getVoxels in interface VolumeDatagetVoxelsProtoInstance()public VolumeDataObject setVoxels(X3DTexture3DNode newValue)
setVoxels in interface VolumeDatanewValue - is new value for the voxels field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).setVoxels(ProtoInstanceObject)public VolumeDataObject clearVoxels()
VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive
setAttribute method invocations).public VolumeDataObject setVoxels(ProtoInstanceObject newValue)
newValue - is new value for the voxels field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).setVoxels(X3DTexture3DNode)public boolean hasVoxels()
getVoxels(),
getVoxelsProtoInstance()public final VolumeDataObject setDEF(java.lang.String newValue)
setDEF in interface X3DChildNodesetDEF in interface X3DNodesetDEF in interface VolumeDatasetDEF in interface X3DVolumeDataNodesetDEF in class X3DConcreteNodenewValue - is new value for the DEF field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setDEF(SFStringObject newValue)
setDEF(String).newValue - is new value for the DEF field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public final VolumeDataObject setUSE(java.lang.String newValue)
USE node is still an independent object, with the USE value matching the DEF value in the preceding object.
setUSE() method on this node resets all other fields to their default values (except for containerField) and also releases all child nodes.setUSE in interface X3DChildNodesetUSE in interface X3DNodesetUSE in interface VolumeDatasetUSE in interface X3DVolumeDataNodesetUSE in class X3DConcreteNodenewValue - is new value for the USE field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setUSE(SFStringObject newValue)
setUSE(String).newValue - is new value for the USE field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public final VolumeDataObject setCssClass(java.lang.String newValue)
setCssClass in interface X3DChildNodesetCssClass in interface X3DNodesetCssClass in interface VolumeDatasetCssClass in interface X3DVolumeDataNodesetCssClass in class X3DConcreteNodenewValue - is new value for the class field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setCssClass(SFStringObject newValue)
setCssClass(String).newValue - is new value for the class field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject setIS(ISObject newValue)
setIS in class X3DConcreteNodenewValue - is new value for the description field.VolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public ISObject getIS()
getIS in class X3DConcreteNodepublic VolumeDataObject setUSE(VolumeDataObject DEFnode)
setUSE(String).
setUSE() method on this node resets all other fields to their default values (except for containerField) and also releases all child nodes.
DEFnode - must have a DEF value definedVolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive method invocations on the same object).public VolumeDataObject addComments(java.lang.String newComment)
addComments in class X3DConcreteElementnewComment - initial valueVolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive
setAttribute method invocations).public VolumeDataObject addComments(java.lang.String[] newComments)
addComments in class X3DConcreteElementnewComments - array of commentsVolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive
setAttribute method invocations).public VolumeDataObject addComments(CommentsBlock newCommentsBlock)
addComments in class X3DConcreteElementnewCommentsBlock - block of comments to addVolumeDataObject - namely this same object to allow sequential method pipelining (i.e. consecutive
setAttribute method invocations).public java.lang.String toStringX3D(int indentLevel)
toStringX3D in class X3DConcreteElementindentLevel - number of levels of indentation for this elementX3DObject.FILE_EXTENSION_X3D,
X3DObject.FILE_EXTENSION_XML,
X3DObject.toStringXML(),
X3DObject.toFileXML(String),
X3DObject.toFileX3D(String),
X3D XML Encoding,
X3D Compressed Binary Encoding: X3D Canonical Formpublic java.lang.String toStringClassicVRML(int indentLevel)
toStringClassicVRML in class X3DConcreteElementindentLevel - number of levels of indentation for this elementX3DObject.FILE_EXTENSION_CLASSICVRML,
X3D Resources: Virtual Reality Modeling Language (VRML) 97,
Extensible 3D (X3D) encodings Part 2: Classic VRML encoding,
Extensible 3D (X3D) encodings Part 2: Classic VRML encoding, Annex A: Grammarpublic java.lang.String toStringVRML97(int indentLevel)
toStringVRML97 in class X3DConcreteElementindentLevel - number of levels of indentation for this elementX3DObject.FILE_EXTENSION_VRML97,
X3D Resources: Virtual Reality Modeling Language (VRML) 97,
Virtual Reality Modeling Language (VRML) 97 specification,
VRML 97 v2.1 Amendmentpublic X3DConcreteElement findElementByNameValue(java.lang.String nameValue)
findElementByNameValue in class X3DConcreteElementnameValue - is value of the name field being searched for in this element and child elements(if any)findNodeByDEF(String),
X3DConcreteElement.hasAncestorSceneObject(),
X3DConcreteElement.findAncestorX3DObject()public X3DConcreteElement findElementByNameValue(java.lang.String nameValue, java.lang.String elementName)
findElementByNameValue in class X3DConcreteElementnameValue - is value of the name field being searched for in this element and child elements(if any)elementName - identifies the element of interest (meta MetadataString ProtoDeclare CADassembly ProtoInstance HAnimHumanoid etc.)findNodeByDEF(String),
X3DConcreteElement.hasAncestorSceneObject(),
X3DConcreteElement.findAncestorX3DObject()public boolean hasElementByNameValue(java.lang.String nameValue,
java.lang.String elementName)
nameValue - is value of the name field being searched for in this element and child elements(if any)elementName - identifies the element of interest (meta MetadataString ProtoDeclare CADassembly ProtoInstance HAnimHumanoid etc.)findElementByNameValue(String, String)public X3DConcreteNode findNodeByDEF(java.lang.String DEFvalue)
findNodeByDEF in class X3DConcreteElementDEFvalue - is value of the name field being searched for in this element and child elements(if any)findElementByNameValue(String),
X3DConcreteElement.hasAncestorSceneObject(),
X3DConcreteElement.findAncestorX3DObject()public boolean hasNodeByDEF(java.lang.String DEFvalue)
DEFvalue - is value of the name field being searched for in this element and child elements(if any)findNodeByDEF(String)public java.lang.String validate()
validate in class X3DConcreteElementCopyright ©2005-2017 Web3D Consortium under an open-source license, free for any use. Feedback is welcome.