@prefix :        <https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerExample.ttl#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema:  <http://schema.org/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix x3d:     <https://www.web3d.org/specifications/x3d-4.0.xsd#> .
@prefix x3do:    <https://www.web3d.org/specifications/X3dOntology4.0#> .

:X3D a owl:NamedIndividual, x3do:X3D ;
  x3do:hasHead :head ;
  x3do:hasScene :Scene ;
  x3do:profile 'Immersive' ;
  x3do:version '3.0' ;
  x3do:noNamespaceSchemaLocation 'https://www.web3d.org/specifications/x3d-3.0.xsd' .
:head a owl:NamedIndividual, x3do:head ;
  x3do:hasParent :X3D ;
  x3do:hasMeta :meta_1_1, :meta_1_2, :meta_1_3, :meta_1_4, :meta_1_5, :meta_1_6, :meta_1_7, :meta_1_8, :meta_1_9 .
:meta_1_1 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'DvdControllerExample.x3d' ;
  x3do:name 'title' .
:meta_1_2 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Digital Virtual Display (DVD) Controller interface example to control a scenario&apos;s animation timing, defined using an ExternProtoDeclare for easy reuse.' ;
  x3do:name 'description' .
:meta_1_3 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Jane Wu, Don Brutzman' ;
  x3do:name 'creator' .
:meta_1_4 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '10 November 2001' ;
  x3do:name 'created' .
:meta_1_5 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '5 March 2024' ;
  x3do:name 'modified' .
:meta_1_6 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'DvdController animation control' ;
  x3do:name 'subject' .
:meta_1_7 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerExample.x3d' ;
  x3do:name 'identifier' .
:meta_1_8 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D-Edit 4.0, https://savage.nps.edu/X3D-Edit' ;
  x3do:name 'generator' .
:meta_1_9 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '../../license.html' ;
  x3do:name 'license' .
:meta dcterms:title "DvdControllerExample.x3d" .
:meta dcterms:description "Digital Virtual Display (DVD) Controller interface example to control a scenario's animation timing, defined using an ExternProtoDeclare for easy reuse." .
:meta dcterms:creator "Jane Wu, Don Brutzman" .
:meta dcterms:created "10 November 2001" .
:meta dcterms:modified "5 March 2024" .
:meta dcterms:subject "DvdController animation control" .
:meta dcterms:identifier "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerExample.x3d" .
:meta dcterms:generator "X3D-Edit 4.0, https://savage.nps.edu/X3D-Edit" .
:meta dcterms:license "../../license.html" .
:Scene a owl:NamedIndividual, x3do:Scene ;
  x3do:hasParent :X3D ;
  x3do:hasChildren :WorldInfo_2_1, :Transform_2_4, :Transform_2_5, :TimeTextScript, :FractionConverter, :SecondsConverter ;
  x3do:hasExternProtoDeclare :ExternProtoDeclare_2_2, :ExternProtoDeclare_2_3 ;
  x3do:hasROUTE :ROUTE_2_7, :ROUTE_2_8, :ROUTE_2_10, :ROUTE_2_11, :ROUTE_2_13, :ROUTE_2_14 .
:WorldInfo_2_1 a owl:NamedIndividual, x3do:WorldInfo ;
  x3do:hasParent :Scene ;
  x3do:title 'DvdControllerExample.x3d' .
:ExternProtoDeclare_2_2 a owl:NamedIndividual, x3do:ExternProtoDeclare ;
  x3do:hasParent :Scene ;
  x3do:hasField :field_2_2_1, :field_2_2_2, :field_2_2_3, :field_2_2_4, :field_2_2_5, :field_2_2_6, :field_2_2_7, :field_2_2_8, :field_2_2_9, :field_2_2_10, :field_2_2_11, :field_2_2_12, :field_2_2_13, :field_2_2_14, :field_2_2_15, :field_2_2_16, :field_2_2_17, :field_2_2_18, :field_2_2_19, :field_2_2_20, :field_2_2_21, :field_2_2_22, :field_2_2_23, :field_2_2_24, :field_2_2_25, :field_2_2_26, :field_2_2_27 ;
  x3do:appinfo 'Digital Virtual Display (DVD) Controller Prototype is a heads=up display (HUD) to control animation timing' ;
  x3do:name 'DvdController' ;
  x3do:url '"DvdControllerPrototype.x3d#DvdController" "../../../Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.x3d#DvdController" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.x3d#DvdController" "DvdControllerPrototype.wrl#DvdController" "../../../Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.wrl#DvdController" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.wrl#DvdController"' .
