/** * Get the value of a field. If the field is a primitive type, it will return a class representing * the value. For arrays or nodes it will return the instance directly. * * @param index The index of the field to change. * @return The class representing the field value * @throws InvalidFieldException The field index is not known */ public VRMLFieldData getFieldValue(int index) throws InvalidFieldException { VRMLFieldData fieldData = fieldLocalData.get(); switch (index) { case FIELD_MODE: fieldData.clear(); fieldData.stringArrayValue = vfMode; fieldData.dataType = VRMLFieldData.STRING_ARRAY_DATA; fieldData.numElements = vfMode.length; break; case FIELD_SOURCE: fieldData.clear(); fieldData.stringArrayValue = vfSource; fieldData.dataType = VRMLFieldData.STRING_ARRAY_DATA; fieldData.numElements = vfSource.length; break; case FIELD_FUNCTION: fieldData.clear(); fieldData.stringArrayValue = vfFunction; fieldData.dataType = VRMLFieldData.STRING_ARRAY_DATA; fieldData.numElements = vfFunction.length; break; case FIELD_TEXTURE: VRMLNodeType kids[] = new VRMLNodeType[vfTexture.size()]; vfTexture.toArray(kids); fieldData.clear(); fieldData.nodeArrayValue = kids; fieldData.dataType = VRMLFieldData.NODE_ARRAY_DATA; fieldData.numElements = kids.length; break; case FIELD_COLOR: fieldData.clear(); fieldData.floatArrayValue = vfColor; fieldData.dataType = VRMLFieldData.FLOAT_ARRAY_DATA; fieldData.numElements = 1; break; case FIELD_ALPHA: fieldData.clear(); fieldData.floatValue = vfAlpha; fieldData.dataType = VRMLFieldData.FLOAT_DATA; fieldData.numElements = 1; break; default: super.getFieldValue(index); } return fieldData; }