@prefix :        <https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/SliderFloatPrototype.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 'SliderFloatPrototype.x3d' ;
  x3do:name 'title' .
:meta_1_2 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'A Slider prototype enabling mouse input where float output values are needed. Size, min/max values and color are defined by the author.' ;
  x3do:name 'description' .
:meta_1_3 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Mike Hunsberger, Jane Wu' ;
  x3do:name 'creator' .
:meta_1_4 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '17 October 2001' ;
  x3do:name 'created' .
:meta_1_5 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '15 October 2023' ;
  x3do:name 'modified' .
:meta_1_6 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'animation slider' ;
  x3do:name 'subject' .
:meta_1_7 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/SliderFloatPrototype.x3d' ;
  x3do:name 'identifier' .
:meta_1_8 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D-Edit 4.0, https://www.web3d.org/x3d/tools/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 "SliderFloatPrototype.x3d" .
:meta dcterms:description "A Slider prototype enabling mouse input where float output values are needed. Size, min/max values and color are defined by the author." .
:meta dcterms:creator "Mike Hunsberger, Jane Wu" .
:meta dcterms:created "17 October 2001" .
:meta dcterms:modified "15 October 2023" .
:meta dcterms:subject "animation slider" .
:meta dcterms:identifier "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/SliderFloatPrototype.x3d" .
:meta dcterms:generator "X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit" .
:meta dcterms:license "../../license.html" .
:Scene a owl:NamedIndividual, x3do:Scene ;
  x3do:hasParent :X3D ;
  x3do:hasChildren :WorldInfo_2_1, :Anchor_2_3 ;
  x3do:hasProtoDeclare :ProtoDeclare_2_2 .
:WorldInfo_2_1 a owl:NamedIndividual, x3do:WorldInfo ;
  x3do:hasParent :Scene ;
  x3do:title 'SliderFloatPrototype.x3d' .
:ProtoDeclare_2_2 a owl:NamedIndividual, x3do:ProtoDeclare ;
  x3do:hasParent :Scene ;
  x3do:hasProtoInterface :ProtoInterface_2_2_1 ;
  x3do:hasProtoBody :ProtoBody_2_2_2 ;
  x3do:appinfo 'Slider user-interface widget that produces floating-point output values' ;
  x3do:name 'SliderFloat' .
:ProtoInterface_2_2_1 a owl:NamedIndividual, x3do:ProtoInterface ;
  x3do:hasParent :ProtoDeclare_2_2 ;
  x3do:hasField :field_2_2_1_1, :field_2_2_1_2, :field_2_2_1_3, :field_2_2_1_4, :field_2_2_1_5, :field_2_2_1_6, :field_2_2_1_7, :field_2_2_1_8, :field_2_2_1_9, :field_2_2_1_10, :field_2_2_1_11, :field_2_2_1_12, :field_2_2_1_13, :field_2_2_1_14, :field_2_2_1_15 .
:field_2_2_1_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Allowed values: vertical, horizontal' ;
  x3do:name 'layoutDirection' ;
  x3do:type 'SFString' ;
  x3do:value 'vertical' .
:field_2_2_1_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 1.0' ;
  x3do:name 'height' ;
  x3do:type 'SFFloat' ;
  x3do:value 1.0 .
:field_2_2_1_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.1' ;
  x3do:name 'radius' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.1 .
:field_2_2_1_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.02' ;
  x3do:name 'barRadius' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.02 .
:field_2_2_1_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value .8 .4 .8' ;
  x3do:name 'sliderBarColor' ;
  x3do:type 'SFColor' ;
  x3do:value ( .8 .4 .8 ) .
:field_2_2_1_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value .3 .4 .8' ;
  x3do:name 'sliderBallColor' ;
  x3do:type 'SFColor' ;
  x3do:value ( .3 .4 .8 ) .
:field_2_2_1_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value .2 .3 .9' ;
  x3do:name 'sliderEndColor' ;
  x3do:type 'SFColor' ;
  x3do:value ( .2 .3 .9 ) .
:field_2_2_1_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.0' ;
  x3do:name 'min' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_1_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 10.0' ;
  x3do:name 'max' ;
  x3do:type 'SFFloat' ;
  x3do:value 10.0 .
:field_2_2_1_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.0' ;
  x3do:name 'value' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_1_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:appinfo 'set minimum value for slider bar' ;
  x3do:name 'setMin' ;
  x3do:type 'SFFloat' .
