@prefix :        <https://www.web3d.org/x3d/content/examples/Basic/Followers/Slider.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.1.xsd#> .
@prefix x3do:    <https://www.web3d.org/specifications/X3dOntology4.1#> .

:X3D a owl:NamedIndividual, x3do:X3D ;
  x3do:hasHead :head ;
  x3do:hasScene :Scene ;
  x3do:profile 'Immersive' ;
  x3do:version '3.2' ;
  x3do:noNamespaceSchemaLocation 'https://www.web3d.org/specifications/x3d-3.2.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_10, :meta_1_11, :meta_1_12, :meta_1_13, :meta_1_14, :meta_1_15, :meta_1_16, :meta_1_17, :meta_1_18 .
:meta_1_1 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Slider.x3d' ;
  x3do:name 'title' .
:meta_1_2 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D Follower example' ;
  x3do:name 'description' .
:meta_1_3 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Herbert Stocker' ;
  x3do:name 'creator' .
:meta_1_4 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Don Brutzman' ;
  x3do:name 'translator' .
:meta_1_5 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '18 April 2006' ;
  x3do:name 'created' .
:meta_1_6 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '2 December 2011' ;
  x3do:name 'translated' .
:meta_1_7 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '2 January 2025' ;
  x3do:name 'modified' .
:meta_1_8 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'originals/test_Sliders.wrl' ;
  x3do:name 'reference' .
:meta_1_9 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Stocker_06_Followers.pdf' ;
  x3do:name 'reference' .
:meta_1_10 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'http://www.hersto.com/Publications/Followers' ;
  x3do:name 'reference' .
:meta_1_11 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D version 3.2 or greater' ;
  x3do:name 'requires' .
:meta_1_12 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D Follower Chaser Damper' ;
  x3do:name 'subject' .
:meta_1_13 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'under development' ;
  x3do:name 'warning' .
:meta_1_14 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html' ;
  x3do:name 'reference' .
:meta_1_15 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'https://www.web3d.org/x3d/content/examples/Basic/Followers/Slider.x3d' ;
  x3do:name 'identifier' .
:meta_1_16 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html' ;
  x3do:name 'generator' .
:meta_1_17 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit' ;
  x3do:name 'generator' .
:meta_1_18 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '../../license.html' ;
  x3do:name 'license' .
:meta dcterms:title "Slider.x3d" .
:meta dcterms:description "X3D Follower example" .
:meta dcterms:creator "Herbert Stocker" .
:meta dcterms:translator "Don Brutzman" .
:meta dcterms:created "18 April 2006" .
:meta dcterms:translated "2 December 2011" .
:meta dcterms:modified "2 January 2025" .
:meta dcterms:reference "originals/test_Sliders.wrl" .
:meta dcterms:reference "Stocker_06_Followers.pdf" .
:meta dcterms:reference "http://www.hersto.com/Publications/Followers" .
:meta dcterms:requires "X3D version 3.2 or greater" .
:meta dcterms:subject "X3D Follower Chaser Damper" .
:meta dcterms:warning "under development" .
:meta dcterms:reference "https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html" .
:meta dcterms:identifier "https://www.web3d.org/x3d/content/examples/Basic/Followers/Slider.x3d" .
:meta dcterms:generator "Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html" .
:meta dcterms:generator "X3D-Edit 3.3, 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 ;
  x3do:hasProtoDeclare :ProtoDeclare_2_2 .
:WorldInfo_2_1 a owl:NamedIndividual, x3do:WorldInfo ;
  x3do:hasParent :Scene ;
  x3do:info '" The original versions of the PROTO Slider was written by me, Herbert Stocker. The original versions and some test and demonstration Worlds can be found at http://www.hersto.de/ . " " You can use and modify the PROTO in this file if you keep the credit information valid and if you do not remove the link to the originating site http://www.hersto.de/ . In brief, keep this WorldInfo node along with the Proto. " " Please send a message to hersto@hersto.de where you describe how you use or improved the nodes. Especially if you included the improved versions. "' ;
  x3do:title 'Copyright (C) 2002 by Herbert Stocker (AKA hersto)' .
