#VRML V2.0 utf8 EXTERNPROTO LEVEL [ exposedField SFVec3f position field SFRotation rotation field MFNode contains field MFNode geometry field MFNode behavior eventIn SFTime clock_tick field SFFloat max_level field SFFloat min_level field SFFloat level eventIn SFFloat input_rate eventIn SFFloat output_rate field SFFloat delta_time eventOut SFFloat level_changed ] "sdprotos.wrl#LEVEL" EXTERNPROTO RATE [ exposedField SFVec3f position field SFRotation rotation field MFNode contains field MFNode geometry field MFNode behavior eventIn SFTime clock_tick field SFFloat rate eventIn SFFloat set_rate eventOut SFFloat rate_changed ] "sdprotos.wrl#RATE" EXTERNPROTO LEVEL_GEO [ eventIn SFFloat set_y exposedField MFString text field SFVec3f position field SFVec3f textPosition field SFFloat trans ] "sdprotos.wrl#LEVEL_GEO" DEF TS TimeSensor { cycleInterval 1 enabled TRUE stopTime -1 loop TRUE } Transform { children [ DEF Pipe Transform { children Shape { appearance Appearance { material DEF Skin Material { ambientIntensity 0.242105 diffuseColor 0.32 0.75 0.32 specularColor 0.02 0.05 0.01 emissiveColor 0 0 0 shininess 0.02 transparency 0.3 } } geometry Cylinder { radius 0.33 height 3.0 } } } ] translation -4.4 -2.6 -10 rotation 0 0 1 1.57 } Transform { children [USE Pipe] translation 4.4 -2.6 -10 rotation 0 0 1 1.57 } DEF InputValveGeom Transform { children [ DEF ValveBottom Transform { children Shape { appearance Appearance { material USE Skin } geometry DEF theCone Cone { bottomRadius 1.0 height 1.5 } } } DEF ValveTop Transform { children Shape { appearance Appearance { material USE Skin } geometry USE theCone } translation 0 1.5 0 rotation 0 0 1 3.14 } ] translation -6 -3.4 -10 } DEF DrainValveGeom Transform { children [USE ValveBottom, USE ValveTop] translation 6 -3.4 -10 } DEF InputValve RATE { geometry [USE InputValveGeom] rate 2.05 } DEF DrainValve RATE { geometry [USE DrainValveGeom] rate 2.0 } DEF WaterTankGeom LEVEL_GEO { position 0 0 -10 trans 0.7 } DEF WaterTankLvl LEVEL { geometry [USE WaterTankGeom] max_level 1.0 min_level 0.0 level 0.5 delta_time 1.0 } ROUTE TS.cycleTime TO InputValve.clock_tick ROUTE TS.cycleTime TO DrainValve.clock_tick ROUTE TS.cycleTime TO WaterTankLvl.clock_tick ROUTE InputValve.rate_changed TO WaterTankLvl.input_rate ROUTE DrainValve.rate_changed TO WaterTankLvl.output_rate ROUTE WaterTankLvl.level_changed TO WaterTankGeom.set_y