:field_2_2_1_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:appinfo 'set maximum value for slider bar' ;
  x3do:name 'setMax' ;
  x3do:type 'SFFloat' .
:field_2_2_1_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:appinfo 'set value for slider bar' ;
  x3do:name 'setValue' ;
  x3do:type 'SFFloat' .
:field_2_2_1_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'output value for slider bar' ;
  x3do:name 'valueChanged' ;
  x3do:type 'SFFloat' .
:field_2_2_1_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'enable/disable console output for troubleshooting' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:ProtoBody_2_2_2 a owl:NamedIndividual, x3do:ProtoBody ;
  x3do:hasParent :ProtoDeclare_2_2 ;
  x3do:hasChildren :Group_2_2_2_1 .
:Group_2_2_2_1 a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :ProtoBody_2_2_2 ;
  x3do:hasChildren :LayoutDirectionTransform, :LayoutDirectionScript ;
  x3do:hasROUTE :ROUTE_2_2_2_1_3 .
:LayoutDirectionTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Group_2_2_2_1 ;
  x3do:hasChildren :SliderBarTransform, :SliderBallTransform, :BottomEndTransform, :TopEndTransform, :SliderScript ;
  x3do:hasROUTE :ROUTE_2_2_2_1_1_6, :ROUTE_2_2_2_1_1_7, :ROUTE_2_2_2_1_1_8, :ROUTE_2_2_2_1_1_9, :ROUTE_2_2_2_1_1_10, :ROUTE_2_2_2_1_1_11, :ROUTE_2_2_2_1_1_12, :ROUTE_2_2_2_1_1_13 ;
  x3do:DEF 'LayoutDirectionTransform' .
:SliderBarTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:hasChildren :Shape_2_2_2_1_1_1_1 ;
  x3do:DEF 'SliderBarTransform' .
:Shape_2_2_2_1_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :SliderBarTransform ;
  x3do:hasAppearance :Appearance_2_2_2_1_1_1_1_1 ;
  x3do:hasGeometry :SliderBar .
:Appearance_2_2_2_1_1_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_2_2_1_1_1_1 ;
  x3do:hasMaterial :SliderBarMaterial .
:SliderBarMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_2_2_1_1_1_1_1 ;
  x3do:hasIS :IS_2_2_2_1_1_1_1_1_1_1 ;
  x3do:DEF 'SliderBarMaterial' .
:IS_2_2_2_1_1_1_1_1_1_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :SliderBarMaterial ;
  x3do:hasConnect :connect_2_2_2_1_1_1_1_1_1_1_1, :connect_2_2_2_1_1_1_1_1_1_1_2 .
:connect_2_2_2_1_1_1_1_1_1_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_1_1_1_1_1 ;
  x3do:nodeField 'diffuseColor' ;
  x3do:protoField 'sliderBarColor' .
:connect_2_2_2_1_1_1_1_1_1_1_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_1_1_1_1_1 ;
  x3do:nodeField 'emissiveColor' ;
  x3do:protoField 'sliderBarColor' .
:SliderBar a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_2_2_1_1_1_1 ;
  x3do:hasIS :IS_2_2_2_1_1_1_1_2_1 ;
  x3do:DEF 'SliderBar' .
:IS_2_2_2_1_1_1_1_2_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :SliderBar ;
  x3do:hasConnect :connect_2_2_2_1_1_1_1_2_1_1, :connect_2_2_2_1_1_1_1_2_1_2 .
:connect_2_2_2_1_1_1_1_2_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_1_1_2_1 ;
  x3do:nodeField 'height' ;
  x3do:protoField 'height' .
:connect_2_2_2_1_1_1_1_2_1_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_1_1_2_1 ;
  x3do:nodeField 'radius' ;
  x3do:protoField 'barRadius' .
:SliderBallTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:hasChildren :SliderBallPlaneSensor, :Shape_2_2_2_1_1_2_2 ;
  x3do:DEF 'SliderBallTransform' .
:SliderBallPlaneSensor a owl:NamedIndividual, x3do:PlaneSensor ;
  x3do:hasParent :SliderBallTransform ;
  x3do:DEF 'SliderBallPlaneSensor' ;
  x3do:description 'select and drag to change values' .