:field_2_2_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Short description of what is animated by this DvdController.' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_2_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Whether or not play mode is enabled including during startup.' ;
  x3do:name 'playEnabled' ;
  x3do:type 'SFBool' .
:field_2_2_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Initializes how control buttons and slider are displayed. The control buttons include DIS control (i.e. Master Ghost Local) and Playback control (i.e. Reset to Start Fast Rewind Rewind Pause Play Fast Forward Reset to End). Possible values are (case sensitive): ALL DIS_ONLY PLAYBACK_ONLY SLIDER_ONLY DIS_PLAYBACK DIS_SLIDER PLAYBACK_SLIDER and NONE.' ;
  x3do:name 'displayMode' ;
  x3do:type 'SFString' .
:field_2_2_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'inputOnly' ;
  x3do:appinfo 'Sets how control buttons and slider are displayed. The control buttons include DIS control (i.e. Master Ghost Local) and Playback control (i.e. Reset to Start Fast Rewind Rewind Pause Play Fast Forward Reset to End). Possible values are (case sensitive): ALL DIS_ONLY PLAYBACK_ONLY SLIDER_ONLY DIS_PLAYBACK DIS_SLIDER PLAYBACK_SLIDER and NONE.' ;
  x3do:name 'setDisplayMode' ;
  x3do:type 'SFString' .
:field_2_2_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Default button color.' ;
  x3do:name 'buttonColor' ;
  x3do:type 'SFColor' .
:field_2_2_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Button color when selected by user.' ;
  x3do:name 'selectedButtonColor' ;
  x3do:type 'SFColor' .
:field_2_2_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Default label color.' ;
  x3do:name 'labelColor' ;
  x3do:type 'SFColor' .
:field_2_2_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Label color when selected by user.' ;
  x3do:name 'selectedLabelColor' ;
  x3do:type 'SFColor' .
:field_2_2_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Modified screen location and distance (for size).' ;
  x3do:name 'locationOffset' ;
  x3do:type 'SFVec3f' .
:field_2_2_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'clockEnabled' ;
  x3do:type 'SFBool' .
:field_2_2_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Time for complete loop cycle in seconds.' ;
  x3do:name 'cycleInterval' ;
  x3do:type 'SFTime' .
:field_2_2_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_cycleInterval' ;
  x3do:type 'SFTime' .
:field_2_2_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'cycleInterval_changed' ;
  x3do:type 'SFTime' .
:field_2_2_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Factor used to determine the speed increase/decrease for Fast Rewind and Fast Forward action.' ;
  x3do:name 'speedFactor' ;
  x3do:type 'SFFloat' .
:field_2_2_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isActive' ;
  x3do:type 'SFBool' .
:field_2_2_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'startTime_changed' ;
  x3do:type 'SFTime' .
:field_2_2_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'stopTime_changed' ;
  x3do:type 'SFTime' .
:field_2_2_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'time_changed' ;
  x3do:type 'SFTime' .
:field_2_2_19 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fraction_changed' ;
  x3do:type 'SFFloat' .
:field_2_2_20 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'secondsElapsed' ;
  x3do:type 'SFTime' .
:field_2_2_21 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isMaster isRemote and isLocal are booleans represent a 3-way toggle. Only one of them can have a true value at any time.' ;
  x3do:name 'isMaster' ;
  x3do:type 'SFBool' .
:field_2_2_22 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isMaster isRemote and isLocal are booleans represent a 3-way toggle. Only one of them can have a true value at any time.' ;
  x3do:name 'isRemote' ;
  x3do:type 'SFBool' .
:field_2_2_23 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isMaster isRemote and isLocal are booleans represent a 3-way toggle. Only one of them can have a true value at any time.' ;
  x3do:name 'isLocal' ;
  x3do:type 'SFBool' .
:field_2_2_24 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isPaused and isRunning always have opposite values. When isPaused is true isRunning will be false and vice versa.' ;
  x3do:name 'isPaused' ;
  x3do:type 'SFBool' .
:field_2_2_25 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isPaused and isRunning always have opposite values. When isPaused is true isRunning will be false and vice versa.' ;
  x3do:name 'isRunning' ;
  x3do:type 'SFBool' .
:field_2_2_26 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Enable/disable console output for troubleshooting.' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_2_27 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'testTimeVal' ;
  x3do:type 'SFTime' .