:ProtoDeclare_2_2 a owl:NamedIndividual, x3do:ProtoDeclare ;
  x3do:hasParent :Scene ;
  x3do:hasProtoInterface :ProtoInterface_2_2_1 ;
  x3do:hasProtoBody :ProtoBody_2_2_2 ;
  x3do:name 'Slider' .
: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_16, :field_2_2_1_17 .
:field_2_2_1_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'initial_position' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.5 .
:field_2_2_1_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'credits' ;
  x3do:type 'MFString' ;
  x3do:value '"Initial idea and copyright by Herbert Stocker http://www.hersto.com/"' .
:field_2_2_1_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'radiusKnob' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.3 .
:field_2_2_1_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'radiusStick' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.2 .
:field_2_2_1_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'silently_set_unfiltered_position' ;
  x3do:type 'SFFloat' .
:field_2_2_1_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'min' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_1_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'position_changed' ;
  x3do:type 'SFFloat' .
:field_2_2_1_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:hasAppearance :Appearance_2_2_1_8_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'appearance' ;
  x3do:type 'SFNode' .
:Appearance_2_2_1_8_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :field_2_2_1_8 ;
  x3do:hasMaterial :Material_2_2_1_8_1_1 .
:Material_2_2_1_8_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_2_1_8_1 .
:field_2_2_1_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'smoothMovements' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_2_1_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_position' ;
  x3do:type 'SFFloat' .
:field_2_2_1_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'pageSize' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.2 .
:field_2_2_1_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'max' ;
  x3do:type 'SFFloat' ;
  x3do:value 1.0 .
:field_2_2_1_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'unfiltered_position_changed' ;
  x3do:type 'SFFloat' .
:field_2_2_1_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'silently_set_position' ;
  x3do:type 'SFFloat' .
:field_2_2_1_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_unfiltered_position' ;
  x3do:type 'SFFloat' .
:field_2_2_1_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'height' ;
  x3do:type 'SFFloat' ;
  x3do:value 2.0 .
:field_2_2_1_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'positionInt_changed' ;
  x3do:type 'SFInt32' .
:ProtoBody_2_2_2 a owl:NamedIndividual, x3do:ProtoBody ;
  x3do:hasParent :ProtoDeclare_2_2 ;
  x3do:hasChildren :Billboard_2_2_2_1, :EFFS, :Timer, :Worker ;
  x3do:hasProtoDeclare :ProtoDeclare_2_2_2_2 .
:Billboard_2_2_2_1 a owl:NamedIndividual, x3do:Billboard ;
  x3do:hasParent :ProtoBody_2_2_2 ;
  x3do:hasChildren :TrStickAbove, :TrStickBelow, :Group_2_2_2_1_3 .
:TrStickAbove a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Billboard_2_2_2_1 ;
  x3do:hasChildren :TchPgUp, :Shape_2_2_2_1_1_2 ;
  x3do:DEF 'TrStickAbove' .
:TchPgUp a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :TrStickAbove ;
  x3do:DEF 'TchPgUp' ;
  x3do:description 'touch to activate PgUp' .
:Shape_2_2_2_1_1_2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :TrStickAbove ;
  x3do:hasIS :IS_2_2_2_1_1_2_1 ;
  x3do:hasGeometry :Cylinder_2_2_2_1_1_2_2 .
:IS_2_2_2_1_1_2_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :Shape_2_2_2_1_1_2 ;
  x3do:hasConnect :connect_2_2_2_1_1_2_1_1 .
:connect_2_2_2_1_1_2_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_1_2_1 ;
  x3do:nodeField 'appearance' ;
  x3do:protoField 'appearance' .
:Cylinder_2_2_2_1_1_2_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_2_2_1_1_2 ;
  x3do:height 1.0 .
:TrStickBelow a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Billboard_2_2_2_1 ;
  x3do:hasChildren :TchPgDown, :Shape_2_2_2_1_2_2 ;
  x3do:DEF 'TrStickBelow' .