:Shape_2_2_2_1_1_2_2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :SliderBallTransform ;
  x3do:hasAppearance :Appearance_2_2_2_1_1_2_2_1 ;
  x3do:hasGeometry :SliderBall .
:Appearance_2_2_2_1_1_2_2_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_2_2_1_1_2_2 ;
  x3do:hasMaterial :SliderBallMaterial .
:SliderBallMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_2_2_1_1_2_2_1 ;
  x3do:hasIS :IS_2_2_2_1_1_2_2_1_1_1 ;
  x3do:DEF 'SliderBallMaterial' .
:IS_2_2_2_1_1_2_2_1_1_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :SliderBallMaterial ;
  x3do:hasConnect :connect_2_2_2_1_1_2_2_1_1_1_1 .
:connect_2_2_2_1_1_2_2_1_1_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_2_2_1_1_1 ;
  x3do:nodeField 'diffuseColor' ;
  x3do:protoField 'sliderBallColor' .
:SliderBall a owl:NamedIndividual, x3do:Sphere ;
  x3do:hasParent :Shape_2_2_2_1_1_2_2 ;
  x3do:hasIS :IS_2_2_2_1_1_2_2_2_1 ;
  x3do:DEF 'SliderBall' .
:IS_2_2_2_1_1_2_2_2_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :SliderBall ;
  x3do:hasConnect :connect_2_2_2_1_1_2_2_2_1_1 .
:connect_2_2_2_1_1_2_2_2_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_2_2_2_1 ;
  x3do:nodeField 'radius' ;
  x3do:protoField 'radius' .
:BottomEndTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:hasChildren :BottomEndSensor, :Shape_2_2_2_1_1_3_2, :Transform_2_2_2_1_1_3_3 ;
  x3do:DEF 'BottomEndTransform' .
:BottomEndSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :BottomEndTransform ;
  x3do:DEF 'BottomEndSensor' ;
  x3do:description 'touch bottom end to decrement' .
:Shape_2_2_2_1_1_3_2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :BottomEndTransform ;
  x3do:hasAppearance :Appearance_2_2_2_1_1_3_2_1 ;
  x3do:hasGeometry :Cylinder_2_2_2_1_1_3_2_2 .
:Appearance_2_2_2_1_1_3_2_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_2_2_1_1_3_2 ;
  x3do:hasMaterial :Material_2_2_2_1_1_3_2_1_1 .
:Material_2_2_2_1_1_3_2_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_2_2_1_1_3_2_1 ;
  x3do:hasIS :IS_2_2_2_1_1_3_2_1_1_1 .
:IS_2_2_2_1_1_3_2_1_1_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :Material_2_2_2_1_1_3_2_1_1 ;
  x3do:hasConnect :connect_2_2_2_1_1_3_2_1_1_1_1 .
:connect_2_2_2_1_1_3_2_1_1_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_3_2_1_1_1 ;
  x3do:nodeField 'diffuseColor' ;
  x3do:protoField 'sliderEndColor' .
:Cylinder_2_2_2_1_1_3_2_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_2_2_1_1_3_2 ;
  x3do:height .05 ;
  x3do:radius .1 .
:Transform_2_2_2_1_1_3_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :BottomEndTransform ;
  x3do:hasChildren :TransparentEndShape ;
  x3do:translation ( 0 -0.1 0 ) .
:TransparentEndShape a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_2_2_1_1_3_3 ;
  x3do:hasAppearance :Appearance_2_2_2_1_1_3_3_1_1 ;
  x3do:hasGeometry :Box_2_2_2_1_1_3_3_1_2 ;
  x3do:DEF 'TransparentEndShape' .
:Appearance_2_2_2_1_1_3_3_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :TransparentEndShape ;
  x3do:hasMaterial :Material_2_2_2_1_1_3_3_1_1_1 .
:Material_2_2_2_1_1_3_3_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_2_2_1_1_3_3_1_1 ;
  x3do:transparency 1 .
:Box_2_2_2_1_1_3_3_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :TransparentEndShape ;
  x3do:size ( 0.2 0.2 0.01 ) .
:TopEndTransform a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:hasChildren :TopEndSensor, :Shape_2_2_2_1_1_4_2, :Transform_2_2_2_1_1_4_3 ;
  x3do:DEF 'TopEndTransform' .
:TopEndSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :TopEndTransform ;
  x3do:DEF 'TopEndSensor' ;
  x3do:description 'touch top end to increment' .
