<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd">
<X3D profile='Immersive' version='3.1' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.1.xsd'>
  <head>
    <meta content='CreateVrmlFromStringRandomBoxes.x3d' name='title'/>
    <meta content='Sample world constructed in a Script node using the EcmaScript Browser call createVrmlFromString.' name='description'/>
    <meta content='Vincent Gardet' name='creator'/>
    <meta content='Curt Blais' name='translator'/>
    <meta content='Don Brutzman' name='needless meddling'/>
    <meta content='23 April 2002' name='created'/>
    <meta content='4 May 2007' name='modified'/>
    <meta content='CreateX3dFromStringRandomSpheres.x3d' name='reference'/>
    <meta content='CreateVrmlFromStringRandomBoxes.png' name='image'/>
    <meta content='See CreateVrmlFromString tutorial at' name='reference'/>
    <meta content='http://www.gardet.nom.fr/vrmlcity/tut_cvfs.htm' name='reference'/>
    <meta content='create VRML from string, javascript' name='subject'/>
    <meta content='http://www.web3d.org/x3d/content/examples/Basic/course/CreateVrmlFromStringRandomBoxes.x3d' name='identifier'/>
    <meta content='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit' name='generator'/>
    <meta content='../license.html' name='license'/>
  </head>
  <Scene>
    <NavigationInfo avatarSize='0.1 1.6 2.0' headlight='false' speed='5' type='"EXAMINE" "WALK" "ANY"'/>
    <Background skyAngle='1.1 1.57' skyColor='.3 .3 1 .4 .4 1 .7 .7 .9'/>
    <DirectionalLight direction='0 -.5 -1' intensity='1'/>
    <DirectionalLight direction='-1 -.5 .5' intensity='.9'/>
    <DirectionalLight direction='1 -.5 .5' intensity='.8'/>
    <Viewpoint description='Interaction view' position='50 1.6 150'/>
    <Viewpoint description='Plan (top-down) view' orientation='1 0 0 -1.54' position='50 200 50'/>
    <Shape>
      <Appearance>
        <Material diffuseColor='.3 .3 1' transparency='0.5'/>
      </Appearance>
      <Box size='1000 0.01 1000'/>
    </Shape>
    <Transform translation='50 1.6 140'>
      <Billboard axisOfRotation='0 1 0'>
        <Shape>
          <Appearance>
            <Material diffuseColor='0.1 0.3 0.2' emissiveColor='0.3 0.6 0.9'/>
          </Appearance>
          <Text string='"Ten random boxes" "computed at runtime"'>
            <FontStyle justify='"MIDDLE" "MIDDLE"'/>
          </Text>
        </Shape>
        <TouchSensor DEF='TouchText' description='Touch text to recompute random boxes'/>
        <!-- Transparent Box makes the text much more accessible/clickable -->
        <Shape>
          <Box size='8 2 0.1'/>
          <Appearance>
            <Material transparency='1'/>
          </Appearance>
        </Shape>
      </Billboard>
    </Transform>
    <!-- ROOT is used at initialize time as parent for randomly generated Shape children -->
    <Group DEF='HoldsAutogeneratedContent'/>
    <Script DEF='BoxGeneratorScript' directOutput='true'>
      <field accessType='initializeOnly' name='ModifiableExternalNode' type='SFNode'>
        <Group USE='HoldsAutogeneratedContent'/>
      </field>
      <field accessType='inputOnly' name='recompute' type='SFBool'/>
      <![CDATA[ecmascript:

function R () {
	return Math.random();
}
function recompute (isActive) {
	if (isActive==true) initialize();
}

function initialize() {
  for (i=0; i < 10; i++) {
    rand1 = 100*R();
    rand2 = 100*R();
    rand3 = 20*R();
    rand4 = 40*R();
    rand5 = 20*R();
    sceneString ='Transform {                                                    \n' +
                      '   translation ' + rand1 + ' 0 ' + rand2 + ' \n' +
                      '   children [                                            \n' +
                      '           Shape {                                       \n' +
                      '                   appearance Appearance {               \n' +
                      '                      material Material {                \n' +
                      '                         diffuseColor ' + R() + ' ' + R() + ' ' + R() + '\n' +
                      '                      }                                  \n' +
                      '                   }                                     \n' +
                      '                   geometry Box {                        \n' +
                      '                      size ' + rand3 + ' ' + rand4 + ' ' + rand5 + '\n' +
                      '                   }                                     \n' +
                      '           }                                             \n' +
                      '   ]                                                     \n' +
                      '}                                                        \n' +
                      '#########################################################\n';
       Browser.print (sceneString);
       newNode = Browser.createVrmlFromString(sceneString);
//     newNode = Browser.createX3dFromString(sceneString);
       ModifiableExternalNode.children[i] = newNode[0];
  }
}]]>
    </Script>
    <ROUTE fromField='isActive' fromNode='TouchText' toField='recompute' toNode='BoxGeneratorScript'/>
  </Scene>
</X3D>