:TchPgDown a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :TrStickBelow ;
  x3do:DEF 'TchPgDown' ;
  x3do:description 'touch to activate PgDown' .
:Shape_2_2_2_1_2_2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :TrStickBelow ;
  x3do:hasIS :IS_2_2_2_1_2_2_1 ;
  x3do:hasGeometry :Cylinder_2_2_2_1_2_2_2 .
:IS_2_2_2_1_2_2_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :Shape_2_2_2_1_2_2 ;
  x3do:hasConnect :connect_2_2_2_1_2_2_1_1 .
:connect_2_2_2_1_2_2_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_2_2_1 ;
  x3do:nodeField 'appearance' ;
  x3do:protoField 'appearance' .
:Cylinder_2_2_2_1_2_2_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_2_2_1_2_2 ;
  x3do:height 1.0 .
:Group_2_2_2_1_3 a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :Billboard_2_2_2_1 ;
  x3do:hasChildren :SensKnob, :TrKnob .
:SensKnob a owl:NamedIndividual, x3do:PlaneSensor ;
  x3do:hasParent :Group_2_2_2_1_3 ;
  x3do:DEF 'SensKnob' ;
  x3do:autoOffset false ;
  x3do:description 'touch to activate' ;
  x3do:maxPosition ( 0.0 -1.0 ) .
:TrKnob a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Group_2_2_2_1_3 ;
  x3do:hasChildren :Shape_2_2_2_1_3_2_1 ;
  x3do:DEF 'TrKnob' .
:Shape_2_2_2_1_3_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :TrKnob ;
  x3do:hasIS :IS_2_2_2_1_3_2_1_1 ;
  x3do:hasGeometry :Cylinder_2_2_2_1_3_2_1_2 .
:IS_2_2_2_1_3_2_1_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :Shape_2_2_2_1_3_2_1 ;
  x3do:hasConnect :connect_2_2_2_1_3_2_1_1_1 .
:connect_2_2_2_1_3_2_1_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_1_3_2_1_1 ;
  x3do:nodeField 'appearance' ;
  x3do:protoField 'appearance' .
:Cylinder_2_2_2_1_3_2_1_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_2_2_1_3_2_1 ;
  x3do:height 1.0 .
:ProtoDeclare_2_2_2_2 a owl:NamedIndividual, x3do:ProtoDeclare ;
  x3do:hasParent :ProtoBody_2_2_2 ;
  x3do:hasProtoInterface :ProtoInterface_2_2_2_2_1 ;
  x3do:hasProtoBody :ProtoBody_2_2_2_2_2 ;
  x3do:name 'EFFS' .
:ProtoInterface_2_2_2_2_1 a owl:NamedIndividual, x3do:ProtoInterface ;
  x3do:hasParent :ProtoDeclare_2_2_2_2 ;
  x3do:hasField :field_2_2_2_2_1_1, :field_2_2_2_2_1_2, :field_2_2_2_2_1_3, :field_2_2_2_2_1_4, :field_2_2_2_2_1_5, :field_2_2_2_2_1_6, :field_2_2_2_2_1_7 .
:field_2_2_2_2_1_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'height' ;
  x3do:type 'SFFloat' ;
  x3do:value 2.0 .
:field_2_2_2_2_1_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'max' ;
  x3do:type 'SFFloat' ;
  x3do:value 1.0 .
:field_2_2_2_2_1_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'radiusKnob' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.5 .
:field_2_2_2_2_1_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'pageSize' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.2 .
:field_2_2_2_2_1_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'smoothMovements' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_2_2_2_1_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'radiusStick' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.25 .
:field_2_2_2_2_1_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_2_2_2_1 ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'min' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:ProtoBody_2_2_2_2_2 a owl:NamedIndividual, x3do:ProtoBody ;
  x3do:hasParent :ProtoDeclare_2_2_2_2 ;
  x3do:hasChildren :Group_2_2_2_2_2_1 .