:Shape_2_2_2_1_1_4_2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :TopEndTransform ;
  x3do:hasAppearance :Appearance_2_2_2_1_1_4_2_1 ;
  x3do:hasGeometry :Cylinder_2_2_2_1_1_4_2_2 .
:Appearance_2_2_2_1_1_4_2_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_2_2_1_1_4_2 ;
  x3do:hasMaterial :Material_2_2_2_1_1_4_2_1_1 .
:Material_2_2_2_1_1_4_2_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_2_2_1_1_4_2_1 ;
  x3do:hasIS :IS_2_2_2_1_1_4_2_1_1_1 .
:IS_2_2_2_1_1_4_2_1_1_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :Material_2_2_2_1_1_4_2_1_1 ;
  x3do:hasConnect :connect_2_2_2_1_1_4_2_1_1_1_1 .
:connect_2_2_2_1_1_4_2_1_1_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_4_2_1_1_1 ;
  x3do:nodeField 'diffuseColor' ;
  x3do:protoField 'sliderEndColor' .
:Cylinder_2_2_2_1_1_4_2_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_2_2_1_1_4_2 ;
  x3do:height .05 ;
  x3do:radius .1 .
:Transform_2_2_2_1_1_4_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :TopEndTransform ;
  x3do:hasChildren :TransparentEndShape-USE-1 ;
  x3do:translation ( 0 0.1 0 ) .
:TransparentEndShape-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_2_2_1_1_4_3 ;
  owl:sameAs :TransparentEndShape . # DEF matching this USE
:SliderScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:hasField :field_2_2_2_1_1_5_1, :field_2_2_2_1_1_5_2, :field_2_2_2_1_1_5_3, :field_2_2_2_1_1_5_4, :field_2_2_2_1_1_5_5, :field_2_2_2_1_1_5_6, :field_2_2_2_1_1_5_7, :field_2_2_2_1_1_5_8, :field_2_2_2_1_1_5_9, :field_2_2_2_1_1_5_10, :field_2_2_2_1_1_5_11, :field_2_2_2_1_1_5_12, :field_2_2_2_1_1_5_13, :field_2_2_2_1_1_5_14, :field_2_2_2_1_1_5_15, :field_2_2_2_1_1_5_16, :field_2_2_2_1_1_5_17, :field_2_2_2_1_1_5_18, :field_2_2_2_1_1_5_19, :field_2_2_2_1_1_5_20, :field_2_2_2_1_1_5_21, :field_2_2_2_1_1_5_22, :field_2_2_2_1_1_5_23 ;
  x3do:hasIS :IS_2_2_2_1_1_5_24 ;
  x3do:DEF 'SliderScript' ;
  x3do:sourceCode """
ecmascript:
function initialize()
{
	tracePrint('initialize() commenced...');

	beginPosition = new SFVec3f(0, (height/2) * (-1) + radius, 0);
	endPosition   = new SFVec3f(0, (height/2) - radius, 0);
	tracePrint('beginPosition=' + beginPosition.toString() + ', endPosition=' + endPosition.toString());
	incrementInterval = (height - (2 * radius)) / (max - min);
	tracePrint('incrementInterval=' + incrementInterval.toString());

	bottomEndPositionChanged = new SFVec3f(0, (height/2) * (-1), 0);
	topEndPositionChanged    = new SFVec3f(0, (height/2), 0);
	tracePrint('bottomEndPositionChanged=' + bottomEndPositionChanged.toString() + ', topEndPositionChanged=' + topEndPositionChanged.toString());

	minBallPositionChanged   = new SFVec2f(0, bottomEndPositionChanged.y + radius);
	maxBallPositionChanged   = new SFVec2f(0, topEndPositionChanged.y - radius);
	tracePrint('minBallPositionChanged=' + minBallPositionChanged.toString() + ', maxBallPositionChanged=' + maxBallPositionChanged.toString());

	ballPositionChanged = new SFVec3f(0, beginPosition.y + (incrementInterval * (value - min)), 0);
	lastBallPosition = ballPositionChanged;

	if (value < min) value = min;
	if (value > max) value = max;

	valueChanged = value;
	tracePrint('value=' + value.toString());
	tracePrint('...initialize() complete');
}

function setMin(inputValue, timeStamp)
{
	min = inputValue;
	if (value < min) value = min;

	incrementInterval = (height - (2 * radius)) / (max - min);
	tracePrint('incrementInterval=' + incrementInterval.toString());

	ballPositionChanged = new SFVec3f(0, beginPosition.y + (incrementInterval * (value - min)), 0);
	lastBallPosition = ballPositionChanged;

	valueChanged = value;
	tracePrint('min=' + min + ', valueChanged=' + valueChanged);
}

function setMax(inputValue, timeStamp)
{
	max = inputValue;
	if (value > max) value = max;

	incrementInterval = (height - (2 * radius)) / (max - min);
	tracePrint('incrementInterval=' + incrementInterval.toString());

	ballPositionChanged = new SFVec3f(0, beginPosition.y + (incrementInterval * (value - min)), 0);
	lastBallPosition = ballPositionChanged;

	valueChanged = value;
	tracePrint('max=' + max + ', valueChanged=' + valueChanged);
}

function setValue(inputValue, timeStamp)
{
        if (inputValue <= min)
	{
		valueChanged = value = min;
		ballPositionChanged = beginPosition;
		lastBallPosition = ballPositionChanged;
	}
	else if (inputValue >= max)
	{
		valueChanged = value = max;
		ballPositionChanged = endPosition;
		lastBallPosition = ballPositionChanged;
	}
	else
	{
		if (inputValue > value) //getting bigger
		{
			ballPositionChanged = new SFVec3f(0, lastBallPosition.y + (incrementInterval * (inputValue - value)), 0);
			lastBallPosition = ballPositionChanged;
		}
		else if (inputValue < value) //getting smaller
		{
			ballPositionChanged = new SFVec3f(0, lastBallPosition.y - (incrementInterval * (value - inputValue)), 0);
			lastBallPosition = ballPositionChanged;
		}
		valueChanged = value = inputValue;
	}
	tracePrint('valueChanged=' + valueChanged);
}

function bottomEndTouched(inputValue, timeStamp)
{
	tracePrint('bottomEndTouched(' + inputValue.toString() + ')');
	if (inputValue == false) return; // ignore deselection

	if (value <= Math.round(value))
		value = Math.round(value);
	else
		value = Math.round(value) + 1;

	partialIncrement = incrementInterval * (valueChanged - (value - 1));

	if (value > min)
	{
		valueChanged = --value;
		if (partialIncrement != incrementInterval)
		{
			ballPositionChanged = new SFVec3f(0, lastBallPosition.y - partialIncrement, 0);
			partialIncrement = incrementInterval;
		}
		else    ballPositionChanged = new SFVec3f(0, lastBallPosition.y - incrementInterval, 0);
		lastBallPosition = ballPositionChanged;
	}
}

function topEndTouched(inputValue, timeStamp)
{
	tracePrint('topEndTouched(' + inputValue.toString() + ')');
	if (inputValue == false) return; // ignore deselection

	if (value < Math.round(value))
		value = Math.round(value) - 1;
	else    value = Math.round(value);

	partialIncrement = incrementInterval * (value + 1 - valueChanged);

	if (value < max)
	{
		valueChanged = ++value;
		if (partialIncrement != incrementInterval)
		{
			ballPositionChanged = new SFVec3f(0, lastBallPosition.y + partialIncrement, 0);
			partialIncrement = incrementInterval;
		}
		else    ballPositionChanged = new SFVec3f(0, lastBallPosition.y + incrementInterval, 0);
		lastBallPosition = ballPositionChanged;
	}
}

function setBallPosition(inputValue, timeStamp)
{
	tracePrint('setBallPosition(' + inputValue.toString() + ')');

	if (inputValue.y > lastBallPosition.y) // moving upwards
	{
		if (value >= max)
		{
			value = max;
			lastBallPosition = endPosition;
		}
		else
		{
			value = (inputValue.y - beginPosition.y) * ((max - min) / (endPosition.y - beginPosition.y));
			lastBallPosition = inputValue;
		}
		valueChanged = value;
		ballPositionChanged = lastBallPosition;
	}
	else if (inputValue.y < lastBallPosition.y) // moving downwards
	{
		if (value <= min)
		{
			value = min;
			lastBallPosition = beginPosition;
		}
		else
		{
			value = (inputValue.y - beginPosition.y) * ((max - min) / (endPosition.y - beginPosition.y));
			lastBallPosition = inputValue;
		}
		valueChanged = value;
		ballPositionChanged = lastBallPosition;
	}
}
function tracePrint (text)
{
	if (traceEnabled) Browser.println ('[SliderFloat SliderScript] ' + text);
}
""" .
:field_2_2_2_1_1_5_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'height' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'radius' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'min' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'max' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'value' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'lastBallPosition' ;
  x3do:type 'SFVec3f' ;
  x3do:value ( 0 0 0 ) .
