<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersive' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'>
  <head>
    <meta content='UltraHighResolutionBuildingPrototypes.x3d' name='title'/>
    <meta content='Don Brutzman' name='creator'/>
    <meta content='2 November 2003' name='created'/>
    <meta content='20 October 2019' name='modified'/>
    <meta content='Prototypes for UHRB building construction.' name='description'/>
    <meta content='Incompatible with VRML 97 due to Script fields with accessType=inputOutput (exposedField).' name='warning'/>
    <meta content='UhrbSchema1.0.xsd' name='reference'/>
    <meta content='https://www.web3d.org/x3d/content/examples/Savage/Buildings/UHRB/UhrbSchema1.0.xsd' name='reference'/>
    <meta content='UhrbSchemaDocumentation/UhrbSchema1.0.html' name='reference'/>
    <meta content='https://www.web3d.org/x3d/content/examples/Savage/Buildings/UHRB/UhrbSchemaDocumentation/UhrbSchema1.0.html' name='reference'/>
    <meta content='https://www.web3d.org/x3d/content/examples/Savage/Buildings/UHRB/UltraHighResolutionBuildingPrototypes.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'/>
  </head>
  <Scene>
    <!-- ========================= -->
    <ProtoDeclare name='Attribute'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Attribute.' name='label' type='SFString'/>
        <field accessType='initializeOnly' name='value' type='SFString'/>
      </ProtoInterface>
      <ProtoBody>
        <Group>
          <WorldInfo>
            <IS>
              <connect nodeField='title' protoField='label'/>
            </IS>
          </WorldInfo>
          <WorldInfo>
            <IS>
              <connect nodeField='title' protoField='value'/>
            </IS>
          </WorldInfo>
        </Group>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Aperture'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Aperture.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='Coordinate node with [3..n] coordinates' name='polygon' type='SFNode'>
          <Coordinate point='0 0 0'/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..n]' name='attributes' type='MFNode'>
          <ProtoInstance name='Attribute'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate when initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Ceiling'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Ceiling.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='[0..n]' name='attributes' type='SFNode'>
          <ProtoInstance name='Attribute'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate whether initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Edge'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Edge.' name='name' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='[2]' name='vertices' type='SFNode'>
          <Coordinate/>
        </field>
        <field accessType='initializeOnly' appinfo='zero-based index of the associated wall -1 for phantom edges' name='wallIndex' type='SFInt32' value='-1'/>
        <field accessType='outputOnly' appinfo='Indicate when initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Fixture'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Fixture.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='single coordinate value' name='center' type='SFNode'>
          <Coordinate/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..n]' name='attributes' type='SFNode'>
          <ProtoInstance name='Attribute'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate whether initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Floor'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Floor.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='[0..n]' name='attributes' type='SFNode'>
          <ProtoInstance name='Attribute'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate whether initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Room'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Room.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='[3..n]' name='edgeIndex' type='SFInt32' value='-1'/>
        <field accessType='initializeOnly' appinfo='[0..1]' name='floor' type='SFNode'>
          <ProtoInstance name='Floor'/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..1]' name='ceiling' type='SFNode'>
          <ProtoInstance name='Ceiling'/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..n]' name='attributes' type='SFNode'>
          <ProtoInstance name='Attribute'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate when initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Stair'>
      <ProtoInterface>
        <!-- has some extra fields for possible consistency with an object-oriented interface hierarchy. -->
        <field accessType='initializeOnly' appinfo='Identifying name for this Staircase.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' name='floorLevelIndex' type='SFInt32' value='-1'/>
        <field accessType='initializeOnly' name='roomIndex' type='SFInt32' value='-1'/>
        <field accessType='outputOnly' appinfo='Indicate whether initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Staircase'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Staircase.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' name='access' type='SFInt32' value='-1'/>
        <field accessType='initializeOnly' name='bottomFloorLevelIndex' type='SFInt32' value='-1'/>
        <field accessType='initializeOnly' name='topFloorLevelIndex' type='SFInt32' value='-1'/>
        <!-- variations go here for U-shape or spiral staircase. -->
        <field accessType='initializeOnly' appinfo='[1..n]' name='stairs' type='MFNode'>
          <ProtoInstance name='Stair'/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..n]' name='attributes' type='SFNode'>
          <ProtoInstance name='Attribute'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate whether initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Wall'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Wall.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='Coordinate node with [3..n] coordinates' name='polygon' type='SFNode'>
          <Coordinate point='0 0 0'/>
        </field>
        <field accessType='inputOutput' appinfo='[0..n]' name='apertures' type='MFNode'>
          <ProtoInstance name='Aperture'/>
        </field>
        <field accessType='inputOutput' appinfo='[0..n]' name='attributes' type='MFNode'>
          <ProtoInstance name='Attribute'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate when initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <!-- The following prototypes are not in alphabetic order because they depend on prior definition of other prototypes. -->
    <!-- ========================= -->
    <ProtoDeclare name='Roof'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this Room.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' name='zOffset' type='SFFloat' value='0.0'/>
        <field accessType='initializeOnly' appinfo='[3..n]' name='edges' type='MFNode'>
          <ProtoInstance name='Edge'/>
        </field>
        <field accessType='initializeOnly' appinfo='[3..n]' name='walls' type='MFNode'>
          <ProtoInstance name='Wall'/>
        </field>
        <field accessType='initializeOnly' appinfo='[1..n]' name='rooms' type='MFNode'>
          <ProtoInstance name='Ceiling'/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..n]' name='fixtures' type='MFNode'>
          <ProtoInstance name='Fixture'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate when initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='FloorLevel'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name for this FloorLevel.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' name='zOffset' type='SFFloat' value='0.0'/>
        <field accessType='initializeOnly' appinfo='[3..n]' name='edges' type='MFNode'>
          <ProtoInstance name='Edge'/>
        </field>
        <field accessType='initializeOnly' appinfo='[3..n]' name='walls' type='MFNode'>
          <ProtoInstance name='Wall'/>
        </field>
        <field accessType='initializeOnly' appinfo='[1..n]' name='rooms' type='MFNode'>
          <ProtoInstance name='Room'/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..n]' name='fixtures' type='MFNode'>
          <ProtoInstance name='Fixture'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate when initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <ProtoDeclare name='Uhrb'>
      <ProtoInterface>
        <field accessType='initializeOnly' appinfo='Identifying name of this UHRB Building.' name='name' type='SFString'/>
        <field accessType='initializeOnly' name='version' type='SFString' value='15'/>
        <field accessType='initializeOnly' name='componentLabel' type='SFString'/>
        <field accessType='initializeOnly' appinfo='Description info for this construction.' name='description' type='MFString'/>
        <field accessType='initializeOnly' appinfo='contains single Coordinate node of [3..n] sequential coordinates.' name='footprint' type='SFNode'>
          <Coordinate/>
        </field>
        <field accessType='initializeOnly' appinfo='contains [1..n] Coordinate node of [3..n] sequential coordinates each.' name='roofline' type='SFNode'>
          <Coordinate/>
        </field>
        <field accessType='initializeOnly' appinfo='[1..n]' name='floorLevels' type='MFNode'>
          <ProtoInstance name='FloorLevel'/>
        </field>
        <field accessType='initializeOnly' name='roof' type='SFNode'>
          <ProtoInstance name='Roof'/>
        </field>
        <field accessType='initializeOnly' appinfo='[0..n]' name='staircases' type='MFNode'>
          <ProtoInstance name='Staircase'/>
        </field>
        <field accessType='outputOnly' appinfo='Indicate when initialization complete.' name='built' type='SFBool'/>
      </ProtoInterface>
      <ProtoBody>
        <Group/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ========================= -->
    <Viewpoint description='UltraHighResolutionBuilding Prototypes' position='0 0 12'/>
    <Background groundAngle='1.57' groundColor='0.6 0.9 0.6 0.6 0.9 0.6' skyColor='0.6 0.6 0.9'/>
    <Anchor description='UltraHighResolutionBuilding Example' parameter='"target=_blank"' url='"Hospital.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Buildings/UHRB/Hospital.wrl" "Hospital.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Buildings/UHRB/Hospital.x3d"'>
      <Shape>
        <Text string='"UHRB Prototypes" "is a prototype definition file" "" "Click this text to see" "UHRB Example"'>
          <FontStyle justify='"MIDDLE" "MIDDLE"'/>
        </Text>
        <Appearance>
          <Material diffuseColor='0.2 0.2 0.8'/>
        </Appearance>
      </Shape>
    </Anchor>
  </Scene>
</X3D>