####################################################################################################
#
# Invoking X3D model self-test:
#
#   $ python House.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.0',
  head=head(
    children=[
    meta(content='House.x3d',name='title'),
    meta(content='A house model with basic furniture, appliances and and animated doors.',name='description'),
    meta(content='20 July 2002',name='created'),
    meta(content='7 April 2024',name='modified'),
    meta(content='Baris Aktop',name='creator'),
    meta(content='All sound effects can be used in any school project',name='rights'),
    meta(content='waterflow.wav',name='Sound'),
    meta(content='doorbell.wav',name='Sound'),
    meta(content='toiletflush.wav',name='Sound'),
    meta(content='http://www.a1freesoundeffects.com/household.html',name='reference'),
    meta(content='house',name='subject'),
    meta(content='https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/House.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=[
    WorldInfo(title='House.x3d'),
    Group(DEF='front',
      children=[
      Transform(DEF='wall1',translation=(-3.75,2,0),
        children=[
        Shape(DEF='part1',
          geometry=Box(size=(1.5,4,0.1)),
          appearance=Appearance(DEF='wall_ap',
            material=Material(diffuseColor=(0.8,0.8,0.4))))]),
      Transform(DEF='wall11',translation=(-1.25,2,0),
        children=[
        Shape(DEF='part11',
          geometry=Box(size=(1.5,4,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='wall12',translation=(-2.5,3,0),
        children=[
        Shape(DEF='part12',
          geometry=Box(size=(1,2,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='wall13',translation=(-2.5,0.5,0),
        children=[
        Shape(DEF='part13',
          geometry=Box(size=(1,1,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='WINDOW2',translation=(-2.5,1.5,0.05),
        children=[
        Shape(DEF='window2',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(DEF='windowApp',
            material=Material(diffuseColor=(0.7,0.9,0.9),transparency=0.5))),
        Transform(translation=(0.4,0,-0.1),
          children=[
          Shape(DEF='window2knubopen',
            geometry=Sphere(DEF='window2Knub',radius=0.05),
            appearance=Appearance(
              material=Material(),))]),
        PlaneSensor(DEF='window2Slide',description='click and drag to move window',maxPosition=(-2.5,1.5),minPosition=(-3,1.5)),
        ROUTE(fromField='translation_changed',fromNode='window2Slide',toField='set_translation',toNode='WINDOW2')]),
      Transform(DEF='WINDOW1',translation=(2.5,1.5,0.05),
        children=[
        Shape(DEF='window1',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(USE='windowApp')),
        Transform(translation=(-0.4,0,-0.1),
          children=[
          Shape(DEF='window1knubopen',
            geometry=Sphere(DEF='window1Knub',radius=0.05),
            appearance=Appearance(
              material=Material(),))]),
        PlaneSensor(DEF='windowSlide',description='click and drag to move window',maxPosition=(3,1.5),minPosition=(2.5,1.5)),
        ROUTE(fromField='translation_changed',fromNode='windowSlide',toField='set_translation',toNode='WINDOW1')]),
      Transform(DEF='wall2',translation=(1.25,2,0),
        children=[
        Shape(DEF='part21',
          geometry=Box(size=(1.5,4,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='wall3',translation=(0,3,0),
        children=[
        Shape(DEF='part3',
          geometry=Box(size=(1,2,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='wall31',translation=(3.75,2,0),
        children=[
        Shape(DEF='part31',
          geometry=Box(size=(1.5,4,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='wall32',translation=(2.5,3,0),
        children=[
        Shape(DEF='part32',
          geometry=Box(size=(1,2,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='wall33',translation=(2.5,0.5,0),
        children=[
        Shape(DEF='part33',
          geometry=Box(size=(1,1,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='DOOR',center=(0.5,0,0),translation=(0,1,0),
        children=[
        Shape(DEF='door',
          geometry=Box(size=(1,2,0.1)),
          appearance=Appearance(
            material=Material(diffuseColor=(0.8,0.5,0)),
            texture=ImageTexture(DEF='wood',url=["wood.jpg","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/wood.jpg"]))),
        Transform(translation=(-0.4,0,0.05),
          children=[
          Shape(DEF='knubOut',
            geometry=Sphere(DEF='doorKnub',radius=0.05),
            appearance=Appearance(DEF='knub_ap',
              material=Material(),)),
          TimeSensor(DEF='Clock',cycleInterval=3),
          OrientationInterpolator(DEF='doorPathOpen',key=[0,0.34,0.68,1],keyValue=[(0,1,0,0),(0,1,0,0.7),(0,1,0,1.4),(0,1,0,2.1)]),
          TouchSensor(DEF='touchOpen',description='touch to open'),
          ROUTE(fromField='touchTime',fromNode='touchOpen',toField='set_startTime',toNode='Clock'),
          ROUTE(fromField='fraction_changed',fromNode='Clock',toField='set_fraction',toNode='doorPathOpen'),
          ROUTE(fromField='value_changed',fromNode='doorPathOpen',toField='set_rotation',toNode='DOOR')]),
        Transform(translation=(-0.4,0,-0.05),
          children=[
          Shape(USE='knubOut'),
          TimeSensor(DEF='ClockClose',cycleInterval=2),
          OrientationInterpolator(DEF='doorPathClose',key=[0,0.34,0.68,1],keyValue=[(0,1,0,2.1),(0,1,0,1.4),(0,1,0,0.7),(0,1,0,0)]),
          TouchSensor(DEF='touchClose',description='touch to close'),
          ROUTE(fromField='touchTime',fromNode='touchClose',toField='set_startTime',toNode='ClockClose'),
          ROUTE(fromField='fraction_changed',fromNode='ClockClose',toField='set_fraction',toNode='doorPathClose'),
          ROUTE(fromField='value_changed',fromNode='doorPathClose',toField='set_rotation',toNode='DOOR')])]),
      Transform(translation=(-0.75,1.5,0.1),
        children=[
        Shape(
          geometry=Sphere(radius=0.05),
          appearance=Appearance(DEF='bellap',
            material=Material(diffuseColor=(0.9,0.9,0.9)))),
        Shape(
          geometry=Box(size=(0.2,0.15,0.05)),
          appearance=Appearance(
            material=Material(diffuseColor=(0.5,0.5,0.5)))),
        Sound(maxBack=30,maxFront=30,minBack=10,minFront=10,
          source=AudioClip(DEF='doorbell',description='Door bell',url=["doorbell.wav","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/doorbell.wav"])),
        TouchSensor(DEF='bell',description='touch to ring doorbell'),
        ROUTE(fromField='touchTime',fromNode='bell',toField='set_startTime',toNode='doorbell')])]),
    Group(DEF='rightside',
      children=[
      Transform(DEF='rightsidewall1',rotation=(0,1,0,1.57),translation=(4.5,2,-0.75),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='rightsidewall11',rotation=(0,1,0,1.57),translation=(4.5,3,-2),
        children=[
        Shape(USE='part12')]),
      Transform(DEF='rightsidewall12',rotation=(0,1,0,1.57),translation=(4.5,0.5,-2),
        children=[
        Shape(USE='part13')]),
      Transform(DEF='rightWindow1',rotation=(0,1,0,1.57),translation=(4.55,1.5,-2),
        children=[
        Shape(DEF='rightWindowOne',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(USE='windowApp'))]),
      Transform(translation=(4.4,1.7,-1.4),
        children=[
        Shape(DEF='rightWindow1KnubOpen',
          geometry=Sphere(DEF='rightWindow1Knub',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='rightWindow1Clock'),
        PositionInterpolator(DEF='rightWindow1Pos',key=[0,0.5,1],keyValue=[(4.55,1.5,-2),(4.55,1.5,-2.25),(4.55,1.5,-2.5)]),
        TouchSensor(DEF='rightWindow1Open',description='touch to open'),
        ROUTE(fromField='touchTime',fromNode='rightWindow1Open',toField='set_startTime',toNode='rightWindow1Clock'),
        ROUTE(fromField='fraction_changed',fromNode='rightWindow1Clock',toField='set_fraction',toNode='rightWindow1Pos'),
        ROUTE(fromField='value_changed',fromNode='rightWindow1Pos',toField='set_translation',toNode='rightWindow1')]),
      Transform(translation=(4.4,1.3,-1.4),
        children=[
        Shape(DEF='rightWindow1KnubClose',
          geometry=Sphere(DEF='rightWindow1Knub2',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='rightWindow1Clock2'),
        PositionInterpolator(DEF='rightWindow1Pos2',key=[0,0.5,1],keyValue=[(4.55,1.5,-2.5),(4.55,1.5,-2.25),(4.55,1.5,-2)]),
        TouchSensor(DEF='rightWindow1Close',description='touch to close'),
        ROUTE(fromField='touchTime',fromNode='rightWindow1Close',toField='set_startTime',toNode='rightWindow1Clock2'),
        ROUTE(fromField='fraction_changed',fromNode='rightWindow1Clock2',toField='set_fraction',toNode='rightWindow1Pos2'),
        ROUTE(fromField='value_changed',fromNode='rightWindow1Pos2',toField='set_translation',toNode='rightWindow1')]),
      Transform(DEF='rightsidewall2',rotation=(0,1,0,1.57),translation=(4.5,2,-3.25),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='rightsidewall21',rotation=(0,1,0,1.57),translation=(4.5,3,-4.5),
        children=[
        Shape(USE='part12')]),
      Transform(DEF='rightsidewall22',rotation=(0,1,0,1.57),translation=(4.5,0.5,-4.5),
        children=[
        Shape(USE='part13')]),
      Transform(DEF='rightWindow2',rotation=(0,1,0,1.57),translation=(4.55,1.5,-4.5),
        children=[
        Shape(DEF='rightWindowTwo',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(USE='windowApp'))]),
      Transform(translation=(4.4,1.7,-3.9),
        children=[
        Shape(DEF='rightWindow2KnubOpen',
          geometry=Sphere(DEF='rightWindow2Knub',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='rightWindow2Clock'),
        PositionInterpolator(DEF='rightWindow2Pos',key=[0,0.5,1],keyValue=[(4.55,1.5,-4.5),(4.55,1.5,-4.75),(4.55,1.5,-5)]),
        TouchSensor(DEF='rightWindow2Open',description='touch to open'),
        ROUTE(fromField='touchTime',fromNode='rightWindow2Open',toField='set_startTime',toNode='rightWindow2Clock'),
        ROUTE(fromField='fraction_changed',fromNode='rightWindow2Clock',toField='set_fraction',toNode='rightWindow2Pos'),
        ROUTE(fromField='value_changed',fromNode='rightWindow2Pos',toField='set_translation',toNode='rightWindow2')]),
      Transform(translation=(4.4,1.3,-3.9),
        children=[
        Shape(DEF='rightWindow2KnubClose',
          geometry=Sphere(DEF='rightWindow2Knub2',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='rightWindow2Clock2'),
        PositionInterpolator(DEF='rightWindow2Pos2',key=[0,0.5,1],keyValue=[(4.55,1.5,-5),(4.55,1.5,-4.75),(4.55,1.5,-4.5)]),
        TouchSensor(DEF='rightWindow2Close',description='touch to close'),
        ROUTE(fromField='touchTime',fromNode='rightWindow2Close',toField='set_startTime',toNode='rightWindow2Clock2'),
        ROUTE(fromField='fraction_changed',fromNode='rightWindow2Clock2',toField='set_fraction',toNode='rightWindow2Pos2'),
        ROUTE(fromField='value_changed',fromNode='rightWindow2Pos2',toField='set_translation',toNode='rightWindow2')]),
      Transform(DEF='rightsidewall3',rotation=(0,1,0,1.57),translation=(4.5,2,-5.75),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='rightsidewall31',rotation=(0,1,0,1.57),translation=(4.5,3,-7),
        children=[
        Shape(USE='part12')]),
      Transform(DEF='rightsidewall23',rotation=(0,1,0,1.57),translation=(4.5,0.5,-7),
        children=[
        Shape(USE='part13')]),
      Transform(DEF='rightWindow3',rotation=(0,1,0,1.57),translation=(4.5,1.5,-7),
        children=[
        Shape(DEF='rightWindowThree',
          geometry=Box(size=(1.03,1.03,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='rightsidewall4',rotation=(0,1,0,1.57),translation=(4.5,2,-8.25),
        children=[
        Shape(USE='part1')])]),
    Group(DEF='leftside',
      children=[
      Transform(DEF='leftsidewall1',rotation=(0,1,0,1.57),translation=(-4.5,2,-0.75),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='leftsidewall11',rotation=(0,1,0,1.57),translation=(-4.5,3,-2),
        children=[
        Shape(USE='part12')]),
      Transform(DEF='leftsidewall12',rotation=(0,1,0,1.57),translation=(-4.5,0.5,-2),
        children=[
        Shape(USE='part13')]),
      Transform(DEF='leftWindow1',rotation=(0,1,0,1.57),translation=(-4.55,1.5,-2),
        children=[
        Shape(DEF='leftWindowOne',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(USE='windowApp'))]),
      Transform(translation=(-4.4,1.7,-1.4),
        children=[
        Shape(DEF='leftWindow1KnubOpen',
          geometry=Sphere(DEF='leftWindow1Knub',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='leftWindow1Clock'),
        PositionInterpolator(DEF='leftWindow1Pos',key=[0,0.5,1],keyValue=[(-4.55,1.5,-2),(-4.55,1.5,-2.25),(-4.55,1.5,-2.5)]),
        TouchSensor(DEF='leftWindow1Open',description='touch to open'),
        ROUTE(fromField='touchTime',fromNode='leftWindow1Open',toField='set_startTime',toNode='leftWindow1Clock'),
        ROUTE(fromField='fraction_changed',fromNode='leftWindow1Clock',toField='set_fraction',toNode='leftWindow1Pos'),
        ROUTE(fromField='value_changed',fromNode='leftWindow1Pos',toField='set_translation',toNode='leftWindow1')]),
      Transform(translation=(-4.4,1.3,-1.4),
        children=[
        Shape(DEF='leftWindow1KnubClose',
          geometry=Sphere(DEF='leftWindow1Knub2',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='leftWindow1Clock2'),
        PositionInterpolator(DEF='leftWindow1Pos2',key=[0,0.5,1],keyValue=[(-4.55,1.5,-2.5),(-4.55,1.5,-2.25),(-4.55,1.5,-2)]),
        TouchSensor(DEF='leftWindow1Close',description='touch to close'),
        ROUTE(fromField='touchTime',fromNode='leftWindow1Close',toField='set_startTime',toNode='leftWindow1Clock2'),
        ROUTE(fromField='fraction_changed',fromNode='leftWindow1Clock2',toField='set_fraction',toNode='leftWindow1Pos2'),
        ROUTE(fromField='value_changed',fromNode='leftWindow1Pos2',toField='set_translation',toNode='leftWindow1')]),
      Transform(DEF='leftsidewall2',rotation=(0,1,0,1.57),translation=(-4.5,2,-3.25),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='leftsidewall21',rotation=(0,1,0,1.57),translation=(-4.5,3,-4.5),
        children=[
        Shape(USE='part12')]),
      Transform(DEF='leftsidewall22',rotation=(0,1,0,1.57),translation=(-4.5,0.5,-4.5),
        children=[
        Shape(USE='part13')]),
      Transform(DEF='leftWindow2',rotation=(0,1,0,1.57),translation=(-4.55,1.5,-4.5),
        children=[
        Shape(DEF='leftWindowTwo',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(USE='windowApp'))]),
      Transform(translation=(-4.4,1.7,-3.9),
        children=[
        Shape(DEF='leftWindow2KnubOpen',
          geometry=Sphere(DEF='leftWindow2Knub',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='leftWindow2Clock'),
        PositionInterpolator(DEF='leftWindow2Pos',key=[0,0.5,1],keyValue=[(-4.55,1.5,-4.5),(-4.55,1.5,-4.75),(-4.55,1.5,-5)]),
        TouchSensor(DEF='leftWindow2Open',description='touch to open'),
        ROUTE(fromField='touchTime',fromNode='leftWindow2Open',toField='set_startTime',toNode='leftWindow2Clock'),
        ROUTE(fromField='fraction_changed',fromNode='leftWindow2Clock',toField='set_fraction',toNode='leftWindow2Pos'),
        ROUTE(fromField='value_changed',fromNode='leftWindow2Pos',toField='set_translation',toNode='leftWindow2')]),
      Transform(translation=(-4.4,1.3,-3.9),
        children=[
        Shape(DEF='leftWindow2KnubClose',
          geometry=Sphere(DEF='leftWindow2Knub2',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='leftWindow2Clock2'),
        PositionInterpolator(DEF='leftWindow2Pos2',key=[0,0.5,1],keyValue=[(-4.55,1.5,-5),(-4.55,1.5,-4.75),(-4.55,1.5,-4.5)]),
        TouchSensor(DEF='leftWindow2Close',description='touch to close'),
        ROUTE(fromField='touchTime',fromNode='leftWindow2Close',toField='set_startTime',toNode='leftWindow2Clock2'),
        ROUTE(fromField='fraction_changed',fromNode='leftWindow2Clock2',toField='set_fraction',toNode='leftWindow2Pos2'),
        ROUTE(fromField='value_changed',fromNode='leftWindow2Pos2',toField='set_translation',toNode='leftWindow2')]),
      Transform(DEF='leftsidewall3',rotation=(0,1,0,1.57),translation=(-4.5,2,-5.75),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='leftsidewall31',rotation=(0,1,0,1.57),translation=(-4.5,3,-7),
        children=[
        Shape(USE='part12')]),
      Transform(DEF='leftsidewall32',rotation=(0,1,0,1.57),translation=(-4.5,0.5,-7),
        children=[
        Shape(USE='part13')]),
      Transform(DEF='leftWindow3',rotation=(0,1,0,1.57),translation=(-4.55,1.5,-7),
        children=[
        Shape(DEF='leftWindowThree',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(USE='windowApp'))]),
      Transform(translation=(-4.4,1.7,-6.4),
        children=[
        Shape(DEF='leftWindow3KnubOpen',
          geometry=Sphere(DEF='leftWindow3Knub',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='leftWindow3Clock'),
        PositionInterpolator(DEF='leftWindow3Pos',key=[0,0.5,1],keyValue=[(-4.55,1.5,-7),(-4.55,1.5,-7.25),(-4.55,1.5,-7.5)]),
        TouchSensor(DEF='leftWindow3Open',description='touch to open'),
        ROUTE(fromField='touchTime',fromNode='leftWindow3Open',toField='set_startTime',toNode='leftWindow3Clock'),
        ROUTE(fromField='fraction_changed',fromNode='leftWindow3Clock',toField='set_fraction',toNode='leftWindow3Pos'),
        ROUTE(fromField='value_changed',fromNode='leftWindow3Pos',toField='set_translation',toNode='leftWindow3')]),
      Transform(translation=(-4.4,1.3,-6.4),
        children=[
        Shape(DEF='leftWindow3KnubClose',
          geometry=Sphere(DEF='leftWindow3Knub2',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='leftWindow3Clock2'),
        PositionInterpolator(DEF='leftWindow3Pos2',key=[0,0.5,1],keyValue=[(-4.55,1.5,-7.5),(-4.55,1.5,-7.25),(-4.55,1.5,-7)]),
        TouchSensor(DEF='leftWindow3Close',description='touch to close'),
        ROUTE(fromField='touchTime',fromNode='leftWindow3Close',toField='set_startTime',toNode='leftWindow3Clock2'),
        ROUTE(fromField='fraction_changed',fromNode='leftWindow3Clock2',toField='set_fraction',toNode='leftWindow3Pos2'),
        ROUTE(fromField='value_changed',fromNode='leftWindow3Pos2',toField='set_translation',toNode='leftWindow3')]),
      Transform(DEF='leftsidewall4',rotation=(0,1,0,1.57),translation=(-4.5,2,-8.25),
        children=[
        Shape(USE='part1')])]),
    Group(DEF='backside',
      children=[
      Transform(DEF='backsidewall1',translation=(-3.75,2,-9),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='backsidewall12',translation=(-2.5,3,-9),
        children=[
        Shape(USE='part12')]),
      Transform(DEF='backsidewall13',translation=(-2.5,0.5,-9),
        children=[
        Shape(USE='part13')]),
      Transform(DEF='backsidewall2',translation=(-1.25,2,-9),
        children=[
        Shape(USE='part1')]),
      Transform(DEF='backsidewall3',translation=(0,3,-9),
        children=[
        Shape(USE='part3')]),
      Transform(DEF='backDoor',center=(-0.5,0,0),translation=(0,1,-9),
        children=[
        Shape(USE='door'),
        Transform(translation=(0.4,0,-0.05),
          children=[
          Shape(DEF='backDoorknubOut',
            geometry=Sphere(DEF='backDoorKnub',radius=0.05),
            appearance=Appearance(USE='knub_ap')),
          TimeSensor(DEF='backDoorClock',cycleInterval=3),
          OrientationInterpolator(DEF='backDoorPathOpen',key=[0,0.34,0.68,1],keyValue=[(0,1,0,0),(0,1,0,0.7),(0,1,0,1.4),(0,1,0,2.1)]),
          TouchSensor(DEF='backDoorTouchOpen',description='touch to open'),
          ROUTE(fromField='touchTime',fromNode='backDoorTouchOpen',toField='set_startTime',toNode='backDoorClock'),
          ROUTE(fromField='fraction_changed',fromNode='backDoorClock',toField='set_fraction',toNode='backDoorPathOpen'),
          ROUTE(fromField='value_changed',fromNode='backDoorPathOpen',toField='set_rotation',toNode='backDoor')]),
        Transform(translation=(0.4,0,0.05),
          children=[
          Shape(USE='knubOut'),
          TimeSensor(DEF='backDoorClockClose',cycleInterval=2),
          OrientationInterpolator(DEF='backDoorPathClose',key=[0,0.34,0.68,1],keyValue=[(0,1,0,2.1),(0,1,0,1.4),(0,1,0,0.7),(0,1,0,0)]),
          TouchSensor(DEF='backDoorTouchClose',description='touch to close'),
          ROUTE(fromField='touchTime',fromNode='backDoorTouchClose',toField='set_startTime',toNode='backDoorClockClose'),
          ROUTE(fromField='fraction_changed',fromNode='backDoorClockClose',toField='set_fraction',toNode='backDoorPathClose'),
          ROUTE(fromField='value_changed',fromNode='backDoorPathClose',toField='set_rotation',toNode='backDoor')])]),
      Transform(DEF='backsidewall4',translation=(1.75,2,-9),
        children=[
        Shape(
          geometry=Box(size=(2.5,4,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='backwall41',translation=(3.25,0.75,-9),
        children=[
        Shape(
          geometry=Box(size=(0.5,1.5,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='backwall42',translation=(3.25,3,-9),
        children=[
        Shape(
          geometry=Box(size=(0.5,2,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='backwall5',translation=(4,2,-9),
        children=[
        Shape(
          geometry=Box(size=(1,4,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(DEF='backsideWindow1',translation=(-2.5,1.5,-9.05),
        children=[
        Shape(DEF='backWindow1',
          geometry=Box(size=(1,1,0.075)),
          appearance=Appearance(USE='windowApp'))]),
      Transform(translation=(-1.9,1.7,-8.9),
        children=[
        Shape(DEF='backWindow1KnubOpen',
          geometry=Sphere(DEF='backWindow1Knub',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='backWindow1Clock'),
        PositionInterpolator(DEF='backWindow1Pos',key=[0,0.5,1],keyValue=[(-2.5,1.5,-9.05),(-2.75,1.5,-9.05),(-3,1.5,-9.05)]),
        TouchSensor(DEF='backWindow1Open',description='touch to open'),
        ROUTE(fromField='touchTime',fromNode='backWindow1Open',toField='set_startTime',toNode='backWindow1Clock'),
        ROUTE(fromField='fraction_changed',fromNode='backWindow1Clock',toField='set_fraction',toNode='backWindow1Pos'),
        ROUTE(fromField='value_changed',fromNode='backWindow1Pos',toField='set_translation',toNode='backsideWindow1')]),
      Transform(translation=(-1.9,1.3,-8.9),
        children=[
        Shape(DEF='backWindow1KnubClose',
          geometry=Sphere(DEF='backWindow1Knub2',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='backWindow1Clock2'),
        PositionInterpolator(DEF='backWindow1Pos2',key=[0,0.5,1],keyValue=[(-3,1.5,-9.05),(-2.75,1.5,-9.05),(-2.5,1.5,-9.05)]),
        TouchSensor(DEF='backWindow1Close',description='touch to close'),
        ROUTE(fromField='touchTime',fromNode='backWindow1Close',toField='set_startTime',toNode='backWindow1Clock2'),
        ROUTE(fromField='fraction_changed',fromNode='backWindow1Clock2',toField='set_fraction',toNode='backWindow1Pos2'),
        ROUTE(fromField='value_changed',fromNode='backWindow1Pos2',toField='set_translation',toNode='backsideWindow1')]),
      Transform(DEF='backsideWindow2',translation=(3.25,1.75,-9.05),
        children=[
        Shape(DEF='backWindow2',
          geometry=Box(size=(0.5,0.5,0.075)),
          appearance=Appearance(USE='windowApp'))]),
      Transform(translation=(3.6,1.9,-8.9),
        children=[
        Shape(DEF='backWindow2KnubOpen',
          geometry=Sphere(DEF='backWindow2Knub',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='backWindow2Clock'),
        PositionInterpolator(DEF='backWindow2Pos',key=[0,0.5,1],keyValue=[(3.25,1.75,-9.05),(3.125,1.75,-9.05),(3,1.75,-9.05)]),
        TouchSensor(DEF='backWindow2Open',description='touch to open'),
        ROUTE(fromField='touchTime',fromNode='backWindow2Open',toField='set_startTime',toNode='backWindow2Clock'),
        ROUTE(fromField='fraction_changed',fromNode='backWindow2Clock',toField='set_fraction',toNode='backWindow2Pos'),
        ROUTE(fromField='value_changed',fromNode='backWindow2Pos',toField='set_translation',toNode='backsideWindow2')]),
      Transform(translation=(3.6,1.6,-8.9),
        children=[
        Shape(DEF='backWindow2KnubClose',
          geometry=Sphere(DEF='backWindow2Knub2',radius=0.05),
          appearance=Appearance(
            material=Material(),)),
        TimeSensor(DEF='backWindow2Clock2'),
        PositionInterpolator(DEF='backWindow2Pos2',key=[0,0.5,1],keyValue=[(3,1.75,-9.05),(3.125,1.75,-9.05),(3.25,1.75,-9.05)]),
        TouchSensor(DEF='backWindow2Close',description='touch to close'),
        ROUTE(fromField='touchTime',fromNode='backWindow2Close',toField='set_startTime',toNode='backWindow2Clock2'),
        ROUTE(fromField='fraction_changed',fromNode='backWindow2Clock2',toField='set_fraction',toNode='backWindow2Pos2'),
        ROUTE(fromField='value_changed',fromNode='backWindow2Pos2',toField='set_translation',toNode='backsideWindow2')]),
      Transform(DEF='bathroomDoor',center=(-0.5,0,0),rotation=(0,1,0,1.57),translation=(1.5,1,-6.75),
        children=[
        Shape(USE='door'),
        Transform(translation=(0.4,0,-0.05),
          children=[
          Shape(DEF='bathroomDoorknubOut',
            geometry=Sphere(DEF='bathroomDoorKnub',radius=0.05),
            appearance=Appearance(USE='knub_ap')),
          TimeSensor(DEF='bathroomDoorClock',cycleInterval=3),
          OrientationInterpolator(DEF='bathroomDoorPathOpen',key=[0,0.34,0.68,1],keyValue=[(0,1,0,1.57),(0,1,0,2.2),(0,1,0,2.9),(0,1,0,3.25)]),
          TouchSensor(DEF='bathroomDoorTouchOpen',description='touch to open'),
          ROUTE(fromField='touchTime',fromNode='bathroomDoorTouchOpen',toField='set_startTime',toNode='bathroomDoorClock'),
          ROUTE(fromField='fraction_changed',fromNode='bathroomDoorClock',toField='set_fraction',toNode='bathroomDoorPathOpen'),
          ROUTE(fromField='value_changed',fromNode='bathroomDoorPathOpen',toField='set_rotation',toNode='bathroomDoor')]),
        Transform(translation=(0.4,0,0.05),
          children=[
          Shape(USE='knubOut'),
          TimeSensor(DEF='bathroomDoorClockClose',cycleInterval=2),
          OrientationInterpolator(DEF='bathroomDoorPathClose',key=[0,0.34,0.68,1],keyValue=[(0,1,0,3.25),(0,1,0,2.9),(0,1,0,2.2),(0,1,0,1.57)]),
          TouchSensor(DEF='bathroomDoorTouchClose',description='touch to close'),
          ROUTE(fromField='touchTime',fromNode='bathroomDoorTouchClose',toField='set_startTime',toNode='bathroomDoorClockClose'),
          ROUTE(fromField='fraction_changed',fromNode='bathroomDoorClockClose',toField='set_fraction',toNode='bathroomDoorPathClose'),
          ROUTE(fromField='value_changed',fromNode='bathroomDoorPathClose',toField='set_rotation',toNode='bathroomDoor')])])]),
    Group(DEF='floorandceiling',
      children=[
      Transform(DEF='floor',translation=(0,0.1,-4.5),
        children=[
        Shape(DEF='floorshape',
          geometry=Box(size=(9,0.1,9)),
          appearance=Appearance(DEF='floorapp',
            material=Material(diffuseColor=(0.9,0.7,0.6)))),
        Transform(translation=(0,3.8,0),
          children=[
          Shape(USE='floorshape')])]),
      Transform(DEF='roof',translation=(0,4,-4.5),
        children=[
        Inline(url=["Roof.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Roof.x3d","Roof.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Roof.wrl"])])]),
    Viewpoint(DEF='point1',description='diagonal',orientation=(-0.68,-0.72,-0.13,0.52),position=(-10,8,25)),
    Transform(
      children=[
      Background(DEF='backgr',groundAngle=[1.309,1.570796],groundColor=[(0.1,0.1,0),(0.4,0.25,0.2),(0.6,0.6,0.6)],skyAngle=[1.309,1.571],skyColor=[(0,0.2,0.7),(0,0.5,1),(1,1,1)])]),
    Viewpoint(description='front',position=(0,3,10)),
    Viewpoint(description='inside',orientation=(0,1,0,3.14),position=(2,1.5,-5)),
    Group(
      children=[
      Transform(DEF='lawnAndTree',rotation=(0,1,0,-0.785),
        children=[
        Inline(url=["Tree.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Tree.x3d","Tree.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Tree.wrl"])]),
      Transform(DEF='chair1',rotation=(0,1,0,1.3),scale=(0.5,0.5,0.5),translation=(-3.5,0.1,-2),
        children=[
        Inline(DEF='chair',url=["Chair.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Chair.x3d","Chair.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Chair.wrl"])]),
      Transform(DEF='chair2',rotation=(0,1,0,-1.3),scale=(0.5,0.5,0.5),translation=(-2,0.1,-2),
        children=[
        Inline(USE='chair')]),
      Transform(DEF='table',scale=(0.5,0.5,0.5),translation=(-2.75,0.2,-2),
        children=[
        Inline(url=["Table.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Table.x3d","Table.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Table.wrl"])])]),
    Transform(DEF='lawn',rotation=(1,0,0,1.57),translation=(0,0,-4.5),
      children=[
      Shape(DEF='garden',
        geometry=Box(size=(30,30,0.1)),
        appearance=Appearance(
          material=Material(diffuseColor=(0.2,0.8,0.1))))]),
    Group(DEF='innerWalls',
      children=[
      Transform(translation=(-2.75,2,-5.5),
        children=[
        Shape(DEF='left',
          geometry=Box(size=(3.5,4,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(translation=(2.75,2,-5.5),
        children=[
        Shape(USE='left')]),
      Transform(rotation=(0,1,0,1.57),translation=(-1,3,-7.25),
        children=[
        Shape(
          geometry=Box(size=(3.5,2,0.1)),
          appearance=Appearance(USE='wall_ap')),
        Transform(translation=(1.125,-2,0),
          children=[
          Shape(
            geometry=Box(size=(1.25,2,0.1)),
            appearance=Appearance(USE='wall_ap'))]),
        Transform(translation=(-1.125,-2,0),
          children=[
          Shape(
            geometry=Box(size=(1.25,2,0.1)),
            appearance=Appearance(USE='wall_ap'))])]),
      Transform(rotation=(0,1,0,1.57),translation=(1,3,-7.25),
        children=[
        Shape(DEF='up',
          geometry=Box(size=(3.5,2,0.1)),
          appearance=Appearance(USE='wall_ap')),
        Transform(translation=(1.125,-2,0),
          children=[
          Shape(
            geometry=Box(size=(1.25,2,0.1)),
            appearance=Appearance(USE='wall_ap'))]),
        Transform(translation=(-1.125,-2,0),
          children=[
          Shape(
            geometry=Box(size=(1.25,2,0.1)),
            appearance=Appearance(USE='wall_ap'))])]),
      Transform(translation=(-2.75,3,-3.5),
        children=[
        Shape(USE='up')]),
      Transform(translation=(-2.75,0.45,-3.75),
        children=[
        Shape(
          geometry=Box(size=(3.5,0.9,0.5)),
          appearance=Appearance(USE='wall_ap')),
        Transform(translation=(0,0.5,0),
          children=[
          Shape(
            geometry=Box(size=(3.5,0.1,0.5)),
            appearance=Appearance(
              texture=ImageTexture(USE='wood'),
              material=Material(diffuseColor=(0.8,0.5,0))))])]),
      Transform(rotation=(0,1,0,1.57),translation=(-1,3,-4.5),
        children=[
        Shape(
          geometry=Box(size=(2,2,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(rotation=(0,1,0,1.57),translation=(-1,1,-5.25),
        children=[
        Shape(
          geometry=Box(size=(0.5,2,0.1)),
          appearance=Appearance(USE='wall_ap'))]),
      Transform(translation=(-4,0,-4.75),
        children=[
        Shape(
          appearance=Appearance(USE='wall_ap'),
          geometry=Extrusion(crossSection=[(-0.5,-0.75),(0.5,-0.75),(0.5,0.75),(-0.5,0.75),(-0.5,-0.75)],spine=[(0,0,0),(0,0.9,0)])),
        Transform(rotation=(0,1,0,1.57),scale=(0.5,0.5,0.5),translation=(0.07,0.78,0),
          children=[
          Inline(DEF='BASIN',url=["Basin.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Basin.x3d","Basin.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Basin.wrl"])]),
        Transform(rotation=(0,1,0,1.57),translation=(0.5,0.1,0.02),
          children=[
          Inline(DEF='Cover',url=["Cover.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Cover.x3d","Cover.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Cover.wrl"])])]),
      Transform(scale=(0.5,0.8,0.5),translation=(-1.2,0.2,-4.9),
        children=[
        Inline(url=["Refrigerator.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Refrigerator.x3d","Refrigerator.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Refrigerator.wrl"])]),
      Transform(rotation=(0,1,0,1.57),scale=(0.3,0.3,0.3),translation=(-2.5,0.1,-8.3),
        children=[
        Inline(url=["BedFrame.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/BedFrame.x3d","BedFrame.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/BedFrame.wrl"]),
        Transform(rotation=(0,1,0,1.57),scale=(3,3,3.5),translation=(1.75,1,0),
          children=[
          Inline(url=["Bed.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Bed.x3d","Bed.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Bed.wrl"]),
          Transform(rotation=(0,1,0,1.57),scale=(0.1,0.1,0.1),translation=(0.5,0.5,-2),
            children=[
            Transform(rotation=(1,0,0,1.57),translation=(-12,-1,10),
              children=[
              Inline(url=["Pillow.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Pillow.x3d","Pillow.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Pillow.wrl"])])])])]),
      Transform(rotation=(0,1,0,-1.57),translation=(3.3,0.2,-6.1),
        children=[
        Inline(url=["Bathtub.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Bathtub.x3d","Bathtub.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Bathtub.wrl"])]),
      Transform(rotation=(0,1,0,-1.57),translation=(1.8,0.1,-8.5),
        children=[
        Transform(rotation=(0,1,0,1.57),scale=(0.5,0.5,0.5),translation=(0.07,0.78,0),
          children=[
          Inline(USE='BASIN')]),
        Transform(rotation=(0,1,0,1.57),translation=(0.5,0.1,0.02),
          children=[
          Inline(USE='Cover')]),
        Transform(rotation=(0,1,0,1.57),translation=(0.05,0.5,-0.7),
          children=[
          Shape(
            geometry=Box(size=(0.1,0.8,0.9)),
            appearance=Appearance(
              texture=ImageTexture(USE='wood'),
              material=Material(diffuseColor=(0.8,0.6,0))))]),
        Transform(rotation=(0,1,0,1.57),translation=(0.05,0.5,0.725),
          children=[
          Shape(
            geometry=Box(size=(0.1,0.8,0.9)),
            appearance=Appearance(
              texture=ImageTexture(USE='wood'),
              material=Material(diffuseColor=(0.8,0.6,0))))])]),
      Transform(rotation=(0,0,1,1.57),scale=(0.25,0.25,0.25),translation=(3.5,0.25,-8.2),
        children=[
        Inline(url=["Toilet.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Toilet.x3d","Toilet.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Toilet.wrl"])]),
      Transform(scale=(0.6,0.7,0.5),translation=(-2.2,0.2,-4.9),
        children=[
        Inline(url=["Oven.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Oven.x3d","Oven.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Oven.wrl"])]),
      Transform(rotation=(0,1,0,3.14),scale=(0.7,0.7,0.7),translation=(1.5,0.2,-2),
        children=[
        Inline(url=["Sofa.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Sofa.x3d","Sofa.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Sofa.wrl"])]),
      Transform(rotation=(0,1,0,1.57),scale=(0.7,0.7,0.7),translation=(1.5,0.2,-4.2),
        children=[
        Inline(url=["Couch.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Couch.x3d","Couch.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Couch.wrl"])]),
      Transform(rotation=(0,1,0,-1.57),scale=(0.7,0.5,0.7),translation=(2.7,0.2,-3.5),
        children=[
        Inline(url=["CoffeeTable.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/CoffeeTable.x3d","CoffeeTable.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/CoffeeTable.wrl"])]),
      Transform(translation=(3.75,0,6.75),
        children=[
        Inline(DEF='fence',url=["Fence.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Fence.x3d","Fence.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/Fence.wrl"])]),
      Comment('inadvertant deletion here?'),
      Transform(translation=(-11.25,0,6.75),
        children=[
        Inline(USE='fence')]),
      Transform(rotation=(0,1,0,1.57),translation=(-11.375,0,6.625),
        children=[
        Inline(USE='fence')]),
      Transform(rotation=(0,1,0,1.57),translation=(-11.375,0,-0.875),
        children=[
        Inline(USE='fence')]),
      Transform(rotation=(0,1,0,1.57),translation=(-11.375,0,-8.375),
        children=[
        Inline(USE='fence')]),
      Transform(translation=(-11.25,0,-15.875),
        children=[
        Inline(USE='fence')]),
      Transform(translation=(-3.75,0,-15.875),
        children=[
        Inline(USE='fence')]),
      Transform(translation=(3.75,0,-15.875),
        children=[
        Inline(USE='fence')]),
      Transform(rotation=(0,1,0,-1.57),translation=(11.375,0,-15.875),
        children=[
        Inline(USE='fence')]),
      Transform(rotation=(0,1,0,-1.57),translation=(11.375,0,-8.375),
        children=[
        Inline(USE='fence')]),
      Transform(rotation=(0,1,0,-1.57),translation=(11.375,0,-0.875),
        children=[
        Inline(USE='fence')]),
      Transform(translation=(-3.75,0,6.75),
        children=[
        Inline(url=["FenceGate.x3d","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/FenceGate.x3d","FenceGate.wrl","https://www.web3d.org/x3d/content/examples/Savage/Buildings/HouseBarisAktop/FenceGate.wrl"])])]),
    Viewpoint(description='fromLeft',orientation=(0,1,0,-1.57),position=(-15,4,-4.5)),
    Viewpoint(description='fromBack',orientation=(0,1,0,3.14),position=(0,4,-20)),
    Viewpoint(description='fromRight',orientation=(0,1,0,1.57),position=(15,4,-4.5)),
    Viewpoint(description='tableChairs',orientation=(-0.44,0.9,0.06,0.30),position=(-2,1.5,-0.2)),
    Viewpoint(description='livingRoom',orientation=(-0.25,0.95,0.17,1.27),position=(4,3,-0.2)),
    Viewpoint(description='bedRoom',orientation=(0,1,0,0.83),position=(-1,1.5,-5.8)),
    Viewpoint(description='kitchen',orientation=(-0.12,0.99,0.12,1.59),position=(-2,1.5,-4.75)),
    Viewpoint(description='refrigerator',orientation=(1,0,0,-0.4),position=(-1.5,2,-3)),
    Viewpoint(description='bathroom',orientation=(-0.02,-1,-0.06,2.36),position=(1.5,1.75,-8)),
    Viewpoint(description='bathroom basin',orientation=(-0.68,0.72,0.11,0.44),position=(2,1.45,-6.5)),
    Viewpoint(description='bathroom toilet',orientation=(-0.32,-0.93,-0.20,1.18),position=(1.5,1.5,-7)),
    Viewpoint(description='livingroom2',fieldOfView=1,orientation=(-0.22,-0.94,-0.25,1.77),position=(-0.5,2,-3.5)),
    Viewpoint(description='corridor',fieldOfView=1,orientation=(0,1,0,-1.57),position=(-1,1.5,-7.5)),
    Viewpoint(description='gate',position=(0,1.5,12))])
)

### X3D model conversion complete ###

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

print('Self-test diagnostics for House.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 House.py load and self-test diagnostics complete.")