:field_2_2_2_1_1_5_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'beginPosition' ;
  x3do:type 'SFVec3f' ;
  x3do:value ( 0 0 0 ) .
:field_2_2_2_1_1_5_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'endPosition' ;
  x3do:type 'SFVec3f' ;
  x3do:value ( 0 1 0 ) .
:field_2_2_2_1_1_5_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'incrementInterval' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.1 .
:field_2_2_2_1_1_5_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setMin' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setMax' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setValue' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'valueChanged' ;
  x3do:type 'SFFloat' .
:field_2_2_2_1_1_5_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'bottomEndTouched' ;
  x3do:type 'SFBool' .
:field_2_2_2_1_1_5_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'topEndTouched' ;
  x3do:type 'SFBool' .
:field_2_2_2_1_1_5_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setBallPosition' ;
  x3do:type 'SFVec3f' .
:field_2_2_2_1_1_5_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'bottomEndPositionChanged' ;
  x3do:type 'SFVec3f' .
:field_2_2_2_1_1_5_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'topEndPositionChanged' ;
  x3do:type 'SFVec3f' .
:field_2_2_2_1_1_5_19 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'ballPositionChanged' ;
  x3do:type 'SFVec3f' .
:field_2_2_2_1_1_5_20 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'minBallPositionChanged' ;
  x3do:type 'SFVec2f' .
:field_2_2_2_1_1_5_21 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'maxBallPositionChanged' ;
  x3do:type 'SFVec2f' .
:field_2_2_2_1_1_5_22 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'partialIncrement' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_1_1_5_23 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :SliderScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:IS_2_2_2_1_1_5_24 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :SliderScript ;
  x3do:hasConnect :connect_2_2_2_1_1_5_24_1, :connect_2_2_2_1_1_5_24_2, :connect_2_2_2_1_1_5_24_3, :connect_2_2_2_1_1_5_24_4, :connect_2_2_2_1_1_5_24_5, :connect_2_2_2_1_1_5_24_6, :connect_2_2_2_1_1_5_24_7, :connect_2_2_2_1_1_5_24_8, :connect_2_2_2_1_1_5_24_9, :connect_2_2_2_1_1_5_24_10 .
:connect_2_2_2_1_1_5_24_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'height' ;
  x3do:protoField 'height' .
:connect_2_2_2_1_1_5_24_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'radius' ;
  x3do:protoField 'radius' .
:connect_2_2_2_1_1_5_24_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'min' ;
  x3do:protoField 'min' .
:connect_2_2_2_1_1_5_24_4 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'max' ;
  x3do:protoField 'max' .
:connect_2_2_2_1_1_5_24_5 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'value' ;
  x3do:protoField 'value' .
:connect_2_2_2_1_1_5_24_6 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'setMin' ;
  x3do:protoField 'setMin' .
:connect_2_2_2_1_1_5_24_7 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'setMax' ;
  x3do:protoField 'setMax' .
:connect_2_2_2_1_1_5_24_8 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'setValue' ;
  x3do:protoField 'setValue' .
:connect_2_2_2_1_1_5_24_9 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'valueChanged' ;
  x3do:protoField 'valueChanged' .
:connect_2_2_2_1_1_5_24_10 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_5_24 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:ROUTE_2_2_2_1_1_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'translation_changed' ;
  x3do:fromNode 'SliderBallPlaneSensor' ;
  x3do:toField 'setBallPosition' ;
  x3do:toNode 'SliderScript' .
:ROUTE_2_2_2_1_1_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'BottomEndSensor' ;
  x3do:toField 'bottomEndTouched' ;
  x3do:toNode 'SliderScript' .
:ROUTE_2_2_2_1_1_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'TopEndSensor' ;
  x3do:toField 'topEndTouched' ;
  x3do:toNode 'SliderScript' .
