<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "https://www.web3d.org/specifications/x3d-4.0.dtd">
<X3D profile='Immersive' version='4.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.0.xsd'>
  <head>
    <meta content='ECMAScriptSaiCreateNodes.x3d' name='title'/>
    <meta content='Java Scene Authoring Interface (JSAI) scene and source code example that show using createX3DFromString to create nodes.' name='description'/>
    <meta content='X3D Working Group' name='creator'/>
    <meta content='23 February 2005' name='created'/>
    <meta content='28 September 2025' name='modified'/>
    <meta content='https://www.web3d.org/files/specifications/19777-1/V3.3/Part1/X3D_ECMAScript.html' name='reference'/>
    <meta content='X3D language bindings, ISO/IEC 19777-1, Part 1: ECMAScript, B.3 Create nodes' name='specificationSection'/>
    <meta content='https://www.web3d.org/files/specifications/19777-1/V3.3/Part1/examples.html#CreateNodes' name='specificationUrl'/>
    <meta content='X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit' name='generator'/>
    <meta content='https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/ECMAScriptSaiCreateNodes.x3d' name='identifier'/>
    <meta content='../license.html' name='license'/>
  </head>
  <Scene>
    <WorldInfo title='ECMAScriptSaiCreateNodes.x3d'/>
    <Transform DEF='HOLDER' translation='-2 0 0'/>
    <Script DEF='SC'>
      <field accessType='outputOnly' name='children' type='MFNode'/>
      <![CDATA[
ecmascript:
function initialize() {
    // Create nodes directly in the parent scene
    shape = Browser.currentScene.createNode('Shape');
    box = Browser.currentScene.createNode('Box');
    shape.geometry = box;
    Browser.currentScene.RootNodes[0] = shape;

    // Create children using the createX3DFromString service
    vrmlCmd = 'PROFILE Interchange  Shape { geometry Sphere{} }'
    tmpScene = Browser.createX3DFromString(vrmlCmd);
    nodes = tmpScene.rootNodes;

    // Nodes must be removed before adding to another scene
    for(i=0; i < nodes.length; i++) {
        tmpScene.removeRootNode(nodes[i]);
    }
    children = nodes;
}
]]>
    </Script>
    <ROUTE fromField='children' fromNode='SC' toField='children' toNode='HOLDER'/>
  </Scene>
</X3D>