:Group_2_2_2_2_2_1 a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :ProtoBody_2_2_2_2_2 .
:EFFS a owl:NamedIndividual, x3do:ProtoInstance ;
  x3do:hasParent :ProtoBody_2_2_2 ;
  x3do:hasFieldValue :fieldValue_2_2_2_3_1, :fieldValue_2_2_2_3_2, :fieldValue_2_2_2_3_3, :fieldValue_2_2_2_3_4, :fieldValue_2_2_2_3_5, :fieldValue_2_2_2_3_6, :fieldValue_2_2_2_3_7 ;
  x3do:DEF 'EFFS' ;
  x3do:name 'EFFS' .
:fieldValue_2_2_2_3_1 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :EFFS ;
  x3do:name 'max' ;
  x3do:value 1.0 .
:fieldValue_2_2_2_3_2 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :EFFS ;
  x3do:name 'height' ;
  x3do:value 2.0 .
:fieldValue_2_2_2_3_3 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :EFFS ;
  x3do:name 'pageSize' ;
  x3do:value 0.2 .
:fieldValue_2_2_2_3_4 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :EFFS ;
  x3do:name 'radiusKnob' ;
  x3do:value 0.5 .
:fieldValue_2_2_2_3_5 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :EFFS ;
  x3do:name 'smoothMovements' ;
  x3do:value true .
:fieldValue_2_2_2_3_6 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :EFFS ;
  x3do:name 'radiusStick' ;
  x3do:value 0.25 .
:fieldValue_2_2_2_3_7 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :EFFS ;
  x3do:name 'min' ;
  x3do:value 0.0 .
:Timer a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :ProtoBody_2_2_2 ;
  x3do:DEF 'Timer' ;
  x3do:loop true .