:ROUTE_2_2_2_1_1_9 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'minBallPositionChanged' ;
  x3do:fromNode 'SliderScript' ;
  x3do:toField 'set_minPosition' ;
  x3do:toNode 'SliderBallPlaneSensor' .
:ROUTE_2_2_2_1_1_10 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'maxBallPositionChanged' ;
  x3do:fromNode 'SliderScript' ;
  x3do:toField 'set_maxPosition' ;
  x3do:toNode 'SliderBallPlaneSensor' .
:ROUTE_2_2_2_1_1_11 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'bottomEndPositionChanged' ;
  x3do:fromNode 'SliderScript' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'BottomEndTransform' .
:ROUTE_2_2_2_1_1_12 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'topEndPositionChanged' ;
  x3do:fromNode 'SliderScript' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'TopEndTransform' .
:ROUTE_2_2_2_1_1_13 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LayoutDirectionTransform ;
  x3do:fromField 'ballPositionChanged' ;
  x3do:fromNode 'SliderScript' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'SliderBallTransform' .
:LayoutDirectionScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :Group_2_2_2_1 ;
  x3do:hasField :field_2_2_2_1_2_1, :field_2_2_2_1_2_2, :field_2_2_2_1_2_3 ;
  x3do:hasIS :IS_2_2_2_1_2_4 ;
  x3do:DEF 'LayoutDirectionScript' ;
  x3do:sourceCode """
ecmascript:

function initialize ()
{
    if      ((direction=='vertical') || (direction=='Vertical') || (direction=='VERTICAL'))
    {
        directionRotation = new SFRotation(0, 0, 1, 0);
    }
    else if ((direction=='horizontal') || (direction=='Horizontal') || (direction=='HORIZONTAL'))
    {
        directionRotation = new SFRotation(0, 0, 1, -1.57);
    }
    else
    {
        Browser.println ('[SliderFloat LayoutDirectionScript] unrecognized direction: ' + direction + ', using vertical');
        directionRotation = new SFRotation(0, 0, 1, 0);
    }
    tracePrint ('direction=' + direction);
}
function tracePrint (text)
{
	if (traceEnabled) Browser.println ('[SliderFloat LayoutDirectionScript] ' + text);
}
""" .
:field_2_2_2_1_2_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :LayoutDirectionScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'direction' ;
  x3do:type 'SFString' .
:field_2_2_2_1_2_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :LayoutDirectionScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'directionRotation' ;
  x3do:type 'SFRotation' .
:field_2_2_2_1_2_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :LayoutDirectionScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:IS_2_2_2_1_2_4 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :LayoutDirectionScript ;
  x3do:hasConnect :connect_2_2_2_1_2_4_1, :connect_2_2_2_1_2_4_2 .
:connect_2_2_2_1_2_4_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_2_4 ;
  x3do:nodeField 'direction' ;
  x3do:protoField 'layoutDirection' .
:connect_2_2_2_1_2_4_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_2_4 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:ROUTE_2_2_2_1_3 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Group_2_2_2_1 ;
  x3do:fromField 'directionRotation' ;
  x3do:fromNode 'LayoutDirectionScript' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'LayoutDirectionTransform' .
:Anchor_2_3 a owl:NamedIndividual, x3do:Anchor ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :Shape_2_3_1 ;
  x3do:description 'SliderFloatExample' ;
  x3do:parameter '"target=_blank"' ;
  x3do:url '"SliderFloatExample.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/SliderFloatExample.x3d" "SliderFloatExample.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/SliderFloatExample.wrl"' .
:Shape_2_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Anchor_2_3 ;
  x3do:hasAppearance :Appearance_2_3_1_1 ;
  x3do:hasGeometry :Text_2_3_1_2 .
:Appearance_2_3_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_1 ;
  x3do:hasMaterial :Material_2_3_1_1_1 .
:Material_2_3_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_1_1 ;
  x3do:diffuseColor ( 0 1 1 ) ;
  x3do:emissiveColor ( 0 1 1 ) .
:Text_2_3_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_1 ;
  x3do:hasFontStyle :FontStyle_2_3_1_2_1 ;
  x3do:string '"SliderFloatPrototype" "is a Prototype definition file." "" "To see an example scene" "select this text and view" "SliderFloatExample"' .
:FontStyle_2_3_1_2_1 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_3_1_2 ;
  x3do:justify '"MIDDLE" "MIDDLE"' ;
  x3do:size 0.8 .