:ExternProtoDeclare_2_3 a owl:NamedIndividual, x3do:ExternProtoDeclare ;
  x3do:hasParent :Scene ;
  x3do:hasField :field_2_3_1, :field_2_3_2, :field_2_3_3, :field_2_3_4, :field_2_3_5, :field_2_3_6, :field_2_3_7, :field_2_3_8, :field_2_3_9, :field_2_3_10, :field_2_3_11, :field_2_3_12 ;
  x3do:appinfo 'SingleTypeConversion converts from a single typed value to various other types of values' ;
  x3do:name 'SingleTypeConversion' ;
  x3do:url '"../../../Savage/Tools/Authoring/SingleTypeConversionPrototype.x3d#SingleTypeConversion" "https://savage.nps.edu/Savage/Tools/Authoring/SingleTypeConversionPrototype.x3d#SingleTypeConversion" "../../../Savage/Tools/Authoring/SingleTypeConversionPrototype.wrl#SingleTypeConversion" "https://savage.nps.edu/Savage/Tools/Authoring/SingleTypeConversionPrototype.wrl#SingleTypeConversion"' .
:field_2_3_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'decimalPlaces is the number of significant digits after the decimal point. The -1 value indicates no round off.' ;
  x3do:name 'decimalPlaces' ;
  x3do:type 'SFInt32' .
:field_2_3_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setDecimalPlaces' ;
  x3do:type 'SFInt32' .
:field_2_3_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'BooleanValue' ;
  x3do:type 'SFBool' .
:field_2_3_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'FloatValue' ;
  x3do:type 'SFFloat' .
:field_2_3_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'IntegerValue' ;
  x3do:type 'SFInt32' .
:field_2_3_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'TimeValue' ;
  x3do:type 'SFTime' .
:field_2_3_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'BooleanResult' ;
  x3do:type 'SFBool' .
:field_2_3_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'FloatResult' ;
  x3do:type 'SFFloat' .
:field_2_3_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'IntegerResult' ;
  x3do:type 'SFInt32' .
:field_2_3_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'TimeResult' ;
  x3do:type 'SFTime' .
:field_2_3_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'StringResult' ;
  x3do:type 'SFString' .
:field_2_3_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_3 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'StringsResult' ;
  x3do:type 'MFString' .
:Transform_2_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :DvdControllerInterface .
:DvdControllerInterface a owl:NamedIndividual, x3do:ProtoInstance ;
  x3do:hasParent :Transform_2_4 ;
  x3do:hasFieldValue :fieldValue_2_4_1_1, :fieldValue_2_4_1_2, :fieldValue_2_4_1_3, :fieldValue_2_4_1_4, :fieldValue_2_4_1_5, :fieldValue_2_4_1_6, :fieldValue_2_4_1_7, :fieldValue_2_4_1_8, :fieldValue_2_4_1_9 ;
  x3do:DEF 'DvdControllerInterface' ;
  x3do:name 'DvdController' .
:fieldValue_2_4_1_1 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'displayMode' ;
  x3do:value 'PLAYBACK_SLIDER' .
:fieldValue_2_4_1_2 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'playEnabled' ;
  x3do:value true .
:fieldValue_2_4_1_3 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'buttonColor' ;
  x3do:value ( 0.655 0.655 0.655 ) .
:fieldValue_2_4_1_4 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'selectedButtonColor' ;
  x3do:value ( 0.675 0.675 0.675 ) .
:fieldValue_2_4_1_5 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'selectedLabelColor' ;
  x3do:value ( 0.9 0 0 ) .
:fieldValue_2_4_1_6 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'locationOffset' ;
  x3do:value ( -5 -2 0 ) .
:fieldValue_2_4_1_7 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'cycleInterval' ;
  x3do:value '10' .
:fieldValue_2_4_1_8 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'speedFactor' ;
  x3do:value 10.0 .
:fieldValue_2_4_1_9 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :DvdControllerInterface ;
  x3do:name 'traceEnabled' ;
  x3do:value true .
:Transform_2_5 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :Transform_2_5_1, :Transform_2_5_2, :Transform_2_5_3, :Transform_2_5_4, :Transform_2_5_5, :Transform_2_5_6 ;
  x3do:translation ( -3 0 0 ) .
:Transform_2_5_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_5 ;
  x3do:hasChildren :Shape_2_5_1_1 ;
  x3do:translation ( -5 3 -5 ) .