:Worker a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :ProtoBody_2_2_2 ;
  x3do:hasField :field_2_2_2_5_1, :field_2_2_2_5_2, :field_2_2_2_5_3, :field_2_2_2_5_4, :field_2_2_2_5_5, :field_2_2_2_5_6, :field_2_2_2_5_7, :field_2_2_2_5_8, :field_2_2_2_5_9, :field_2_2_2_5_10, :field_2_2_2_5_11, :field_2_2_2_5_12, :field_2_2_2_5_13, :field_2_2_2_5_14, :field_2_2_2_5_15, :field_2_2_2_5_16, :field_2_2_2_5_17, :field_2_2_2_5_18, :field_2_2_2_5_19, :field_2_2_2_5_20, :field_2_2_2_5_21, :field_2_2_2_5_22, :field_2_2_2_5_23, :field_2_2_2_5_24, :field_2_2_2_5_25, :field_2_2_2_5_26, :field_2_2_2_5_27, :field_2_2_2_5_28, :field_2_2_2_5_29, :field_2_2_2_5_30, :field_2_2_2_5_31, :field_2_2_2_5_32, :field_2_2_2_5_33, :field_2_2_2_5_34, :field_2_2_2_5_35, :field_2_2_2_5_36, :field_2_2_2_5_37, :field_2_2_2_5_38, :field_2_2_2_5_39, :field_2_2_2_5_40, :field_2_2_2_5_41, :field_2_2_2_5_42, :field_2_2_2_5_43, :field_2_2_2_5_44, :field_2_2_2_5_45, :field_2_2_2_5_46, :field_2_2_2_5_47, :field_2_2_2_5_48, :field_2_2_2_5_49 ;
  x3do:hasIS :IS_2_2_2_5_50 ;
  x3do:DEF 'Worker' ;
  x3do:directOutput true ;
  x3do:sourceCode """
ecmascript:

function initialize()
{            
    positionSmo1= position;
    positionSmo2= position;
    positionSmo3= position;

    min=             EFFS.min;
    max=             EFFS.max;
    pageSize=        EFFS.pageSize;
    height=          EFFS.height;
    radiusKnob=      EFFS.radiusKnob;
    radiusStick=     EFFS.radiusStick;
    smoothMovements= EFFS.smoothMovements;

    // work around the initialization bug in Contact 5.
    if(   Browser.getName() == 'blaxxunCC3D'
       && Browser.getVersion() <= 5.104
       && !position && !min && !max && !pageSize && !height && !radiusKnob && !radiusStick
      )
    {
        position= .5;
        min= 0;
        max= 1;
        pageSize= .2;
        height= 2;
        radiusKnob= .3;
        radiusStick= .2;

        positionSmo1= 
        positionSmo2= 
        positionSmo3=
            position;
    }


    Update();

    Timer.enabled= true; // TBD: Shouldn't we start with false?
}

function set_min(m)           {          min= m;  Update();          }
function set_max(m)           {          max= m;  Update();          }
function set_pageSize(s)      {     pageSize= s;  Update();          }
function set_height(h)        {       height= h;  UpdateGeometry();  }
function set_radiusKnob(r)    {   radiusKnob= r;  UpdateGeometry();  }
function set_radiusStick(r)   {  radiusStick= r;  UpdateGeometry();  }
function set_position(p) 
{ 
    silent= false; 
    snapTime= 0; 
    position= snapToInt? Math.floor(p + .5) : p;
    Update();
}

function set_smooothMovements(s)
{
    smoothMovements= s;
    Update();
}

function silently_set_position(p) 
{ 
    silent= true;
    snapTime= 0;
    position= snapToInt? Math.floor(p + .5) : p;
    Update();        
}

function silently_set_unfiltered_position(p, now)  
{ 
    silent= true; 
    snapTime= 0;
    position= positionSmo1= positionSmo2= positionSmo3= p;
    snapTime= now + .1;
    Update(); 
}

 function set_unfiltered_position(p, now)  
{ 
    snapTime= 0;
    position= positionSmo1= positionSmo2= positionSmo3= p;
    snapTime= now + .1;
    Update(); 
}

function incPage(t, now)
{
    silent= false;
    position+= pageSize;
    snapTime= now + .3;
    Update();
}

function decPage(t, now)
{
    silent= false;
    position-= pageSize;
    snapTime= now + .3;
    Update();
}

function SensKnob_isActive(a, now)
{
    if(a)
    {
        SensKnobOrigin= smoothMovements? positionSmo3 : position;  // TBD: Da stimmt noch was nicht.
        SmoothTau1= .07;
        SmoothTau2= .001;
        SmoothTau3= .001;
//                last_SensKnob_translationChange= SensKnob_translationChanged;
    }else{
        SmoothTau1= .06;
        SmoothTau2= .06;
        SmoothTau3= .06;
        snapTime=   now;
    }
}

function SensKnob_translationChanged(t, now)
{
    silent= false;
//            if(t.subtract(last_SensKnob_translationChange).length() > .0001 )
//            {
        position= SensKnobOrigin + ( height? t.y * (max - min) / (height - KnobSize)
                                           : 0
                                   );
//                snapTime= now + .3;

//                last_SensKnob_translationChange= t;
//            }
    Update();
}

function Update()
{
    UpdateLogic();

    UpdateGeometry();

    if(smoothMovements) 
    {
        setUPC(position);
    }else{
        setUPC(position);
        positionSmo1= position;
        positionSmo2= position;
        positionSmo3= position;
        setPC(position);
    }
}

function UpdateLogic()
{
    if(max < min)
        max= min;

    if(position     > max)    position=     max;
    if(positionSmo1 > max)    positionSmo1= max;
    if(positionSmo2 > max)    positionSmo2= max;
    if(positionSmo3 > max)    positionSmo3= max;

    if(position     < min)    position=     min;
    if(positionSmo1 < min)    positionSmo1= min;
    if(positionSmo2 < min)    positionSmo2= min;
    if(positionSmo3 < min)    positionSmo3= min;
}

function UpdateGeometry()
{
    KnobSize= max - min? pageSize / (max - min) * height
                       : height
                       ;

    KnobCenterPos= max - min? ( ( smoothMovements? positionSmo3
                                                 : position
                                )
                              - (max + min)/2
                              ) / (max - min) * (height - KnobSize)
                            : 0
                            ;

    TrKnob.scale=             new SFVec3f(radiusKnob,   KnobSize,                     radiusKnob);
    TrKnob.translation=       new SFVec3f(0,            KnobCenterPos,                0);

    TrStickAbove.scale=       new SFVec3f(radiusStick,  (height/2 - KnobCenterPos),   radiusStick);
    TrStickAbove.translation= new SFVec3f(0,           (height/2 + KnobCenterPos)/2, 0          );

    TrStickBelow.scale=       new SFVec3f(radiusStick, (KnobCenterPos - -height/2),   radiusStick);
    TrStickBelow.translation= new SFVec3f(0,           (KnobCenterPos + -height/2)/2, 0          );
}

function Tick(now)
{
    if(!lastTick)
    {
        lastTick= now;
return;
    }

    var Delta= now - lastTick;

    if(smoothMovements)  // TBD: The timer should be completely off if !Smoothmovements.
    {
        positionSmo1= position     + (positionSmo1 - position    ) * Math.exp(-Delta/SmoothTau1);
        positionSmo2= positionSmo1 + (positionSmo2 - positionSmo1) * Math.exp(-Delta/SmoothTau2);
        positionSmo3= positionSmo2 + (positionSmo3 - positionSmo2) * Math.exp(-Delta/SmoothTau3);

        UpdateGeometry();

        setPC(positionSmo3);
    }

    if(snapToInt)
        if(snapTime && now >= snapTime)
        {
            var newPos= Math.floor(position + .5);
            SensKnobOrigin+= newPos - position;
            position= newPos;
            snapTime= 0;
        }


    //TBD: Set Timer.enabled

    lastTick= now;
}

function setUPC(value)
{
    if(unfiltered_position_changed != value || initialUnfilteredUpdate)
        if(!silent) unfiltered_position_changed= value;

    initialUnfilteredUpdate= false;
}

function setPC(value)
{
    if(position_changed != value || initialUpdate) 
        if(!silent) position_changed= value;

    if(Math.floor(position_changed + .5) != positionInt_changed || initialUpdate)
        if(!silent) positionInt_changed= Math.floor(position_changed + .5);

    initialUpdate= false;
}
""" .
:field_2_2_2_5_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'height' ;
  x3do:type 'SFFloat' ;
  x3do:value 2.0 .
