####################################################################################################
#
# Invoking X3D model self-test:
#
#   $ python MoveSeaByExtrusion14.py
#
# Python package x3d.py package is available on PyPI for import.
#   This approach simplifies Python X3D deployment and use.
#   https://pypi.org/project/x3d
#
# Installation:
#       pip install x3d
# or
#       python -m pip install x3d
#
# Developer options for loading x3d package in other Python programs:
#
#    from x3d import *  # preferred approach, terser source that avoids x3d.* class prefixes
#
# or
#    import x3d         # traditional way to subclass x3d package, all classes require x3d.* prefix,
#                       # but python source is very verbose, for example x3d.Material x3d.Shape etc.
#                       # X3dToPython.xslt stylesheet insertPackagePrefix=true supports this option.
#
# Project home page:    # X3D Python Scene Access Interface Library (X3DPSAIL)
#                       # https://www.web3d.org/x3d/stylesheets/python/python.html
# Conversion generator: # https://www.web3d.org/x3d/stylesheets/X3dToPython.xslt
#
####################################################################################################

from x3d import *

newModel=X3D(profile='Immersive',version='3.3',
  head=head(
    children=[
    meta(content='MoveSeaByExtrusion14.x3d',name='title'),
    meta(content='Marcus V. da S. Simoes',name='creator'),
    meta(content='11 January 2001',name='created'),
    meta(content='20 October 2019',name='modified'),
    meta(content='Sea state rendering of ocean wave motion.',name='description'),
    meta(content='https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/MoveSeaByExtrusion14.x3d',name='identifier'),
    meta(content='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit',name='generator'),
    meta(content='../../license.html',name='license')]),
  Scene=Scene(
    children=[
    Comment('Axis'),
    WorldInfo(title='MoveSeaByExtrusion14.x3d'),
    NavigationInfo(speed=100),
    Background(groundAngle=[1.309,1.570796],groundColor=[(0.0,0.2,0.7),(0.0,0.5,1.0),(0.6,0.6,0.6)],skyAngle=[1.309,1.571],skyColor=[(0.0,0.2,0.7),(0.0,0.5,1.0),(0.6,0.6,0.6)]),
    Comment('================================================='),
    Comment('SeaState&DirectionControlPanel'),
    Comment('================================================='),
    Transform(DEF='SeaBoxSeaandRockIsland',
      children=[
      Shape(
        geometry=Box(size=(800,400,1000)),
        appearance=Appearance(
          material=Material(transparency=1))),
      Transform(DEF='TheSeaState',translation=(0,0,-500),
        children=[
        Transform(translation=(0,-5000,0),
          children=[
          Shape(DEF='BasicWave',
            appearance=Appearance(DEF='SeaColor',
              texture=ImageTexture(url=["pool.jpg","https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/pool.jpg"]),
              material=Material(diffuseColor=(0,0,0),transparency=0.3)),
            geometry=Extrusion(DEF='BasicExtrusion',beginCap=False,convex=False,creaseAngle=0.01,crossSection=[(0,0),(0,10),(0,0)],endCap=False,solid=False,spine=[(0,0.0,0.0000),(1.0,0.0204,1.0000),(2.0,0.0161,2.0000),(3.0,-0.0218,3.0000),(4.0,-0.0791,4.0000),(5.0,-0.1237,5.0000),(6.0,-0.1224,6.000),(7.0,-0.0598,7.0000),(8.0,0.0503,8.0000),(9.0,0.1661,9.0000),(10.0,0.2348,10.0000),(11.0,0.2163,11.0000),(12.0,0.1041,12.0000),(13.0,-0.0672,13.0000),(14.0,-0.2326,14.0000),(15.0,-0.3224,15.0000),(16.0,-0.2920,16.0000),(17.0,-0.1434,17.0000),(18.0,0.0723,18.0000),(19.0,0.2728,19.0000),(20.0,0.3776,20.0000),(21.0,0.3408,21.0000),(22.0,0.1718,22.0000),(23.0,-0.0670,23.0000),(24.0,-0.2840,24.0000),(25.0,-0.3951,25.0000),(26.0,-0.3568,26.0000),(27.0,-0.1846,27.0000),(28.0,0.0541,28.0000),(29.0,0.2668,29.0000),(30.0,0.3734,30.0000),(31.0,0.3373,31.0000),(32.0,0.1782,32.0000),(33.0,-0.0373,33.0000),(34.0,-0.2246,34.0000),(35.0,-0.3153,35.0000),(36.0,-0.2831,36.0000),(37.0,-0.1513,37.0000),(38.0,0.0205,38.0000),(39.0,0.1632,39.0000),(40.0,0.2269,40.0000),(41.0,0.1990,41.0000),(42.0,0.1048,42.0000),(43.0,-0.0074,43.0000),(44.0,-0.0903,44.0000),(45.0,-0.1177,45.0000),(46.0,-0.0928,46.0000),(47.0,-0.0423,47.0000),(48.0,0.0006,48.0000),(49.0,0.0142,49.0000),(50.0,-0.0012,50.0000),(51.0,-0.0251,51.0000),(52.0,-0.0307,52.0000),(53.0,-0.0015,53.0000),(54.0,0.0571,54.0000),(55.0,0.1175,55.0000),(56.0,0.1429,56.0000),(57.0,0.1069,57.0000),(58.0,0.0098,58.0000),(59.0,-0.1166,59.0000),(60.0,-0.2197,60.0000),(61.0,-0.2485,61.0000),(62.0,-0.1780,62.0000),(63.0,-0.0240,63.0000),(64.0,0.1590,64.0000),(65.0,0.2978,65.0000),(66.0,0.3309,66.0000),(67.0,0.2357,67.0000),(68.0,0.0411,68.0000),(69.0,-0.1814,69.0000),(70.0,-0.3446,70.0000),(71.0,-0.3815,71.0000),(72.0,-0.2729,72.0000),(73.0,-0.0574,73.0000),(74.0,0.1834,74.0000),(75.0,0.3563,75.0000),(76.0,0.3946,76.0000),(77.0,0.2841,77.0000),(78.0,0.0689,78.0000),(79.0,-0.1668,79.0000),(80.0,-0.3327,80.0000),(81.0,-0.3686,81.0000),(82.0,-0.2664,82.0000),(83.0,-0.0721,83.0000),(84.0,0.1355,84.0000),(85.0,0.2774,85.0000),(86.0,0.3057,86.0000),(87.0,0.2201,87.0000),(88.0,0.0645,88.0000),(89.0,-0.0946,89.0000),(90.0,-0.1969,90.0000),(91.0,-0.2121,91.0000),(92.0,-0.1485,92.0000),(93.0,-0.0450,93.0000),(94.0,0.0499,94.0000),(95.0,0.1004,95.0000),(96.0,0.0972,96.0000),(97.0,0.0580,97.0000),(98.0,0.0142,98.0000),(99.0,-0.0071,99.0000),(100.0,0.0020,100.0)]))]),
        Switch(DEF='SeaStateNumber',whichChoice=0,
          children=[
          Group(DEF='SeaState_1',
            children=[
            Transform(DEF='SST1Escale',scale=(100,.05,100),
              children=[
              Shape(USE='BasicWave')])]),
          Group(DEF='SeaState_2',
            children=[
            Transform(DEF='SST2Scale',scale=(100,1,100),
              children=[
              Shape(USE='BasicWave')])]),
          Group(DEF='SeaState_3',
            children=[
            Transform(DEF='SST3Scale',scale=(100,2,100),
              children=[
              Shape(USE='BasicWave')])]),
          Group(DEF='SeaState_4',
            children=[
            Transform(DEF='SST4Scale',scale=(100,4,100),
              children=[
              Shape(USE='BasicWave')])]),
          Group(DEF='SeaState_5',
            children=[
            Transform(DEF='SST5Scale',scale=(100,8,100),
              children=[
              Shape(USE='BasicWave')])]),
          Group(DEF='SeaState_6',
            children=[
            Transform(DEF='SSTScale6',scale=(100,12,100),
              children=[
              Shape(USE='BasicWave')])]),
          Group(DEF='SeaState_7',
            children=[
            Transform(DEF='SSTScale7',scale=(100,16,100),
              children=[
              Shape(USE='BasicWave')])]),
          Group(DEF='SeaState_8',
            children=[
            Transform(DEF='SSTScale8',scale=(100,21,100),
              children=[
              Shape(USE='BasicWave')])])])]),
      Group(DEF='TheBeach',
        children=[
        Transform(scale=(25,120,25),translation=(-400,-2,-400),
          children=[
          Shape(
            geometry=ElevationGrid(DEF='BeachElevation',height=[0.0000,0.0025,0.0049,0.0070,0.0088,0.0102,0.0110,0.0112,0.0108,0.0096,0.0078,0.0052,0.0019,-0.0020,-0.0066,-0.0116,-0.0171,-0.0228,-0.0287,-0.0347,-0.0405,-0.0461,-0.0512,-0.0558,-0.0596,-0.0626,-0.0645,-0.0654,-0.0651,-0.0636,-0.0607,-0.0565,-0.0510,-0.0443,-0.0363,-0.0271,-0.0170,-0.0060,0.0057,0.0179,0.0305,0.0431,0.0557,0.0678,0.0794,0.0901,0.0997,0.1081,0.1150,0.1202,0.1236,0.1250,0.1244,0.1217,0.1268,0.1299,0.128,0.0897,0.0768,0.0622,0.0460,0.0286,0.101,-0.0091,-0.0287,-0.0485,-0.0680,-0.0870,-0.1051,-0.1220,-0.1373,-0.1508,-0.1622,-0.1713,-0.1778,-0.1815,-0.1824,-0.1804,-0.1754,-0.1673,-0.1564,-0.1427,-0.1264,-0.1076,-0.0867,-0.0639,-0.0396,-0.0142,0.0,0.0,0.0,0.0,0.10,0.1,0.14,0.11,0.11,0.0,0.04,0.0],xDimension=10,zDimension=10),
            appearance=Appearance(
              texture=ImageTexture(url=["rocks_1.jpg","https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/clouds2.jpg"])))]),
        Transform(DEF='BeachView',rotation=(0,1,0,1.2),translation=(250,10,100),
          children=[
          Viewpoint(description='ROCK VIEW')])])]),
    Comment('================================================='),
    Comment('SeaLevelChoiceGroup'),
    Comment('================================================='),
    Group(DEF='SeaStateAndDirectionControlPanel',
      children=[
      Transform(translation=(0,100,4000),
        children=[
        Billboard(
          children=[
          Group(DEF='SeaStateChoice',
            children=[
            Transform(DEF='Option1',translation=(0,-2.0,0),
              children=[
              Transform(DEF='Box1',translation=(0,.1,0),
                children=[
                Shape(DEF='BoxSensor',
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(0,0,1),specularColor=(0,0,1),transparency=.9))),
                TouchSensor(DEF='TouchSensorSeaState1',description='touch to activate'),
                Transform(DEF='Text1',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 1"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))])])]),
            Transform(DEF='Option2',translation=(0,-1.5,0),
              children=[
              Transform(DEF='Box2',translation=(0,.1,0),
                children=[
                Shape(
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(0,0,.8),transparency=.7))),
                TouchSensor(DEF='TouchSensorSeaState2',description='touch to activate'),
                Transform(DEF='Text2',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 2"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))])])]),
            Transform(DEF='Option3',translation=(0,-1.0,0),
              children=[
              Transform(DEF='Box3',translation=(0,.1,0),
                children=[
                Shape(
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(0,0,.8),transparency=.7))),
                TouchSensor(DEF='TouchSensorSeaState3',description='touch to activate'),
                Transform(DEF='Text3',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 3"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))])])]),
            Transform(DEF='Option4',translation=(0,-0.5,0),
              children=[
              Transform(DEF='Box4',translation=(0,.1,0),
                children=[
                Shape(
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(0,0.8,0),transparency=0.8))),
                TouchSensor(DEF='TouchSensorSeaState4',description='touch to activate'),
                Transform(DEF='Text4',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 4"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))])])]),
            Transform(DEF='Option5',
              children=[
              Transform(DEF='Box5',translation=(0,.1,0),
                children=[
                Shape(
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(0,.5,0),transparency=.4))),
                Transform(DEF='Text5',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 5"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))]),
                TouchSensor(DEF='TouchSensorSeaState5',description='touch to activate')])]),
            Transform(DEF='Option6',translation=(0,.5,0),
              children=[
              Transform(DEF='Box6',translation=(0,.1,0),
                children=[
                Transform(DEF='Text6',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 6"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))]),
                Shape(
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(.2,0,0),transparency=0.8))),
                TouchSensor(DEF='TouchSensorSeaState6',description='touch to activate')])]),
            Transform(DEF='Option7',translation=(0,1.0,0),
              children=[
              Transform(DEF='Box7',translation=(0,.1,0),
                children=[
                Transform(DEF='Text7',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 7"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))]),
                Shape(
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(.5,0,0),transparency=0.7))),
                TouchSensor(DEF='TouchSensorSeaState7',description='touch to activate')])]),
            Transform(DEF='Option8',translation=(0,1.5,0),
              children=[
              Transform(DEF='Box8',translation=(0,.1,0),
                children=[
                Transform(DEF='Text8',scale=(.25,.25,.25),translation=(0,0,.1),
                  children=[
                  Shape(
                    geometry=Text(string=["SST 8"],
                      fontStyle=FontStyle(justify=["MIDDLE","MIDDLE"])),
                    appearance=Appearance(
                      material=Material(emissiveColor=(.8,.8,.8))))]),
                Shape(
                  geometry=Box(size=(1,.4,.1)),
                  appearance=Appearance(
                    material=Material(diffuseColor=(1,0,0),transparency=0.5))),
                TouchSensor(DEF='TouchSensorSeaState8',description='touch to activate')])]),
            Transform(translation=(0,0,-3),
              children=[
              Shape(
                geometry=Box(size=(2,6.5,0.2)),
                appearance=Appearance(
                  material=Material(diffuseColor=(.3,.3,.3))))])])]),
        Viewpoint(description='SEA PANEL',position=(-2,0,6))])]),
    Comment('================================================='),
    Comment('TaskForce'),
    Comment('================================================='),
    Group(DEF='TaskForce',
      children=[
      Comment('Cruiser'),
      Transform(DEF='ShipVelocity',rotation=(0,1,0,2.357),
        children=[
        Transform(DEF='ShipBuoyance',
          children=[
          Transform(DEF='ShipPitch',
            children=[
            Transform(DEF='ShipRoll',
              children=[
              Inline(url=["../../ShipsMilitary/CruiserUnitedStates/Cruiser.x3d","https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/CruiserUnitedStates/Cruiser.x3d","../../ShipsMilitary/CruiserUnitedStates/Cruiser.wrl","https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/CruiserUnitedStates/Cruiser.wrl"]),
              Transform(translation=(38,18.5,-9.5),
                children=[
                Viewpoint(DEF='ShipBridge',description='BRIDGE VIEW',fieldOfView=1.51,orientation=(0,1,0,-1.57))])])]),
          Viewpoint(DEF='TopView',description='AERIAL VIEW',orientation=(1,0,0,-1.571),position=(0,500,0))])]),
      Comment('SubmarineSimulation@5mDepth'),
      Transform(DEF='SubBuoyance',rotation=(0,1,0,0.785),scale=(.1,.1,.1),translation=(300,-10,-300),
        children=[
        Transform(DEF='SubPitch',
          children=[
          Transform(DEF='SubRoll',
            children=[
            Transform(
              children=[
              Inline(url=["../../Submarines/SsnLosAngelesUnitedStates/688.x3d","https://www.web3d.org/x3d/content/examples/Savage/Submarines/SsnLosAngelesUnitedStates/688.x3d","../../Submarines/SsnLosAngelesUnitedStates/688.wrl","https://www.web3d.org/x3d/content/examples/Savage/Submarines/SsnLosAngelesUnitedStates/688.wrl"]),
              Viewpoint(description='PERISCOPE VIEW',fieldOfView=0.4,orientation=(0,1,0,1.57),position=(0,120,0))])])])])]),
    Comment('================================================='),
    Comment('AnimationClock'),
    Comment('================================================='),
    Group(DEF='TimeSensors',
      children=[
      TimeSensor(DEF='ShipClock',cycleInterval=80,loop=True),
      TimeSensor(DEF='BuoyanceClock',cycleInterval=80,loop=True),
      TimeSensor(DEF='PitchClock',cycleInterval=25,loop=True),
      TimeSensor(DEF='RollClock',cycleInterval=40,loop=True),
      TimeSensor(DEF='Clock',cycleInterval=45,loop=True)]),
    Comment('================================================='),
    Comment('Interpolators'),
    Comment('================================================='),
    Comment('MovingTheShip'),
    Group(DEF='Orientation',
      children=[
      OrientationInterpolator(DEF='Roll',key=[0.0,0.5,1.0],keyValue=[(1,0,0,-0.08),(1,0,0,0.08),(1,0,0,-0.08)]),
      OrientationInterpolator(DEF='Pitch',key=[0.0,0.5,1.0],keyValue=[(0,0,1,-0.03),(0,0,1,0.03),(0,0,1,-0.03)]),
      PositionInterpolator(DEF='ShipBuoyanceHeight',key=[0,0.0100,0.0200,0.0300,0.0400,0.0500,0.0600,0.0700,0.0800,0.0900,0.1000,0.1100,0.1200,0.1300,0.1400,0.1500,0.1600,0.1700,0.1800,0.1900,0.2000,0.2100,0.2200,0.2300,0.2400,0.2500,0.2600,0.2700,0.2800,0.2900,0.3000,0.3100,0.3200,0.3300,0.3400,0.3500,0.3600,0.3700,0.3800,0.3900,0.4000],keyValue=[(400.0,1.1345,400.0000),(390.0,0.8160,390.0000),(380.0,0.1025,380.0000),(370.0,-0.7565,370.0000),(360.0,-1.4155,360.0000),(350.0,-1.5765,350.0000),(340.0,-1.1230,340.0000),(330.0,-0.1865,330.0000),(320.0,0.8910,320.0000),(310.0,1.6865,310.0000),(300.0,1.8670,300.0000),(290.0,1.3340,290.0000),(280.0,0.2705,280.0000),(270.0,-0.9230,270.0000),(260.0,-1.7840,260.0000),(250.0,-1.9755,250.0000),(240.0,-1.4200,240.0000),(230.0,-0.3350,230.0000),(220.0,0.8590,220.0000),(210.0,1.7040,210.0000),(200.0,1.8880,200.0000),(190.0,1.3640,190.0000),(180.0,0.3615,180.0000),(170.0,-0.7170,170.0000),(160.0,-1.4600,160.0000),(150.0,-1.6120,150.0000),(140.0,-1.1630,140.0000),(130.0,-0.3360,130.0000),(120.0,0.5205,120.0000),(110.0,1.0815,110.0000),(100.0,1.1740,100.0000),(90.0,0.8305,90.0000),(80.0,0.2515,80.0000),(70.0,-0.2990,70.0000),(60.0,-0.6120,60.0000),(50.0,-0.6185,50.0000),(40.0,-0.3955,40.0000),(30.0,-0.1090,30.0000),(20.0,0.0805,20.0000),(10.0,0.1020,10.0000),(0,0,0)]),
      PositionInterpolator(DEF='SubBuoyanceHeigth',key=[0,0.0100,0.0200,0.0300,0.0400,0.0500,0.0600,0.0700,0.0800,0.0900,0.1000,0.1100,0.1200,0.1300,0.1400,0.1500,0.1600,0.1700,0.1800,0.1900,0.2000,0.2100,0.2200,0.2300,0.2400,0.2500,0.2600,0.2700,0.2800,0.2900,0.3000,0.3100,0.3200,0.3300,0.3400,0.3500,0.3600,0.3700,0.3800,0.3900,0.4000],keyValue=[(300.0,-0.0060,-300.0000),(300.0,0.0710,-300.0000),(300.0,0.0030,-300.0000),(300.0,-0.2115,-300.0000),(300.0,-0.4640,-300.0000),(300.0,-0.5885,-300.0000),(300.0,-0.4515,-300.0000),(300.0,-0.0370,-300.0000),(300.0,0.5240,-300.0000),(300.0,0.9950,-300.0000),(300.0,1.1345,-300.0000),(300.0,0.8160,-300.0000),(300.0,0.1025,-300.0000),(300.0,-0.7565,-300.0000),(300.0,-1.4155,-300.0000),(300.0,-1.5765,-300.0000),(300.0,-1.1230,-300.0000),(300.0,-0.1865,-300.0000),(300.0,0.8910,-300.0000),(300.0,1.6865,-300.0000),(300.0,1.8670,-300.0000),(300.0,1.3340,-300.0000),(300.0,0.2705,-300.0000),(300.0,-0.9230,-300.0000),(300.0,-1.7840,-300.0000),(300.0,-1.9755,-300.0000),(300.0,-1.4200,-300.0000),(300.0,-0.3350,-300.0000),(300.0,0.8590,-300.0000),(300.0,1.7040,-300.0000),(300.0,1.8880,-300.0000),(300.0,1.3640,-300.0000),(300.0,-0.7170,-300.0000),(300.0,-1.4600,-300.0000),(300.0,-1.6120,-300.0000),(300.0,-1.1630,-300.0000),(300.0,-0.3360,-300.0000),(300.0,0.5205,-300.0000),(300.0,1.0815,-300.0000),(300.0,1.1740,-300.0000),(300.0,0.8305,-300.0)])]),
    Comment('MovingTheSea'),
    Group(DEF='Coordinate',
      children=[
      CoordinateInterpolator(DEF='Ondulation',key=[0.0,0.25,0.50,0.75,1.0],keyValue=[(-4.100,0.0,0),(-4.0,0.0,0),(-3.529,0.674,0),(-3.059,0.996,0),(-2.588,0.798,0),(-2.118,0.184,0),(-1.647,-0.526,0),(-1.176,-0.962,0),(-0.706,-0.895,0),(-0.235,-0.361,0),(0.235,0.361,0),(0.706,0.895,0),(1.176,0.962,0),(1.647,0.526,0),(2.118,-0.184,0),(2.588,-0.798,0),(3.059,-0.996,0),(3.529,-0.674,0),(4.0,0.0,0),(-4.100,-1.0,0),(-4.0,-1.0,0),(-3.529,-0.739,0),(-3.059,-0.092,0),(-2.588,0.603,0),(-2.118,0.983,0),(-1.647,0.850,0),(-1.176,0.274,0),(-0.706,-0.446,0),(-0.235,-0.932,0),(0.235,-0.932,0),(0.706,-0.446,0),(1.176,0.274,0),(1.647,0.850,0),(2.118,0.983,0),(2.588,0.603,0),(3.059,-0.092,0),(3.529,-0.739,0),(4.0,-1.0,0),(-4.100,0.0,0),(-4.0,0.0,0),(-3.529,-0.674,0),(-3.059,-0.996,0),(-2.588,-0.798,0),(-2.118,-0.184,0),(-1.647,0.526,0),(-1.176,0.962,0),(-0.706,0.895,0),(-0.235,0.361,0),(0.235,-0.361,0),(0.706,-0.895,0),(1.176,-0.962,0),(1.647,-0.526,0),(2.118,0.184,0),(2.588,0.798,0),(3.059,0.996,0),(3.529,0.674,0),(4.0,0.0,0),(-4.100,1.0,0),(-4.0,1.0,0),(-3.529,0.739,0),(-3.059,0.092,0),(-2.588,-0.603,0),(-2.118,-0.983,0),(-1.647,-0.850,0),(-1.176,-0.274,0),(-0.706,0.446,0),(-0.235,0.932,0),(0.235,0.932,0),(0.706,0.446,0),(1.176,-0.274,0),(1.647,-0.850,0),(2.118,-0.983,0),(2.588,-0.603,0),(3.059,0.092,0),(3.529,0.739,0),(4.0,1.0,0),(-4.100,0.0,0),(-4.0,0.0,0),(-3.529,0.674,0),(-3.059,0.996,0),(-2.588,0.798,0),(-2.118,0.184,0),(-1.647,-0.526,0),(-1.176,-0.962,0),(-0.706,-0.895,0),(-0.235,-0.361,0),(0.235,0.361,0),(0.706,0.895,0),(1.176,0.962,0),(1.647,0.526,0),(2.118,-0.184,0),(2.588,-0.798,0),(3.059,-0.996,0),(3.529,-0.674,0),(4.0,0.0,0)])]),
    Comment('================================================='),
    Comment('Scripts'),
    Comment('================================================='),
    Group(DEF='ScriptsForWaveMovement',
      children=[
      Script(DEF='SeaStateChoiceToValue',
        field=[
        field(accessType='inputOnly',name='SeaStateChoice0',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice1',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice2',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice3',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice4',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice5',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice6',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice7',type='SFBool'),
        field(accessType='inputOnly',name='SeaStateChoice8',type='SFBool'),
        field(accessType='outputOnly',name='SeaStateValue',type='SFInt32'),
        field(accessType='outputOnly',name='BuoyanceValue',type='MFVec3f'),
        field(accessType='outputOnly',name='BuoyanceKeyValues',type='MFFloat'),
        field(accessType='outputOnly',name='PitchValue',type='MFRotation'),
        field(accessType='outputOnly',name='RollValue',type='MFRotation')],

      sourceCode="""
ecmascript:

// Return the numeric value of SST button clicked
//mfVec3fObjectName = new MFVec3f(SFVec3f v1, SFVec3f v2,...)
//sfVec3fObjectName = new SFVec3f(numeric x, numeric y, numeric z)
//sfRotationObjectName = new SFRotation(numeric x, numeric y, numeric z, numeric angle)
//mfRotationObjectName = new MFRotation(SFRotation r1, SFRotation r2, ...)
//mfFloatObjectName = new MFFloat(numeric n1, numeric n2, ...)

//Sea state 4 ( Beaufort=4-6)with wind=20 Knots
//               freq=0.124(8.1 period)
//               wavelength=159.2m
//               waveheight=4-8 ft or 1.32m-2.64 meam +/- 1.98=2.00m


function initialize ()
{
	SeaStateValue = 0;
}

//function ComputeSSH(Ssh)
//Sea state 1 (Beaufort 2 to 3) with wind 4 to 10 Knots
//               freq = .5   (    period (T))
//               wavelength= 12.5   m (L)
//               waveheight=2-4 (3 as mean or ft or 0.91 meam +/- .91m ( A )
//{
//	A=0.91;
//	L=12.5;
//	k=1/159.2;
//	f=0.5;
//	pi=3.141592;
//	T=8.1;
//	for ( var x=0, t=0 ; i <= 10 ; x=x+0.1, t=t+0.1);
//	theta0=0;
//	theta1=pi/12;
//	theta2=-pi/12;
//	w=2*pi*0.124;
//	height=A*cos(2*pi*((x/L)-(t/T)));
//	saida=[x       t        height];
//	return height;
//}

function SeaStateChoice1 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
//	ComputeSSH(1);
	SeaStateValue = 0;
	L=1
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.01);
	R2 = new SFRotation(1, 0, 0, -0.01);
	R3 = new SFRotation(1, 0, 0, 0.01);
	P1 = new SFRotation(0, 0, 1, 0.01);
	P2 = new SFRotation(0, 0, 1, -0.01);
	P3 = new SFRotation(0, 0, 1, 0.01);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}

function SeaStateChoice2 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 1;
	L=1.5
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.02);
	R2 = new SFRotation(1, 0, 0, -0.02);
	R3 = new SFRotation(1, 0, 0, 0.02);
	P1 = new SFRotation(0, 0, 1, 0.02);
	P2 = new SFRotation(0, 0, 1, -0.02);
	P3 = new SFRotation(0, 0, 1, 0.02);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}

function SeaStateChoice3 (inputBoolean,timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 2;
	L=2
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.03);
	R2 = new SFRotation(1, 0, 0, -0.03);
	R3 = new SFRotation(1, 0, 0, 0.03);
	P1 = new SFRotation(0, 0, 1, 0.03);
	P2 = new SFRotation(0, 0, 1, -0.03);
	P3 = new SFRotation(0, 0, 1, 0.03);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice4 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	L=3
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.07);
	R2 = new SFRotation(1, 0, 0, -0.07);
	R3 = new SFRotation(1, 0, 0, 0.07);
	P1 = new SFRotation(0, 0, 1, 0.07);
	P2 = new SFRotation(0, 0, 1, -0.07);
	P3 = new SFRotation(0, 0, 1, 0.07);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice5 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 4;
	L=5
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.1);
	R2 = new SFRotation(1, 0, 0, -0.1);
	R3 = new SFRotation(1, 0, 0, 0.1);
	P1 = new SFRotation(0, 0, 1, 0.1);
	P2 = new SFRotation(0, 0, 1, -0.1);
	P3 = new SFRotation(0, 0, 1, 0.1);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}

function SeaStateChoice6 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 5;
	L=7
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.1);
	R2 = new SFRotation(1, 0, 0, -0.1);
	R3 = new SFRotation(1, 0, 0, 0.1);
	P1 = new SFRotation(0, 0, 1, 0.15);
	P2 = new SFRotation(0, 0, 1, -0.15);
	P3 = new SFRotation(0, 0, 1, 0.15);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice7 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	 SeaStateValue = 6;
	L=9
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.15);
	R2 = new SFRotation(1, 0, 0, -0.15);
	R3 = new SFRotation(1, 0, 0, 0.15);
	P1 = new SFRotation(0, 0, 1, 0.2);
	P2 = new SFRotation(0, 0, 1, -0.2);
	P3 = new SFRotation(0, 0, 1, 0.2);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice8 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 7;
	L=10
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.25);
	R2 = new SFRotation(1, 0, 0, -0.25);
	R3 = new SFRotation(1, 0, 0, 0.25);
	P1 = new SFRotation(0, 0, 1, 0.3);
	P2 = new SFRotation(0, 0, 1, -0.3);
	P3 = new SFRotation(0, 0, 1, 0.3);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}
""")]),
    Comment('================================================='),
    Comment('RoutesToChooseSST'),
    Comment('================================================='),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState1',toField='SeaStateChoice1',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState2',toField='SeaStateChoice2',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState3',toField='SeaStateChoice3',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState4',toField='SeaStateChoice4',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState5',toField='SeaStateChoice5',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState6',toField='SeaStateChoice6',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState7',toField='SeaStateChoice7',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='isActive',fromNode='TouchSensorSeaState8',toField='SeaStateChoice8',toNode='SeaStateChoiceToValue'),
    ROUTE(fromField='SeaStateValue',fromNode='SeaStateChoiceToValue',toField='whichChoice',toNode='SeaStateNumber'),
    ROUTE(fromField='BuoyanceValue',fromNode='SeaStateChoiceToValue',toField='set_keyValue',toNode='ShipBuoyanceHeight'),
    ROUTE(fromField='BuoyanceKeyValues',fromNode='SeaStateChoiceToValue',toField='set_key',toNode='ShipBuoyanceHeight'),
    ROUTE(fromField='PitchValue',fromNode='SeaStateChoiceToValue',toField='set_keyValue',toNode='Pitch'),
    ROUTE(fromField='RollValue',fromNode='SeaStateChoiceToValue',toField='set_keyValue',toNode='Roll'),
    Comment(''),
    Comment('================================================='),
    Comment('RoutesToMoveTheSea'),
    Comment('================================================='),
    ROUTE(fromField='fraction_changed',fromNode='Clock',toField='set_fraction',toNode='Ondulation'),
    ROUTE(fromField='value_changed',fromNode='Ondulation',toField='set_spine',toNode='BasicExtrusion'),
    Comment('================================================='),
    Comment('RoutesToMoveTheShip'),
    Comment('================================================='),
    ROUTE(fromField='fraction_changed',fromNode='PitchClock',toField='set_fraction',toNode='Pitch'),
    ROUTE(fromField='value_changed',fromNode='Pitch',toField='set_rotation',toNode='ShipPitch'),
    ROUTE(fromField='value_changed',fromNode='Pitch',toField='set_rotation',toNode='SubPitch'),
    ROUTE(fromField='fraction_changed',fromNode='RollClock',toField='set_fraction',toNode='Roll'),
    ROUTE(fromField='value_changed',fromNode='Roll',toField='set_rotation',toNode='ShipRoll'),
    ROUTE(fromField='value_changed',fromNode='Roll',toField='set_rotation',toNode='SubRoll'),
    ROUTE(fromField='fraction_changed',fromNode='BuoyanceClock',toField='set_fraction',toNode='ShipBuoyanceHeight'),
    ROUTE(fromField='value_changed',fromNode='ShipBuoyanceHeight',toField='set_translation',toNode='ShipBuoyance'),
    ROUTE(fromField='fraction_changed',fromNode='BuoyanceClock',toField='set_fraction',toNode='SubBuoyanceHeigth'),
    ROUTE(fromField='value_changed',fromNode='SubBuoyanceHeigth',toField='set_translation',toNode='ShipBuoyance'),
    ROUTE(fromField='fraction_changed',fromNode='ShipClock',toField='set_fraction',toNode='ShipBuoyanceHeight'),
    ROUTE(fromField='value_changed',fromNode='ShipBuoyanceHeight',toField='set_translation',toNode='ShipVelocity')])
)

### X3D model conversion complete ###

####################################################################################################
# Self-test diagnostics
####################################################################################################

print('Self-test diagnostics for MoveSeaByExtrusion14.py:')
if        metaDiagnostics(newModel): # built-in utility method in X3D class
    print(metaDiagnostics(newModel)) # display meta info, hint, warning, error, TODO values in this model
# print('check newModel.XML() serialization...')
newModelXML= newModel.XML() # test export method XML() for exceptions during export
newModel.XMLvalidate()
# print(newModelXML) # diagnostic

try:
#   print('check newModel.VRML() serialization...')
    newModelVRML=newModel.VRML() # test export method VRML() for exceptions during export
    # print(prependLineNumbers(newModelVRML)) # debug
    print("Python-to-VRML export of VRML output successful", flush=True)
except Exception as err: # usually BaseException
    # https://stackoverflow.com/questions/18176602/how-to-get-the-name-of-an-exception-that-was-caught-in-python
    print("*** Python-to-VRML export of VRML output failed:", type(err).__name__, err)
    if newModelVRML: # may have failed to generate
        print(prependLineNumbers(newModelVRML, err.lineno))

try:
#   print('check newModel.JSON() serialization...')
    newModelJSON=newModel.JSON() # test export method JSON() for exceptions during export
#   print(prependLineNumbers(newModelJSON)) # debug
    print("Python-to-JSON export of JSON output successful (under development)")
except Exception as err: # usually SyntaxError
    print("*** Python-to-JSON export of JSON output failed:", type(err).__name__, err)
    if newModelJSON: # may have failed to generate
        print(prependLineNumbers(newModelJSON,err.lineno))

print("python MoveSeaByExtrusion14.py load and self-test diagnostics complete.")