:Shape_2_5_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_5_1 ;
  x3do:hasAppearance :Appearance_2_5_1_1_1 ;
  x3do:hasGeometry :Text_2_5_1_1_2 .
:Appearance_2_5_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_5_1_1 ;
  x3do:hasMaterial :Material_2_5_1_1_1_1 .
:Material_2_5_1_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_5_1_1_1 .
:Text_2_5_1_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_5_1_1 ;
  x3do:string '"fraction_changed:"' .
:Transform_2_5_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_5 ;
  x3do:hasChildren :Shape_2_5_2_1 ;
  x3do:translation ( 4 3 -5 ) .
:Shape_2_5_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_5_2 ;
  x3do:hasAppearance :Appearance_2_5_2_1_1 ;
  x3do:hasGeometry :FractionText .
:Appearance_2_5_2_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_5_2_1 ;
  x3do:hasMaterial :Material_2_5_2_1_1_1 .
:Material_2_5_2_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_5_2_1_1 .
:FractionText a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_5_2_1 ;
  x3do:DEF 'FractionText' ;
  x3do:string '"N/A"' .
:Transform_2_5_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_5 ;
  x3do:hasChildren :Shape_2_5_3_1 ;
  x3do:translation ( -5 2 -5 ) .
:Shape_2_5_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_5_3 ;
  x3do:hasAppearance :Appearance_2_5_3_1_1 ;
  x3do:hasGeometry :Text_2_5_3_1_2 .
:Appearance_2_5_3_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_5_3_1 ;
  x3do:hasMaterial :Material_2_5_3_1_1_1 .
:Material_2_5_3_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_5_3_1_1 .
:Text_2_5_3_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_5_3_1 ;
  x3do:string '"secondsElapsed:"' .
:Transform_2_5_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_5 ;
  x3do:hasChildren :Shape_2_5_4_1 ;
  x3do:translation ( 4 2 -5 ) .
:Shape_2_5_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_5_4 ;
  x3do:hasAppearance :Appearance_2_5_4_1_1 ;
  x3do:hasGeometry :SecondsElapsedText .
:Appearance_2_5_4_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_5_4_1 ;
  x3do:hasMaterial :Material_2_5_4_1_1_1 .
:Material_2_5_4_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_5_4_1_1 .
:SecondsElapsedText a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_5_4_1 ;
  x3do:DEF 'SecondsElapsedText' ;
  x3do:string '"N/A"' .
:Transform_2_5_5 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_5 ;
  x3do:hasChildren :Shape_2_5_5_1 ;
  x3do:translation ( -5 1 -5 ) .
:Shape_2_5_5_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_5_5 ;
  x3do:hasAppearance :Appearance_2_5_5_1_1 ;
  x3do:hasGeometry :actual_time_changed .
:Appearance_2_5_5_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_5_5_1 ;
  x3do:hasMaterial :Material_2_5_5_1_1_1 .
:Material_2_5_5_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_5_5_1_1 .
:actual_time_changed a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_5_5_1 ;
  x3do:DEF 'actual_time_changed' ;
  x3do:string '"local clock time:"' .
:Transform_2_5_6 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_5 ;
  x3do:hasChildren :Shape_2_5_6_1 ;
  x3do:translation ( 4 1 -5 ) .
:Shape_2_5_6_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_5_6 ;
  x3do:hasAppearance :Appearance_2_5_6_1_1 ;
  x3do:hasGeometry :TimeText .
:Appearance_2_5_6_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_5_6_1 ;
  x3do:hasMaterial :Material_2_5_6_1_1_1 .
:Material_2_5_6_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_5_6_1_1 .
:TimeText a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_5_6_1 ;
  x3do:DEF 'TimeText' ;
  x3do:string '"N/A"' .
:TimeTextScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :Scene ;
  x3do:hasField :field_2_6_1, :field_2_6_2, :field_2_6_3 ;
  x3do:DEF 'TimeTextScript' ;
  x3do:sourceCode """
ecmascript:

function initialize ()
{
	tracePrint('initialize () complete');
}
function setCurrentTime(value, timeStamp)
{
	tracePrint('setCurrentTime(' + value + ')');
	myDate = new Date(); // value unused, causes BS Contact fatal error
        if (myDate == null)
        {
            Browser.println ('[DvdControllerExample TimeTextScript] setCurrentTime() error: class Date not supported');
            return;
        }
	numHour   = myDate.getHours();
	numMinute = myDate.getMinutes();
	numSecond = myDate.getSeconds();

	date = myDate.getDate();
	monthNumber = myDate.getMonth();
	year = myDate.getYear() + 1900;

	// javascript switch statement is convenient but not consistently supported, so test the old-fashioned way:
        
        if (monthNumber==0)
	{
            monthText ='January';
	}
        else if (monthNumber==1)
	{
            monthText ='February';
	}
        else if (monthNumber==2)
	{
            monthText ='March';
	}
        else if (monthNumber==3)
	{
            monthText ='April';
	}
        else if (monthNumber==4)
	{
            monthText ='May';
	}
        else if (monthNumber==5)
	{
            monthText ='June';
	}
        else if (monthNumber==6)
	{
            monthText ='July';
	}
        else if (monthNumber==7)
	{
            monthText ='August';
	}
        else if (monthNumber==8)
	{
            monthText ='September';
	}
        else if (monthNumber==9)
	{
            monthText ='October';
	}
        else if (monthNumber==10)
	{
            monthText ='November';
	}
        else if (monthNumber==11)
	{
            monthText ='December';
	}
        else
	{
            monthText ='(illegal month index)';
        }

	if (numHour < 10)
		hour ='0' + numHour;
	else
		hour = numHour;

	if (numMinute < 10)
		minute ='0' + numMinute;
	else
		minute = numMinute;

	numSecond = Math.round(numSecond * 1000.0) / 1000.0;
	if (numSecond < 10)
		second ='0' + numSecond;
	else
		second = numSecond;
	text = hour + ':' + minute + ':' + second + ', ' + date + ' ' + monthText + ' ' + year;
	timeText = new MFString(text);
        //deprecated	timeText = new MFString(myDate.toGMTString());

        tracePrint ('timeText=' + timeText.toString());
}
function tracePrint (text)
{
	if (true) Browser.println ('[DvdControllerExample TimeTextScript] ' + text);
}
""" .
:field_2_6_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeTextScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'time' ;
  x3do:type 'SFTime' ;
  x3do:value '-1' .
:field_2_6_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeTextScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setCurrentTime' ;
  x3do:type 'SFTime' .
:field_2_6_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeTextScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'timeText' ;
  x3do:type 'MFString' .
:ROUTE_2_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'time_changed' ;
  x3do:fromNode 'DvdControllerInterface' ;
  x3do:toField 'setCurrentTime' ;
  x3do:toNode 'TimeTextScript' .
:ROUTE_2_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'timeText' ;
  x3do:fromNode 'TimeTextScript' ;
  x3do:toField 'set_string' ;
  x3do:toNode 'TimeText' .
:FractionConverter a owl:NamedIndividual, x3do:ProtoInstance ;
  x3do:hasParent :Scene ;
  x3do:hasFieldValue :fieldValue_2_9_1 ;
  x3do:DEF 'FractionConverter' ;
  x3do:name 'SingleTypeConversion' .
:fieldValue_2_9_1 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :FractionConverter ;
  x3do:name 'decimalPlaces' ;
  x3do:value 2 .
:ROUTE_2_10 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'DvdControllerInterface' ;
  x3do:toField 'FloatValue' ;
  x3do:toNode 'FractionConverter' .
:ROUTE_2_11 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'StringsResult' ;
  x3do:fromNode 'FractionConverter' ;
  x3do:toField 'set_string' ;
  x3do:toNode 'FractionText' .
:SecondsConverter a owl:NamedIndividual, x3do:ProtoInstance ;
  x3do:hasParent :Scene ;
  x3do:hasFieldValue :fieldValue_2_12_1 ;
  x3do:DEF 'SecondsConverter' ;
  x3do:name 'SingleTypeConversion' .
:fieldValue_2_12_1 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :SecondsConverter ;
  x3do:name 'decimalPlaces' ;
  x3do:value 2 .
:ROUTE_2_13 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'secondsElapsed' ;
  x3do:fromNode 'DvdControllerInterface' ;
  x3do:toField 'TimeValue' ;
  x3do:toNode 'SecondsConverter' .
:ROUTE_2_14 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Scene ;
  x3do:fromField 'StringsResult' ;
  x3do:fromNode 'SecondsConverter' ;
  x3do:toField 'set_string' ;
  x3do:toNode 'SecondsElapsedText' .