:field_2_2_2_5_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_max' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'silent' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_2_2_5_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'lastTick' ;
  x3do:type 'SFTime' ;
  x3do:value '0.0' .
:field_2_2_2_5_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_pageSize' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'decPage' ;
  x3do:type 'SFTime' .
:field_2_2_2_5_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_radiusStick' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_height' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'position_changed' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:hasChildren :Timer-USE-1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'Timer' ;
  x3do:type 'SFNode' .
:Timer-USE-1 a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :field_2_2_2_5_10 ;
  owl:sameAs :Timer . # DEF matching this USE
:field_2_2_2_5_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_position' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'snapTime' ;
  x3do:type 'SFTime' ;
  x3do:value '0.0' .
:field_2_2_2_5_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:hasChildren :TrStickAbove-USE-1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'TrStickAbove' ;
  x3do:type 'SFNode' .
:TrStickAbove-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :field_2_2_2_5_13 ;
  owl:sameAs :TrStickAbove . # DEF matching this USE
:field_2_2_2_5_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_radiusKnob' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'smoothMovements' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_2_2_5_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'max' ;
  x3do:type 'SFFloat' ;
  x3do:value 1.0 .
:field_2_2_2_5_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'initialUpdate' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_2_2_5_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:hasChildren :EFFS-USE-1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'EFFS' ;
  x3do:type 'SFNode' .
:EFFS-USE-1 a owl:NamedIndividual, x3do:ProtoInstance ;
  x3do:hasParent :field_2_2_2_5_18 ;
  owl:sameAs :EFFS . # DEF matching this USE
:field_2_2_2_5_19 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'SensKnobOrigin' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_5_20 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'pageSize' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.2 .
:field_2_2_2_5_21 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'positionInt_changed' ;
  x3do:type 'SFInt32' .
:field_2_2_2_5_22 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'SmoothTau3' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.05 .
:field_2_2_2_5_23 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'SmoothTau2' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.05 .
:field_2_2_2_5_24 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'SmoothTau1' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.05 .
:field_2_2_2_5_25 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_min' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_26 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'SensKnob_isActive' ;
  x3do:type 'SFBool' .
:field_2_2_2_5_27 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'KnobSize' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_5_28 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'silently_set_position' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_29 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'initialUnfilteredUpdate' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_2_2_5_30 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'positionSmo3' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_5_31 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'snapToInt' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_2_2_5_32 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'positionSmo2' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_5_33 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_unfiltered_position' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_34 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'positionSmo1' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_5_35 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'silently_set_unfiltered_position' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_36 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'radiusStick' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.25 .
:field_2_2_2_5_37 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'KnobCenterPos' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_5_38 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'position' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_39 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'SensKnob_translationChanged' ;
  x3do:type 'SFVec3f' .
:field_2_2_2_5_40 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'radiusKnob' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.5 .
:field_2_2_2_5_41 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:hasChildren :TrStickBelow-USE-1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'TrStickBelow' ;
  x3do:type 'SFNode' .
:TrStickBelow-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :field_2_2_2_5_41 ;
  owl:sameAs :TrStickBelow . # DEF matching this USE
:field_2_2_2_5_42 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:hasChildren :TchPgUp-USE-1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'TchPgUp' ;
  x3do:type 'SFNode' .
:TchPgUp-USE-1 a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :field_2_2_2_5_42 ;
  owl:sameAs :TchPgUp . # DEF matching this USE
:field_2_2_2_5_43 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'incPage' ;
  x3do:type 'SFTime' .
:field_2_2_2_5_44 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'unfiltered_position_changed' ;
  x3do:type 'SFFloat' .
:field_2_2_2_5_45 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'Tick' ;
  x3do:type 'SFTime' .
:field_2_2_2_5_46 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_smooothMovements' ;
  x3do:type 'SFBool' .
:field_2_2_2_5_47 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'min' ;
  x3do:type 'SFFloat' ;
  x3do:value 0.0 .
:field_2_2_2_5_48 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:hasChildren :TchPgDown-USE-1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'TchPgDown' ;
  x3do:type 'SFNode' .
:TchPgDown-USE-1 a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :field_2_2_2_5_48 ;
  owl:sameAs :TchPgDown . # DEF matching this USE
:field_2_2_2_5_49 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :Worker ;
  x3do:hasChildren :TrKnob-USE-1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'TrKnob' ;
  x3do:type 'SFNode' .
:TrKnob-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :field_2_2_2_5_49 ;
  owl:sameAs :TrKnob . # DEF matching this USE
:IS_2_2_2_5_50 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :Worker ;
  x3do:hasConnect :connect_2_2_2_5_50_1, :connect_2_2_2_5_50_2, :connect_2_2_2_5_50_3, :connect_2_2_2_5_50_4, :connect_2_2_2_5_50_5, :connect_2_2_2_5_50_6, :connect_2_2_2_5_50_7, :connect_2_2_2_5_50_8 .
:connect_2_2_2_5_50_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'position_changed' ;
  x3do:protoField 'position_changed' .
:connect_2_2_2_5_50_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'set_position' ;
  x3do:protoField 'set_position' .
:connect_2_2_2_5_50_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'positionInt_changed' ;
  x3do:protoField 'positionInt_changed' .
:connect_2_2_2_5_50_4 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'silently_set_position' ;
  x3do:protoField 'silently_set_position' .
:connect_2_2_2_5_50_5 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'set_unfiltered_position' ;
  x3do:protoField 'set_unfiltered_position' .
:connect_2_2_2_5_50_6 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'silently_set_unfiltered_position' ;
  x3do:protoField 'silently_set_unfiltered_position' .
:connect_2_2_2_5_50_7 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'position' ;
  x3do:protoField 'initial_position' .
:connect_2_2_2_5_50_8 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_2_2_5_50 ;
  x3do:nodeField 'unfiltered_position_changed' ;
  x3do:protoField 'unfiltered_position_changed' .
