<div dir="auto">Joe,  I’m pretty sure I’d have to keep/use my own DOM tree, which is possible, but why is there SAI?</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 24, 2021 at 3:51 PM Joseph D Williams <<a href="mailto:joedwil@earthlink.net">joedwil@earthlink.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div lang="EN-US" link="blue" vlink="#954F72" style="word-wrap:break-word"><div class="m_1133648766508955019WordSection1"><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">John, here is a reference for an older version of SAI abstract. Note that you can output the user code as a string, but it is a browser feature that would enable you to output the processed data, Like if you had a transform for an item of geometry and you asked for the internal value of the scaled and translated points after the transform operation, you may not be able to get directly. You may have to determine the intended points by doing the math. Of course if you have the user code, this is fairly straightforward.  </p><p class="MsoNormal"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_1133648766508955019MsoListParagraph" style="margin-left:0in">Now I understand why no one wanted to touch VRML.<u></u><u></u></li></ul><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Don’t burn your fingers using a real live scenegraph … </p><p class="MsoNormal">Sometimes the printed spec will reveal some truth. Have you looked at the spec to see  what is actually available?</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Thanks,</p><p class="MsoNormal">Joe</p><p><span style="font-size:13.5pt;font-family:"Times New Roman",serif;color:black">20070301 04/25 20080225 0721 1123 1213 (75-2)<u style="font-family:"Times New Roman",serif"></u><u style="font-family:"Times New Roman",serif"></u></span></p><p class="MsoNormal"><a href="http://www.web3d.org/x3d/specifications/ISO-IEC-19775-2.2-X3D-SceneAccessInterface/index.html" title="*View SAI Abstract Standard" target="_blank"><span style="font-size:13.5pt;font-family:"Times New Roman",serif">*<b style="font-family:"Times New Roman",serif">View SAI Abstract Standard</b></span></a><u></u><u></u></p><p><span style="font-size:13.5pt;font-family:"Times New Roman",serif;color:black">The X3D Abstract standard, Part 2, describes the X3D Scene Access Interface (SAI) that provides 'internal' and 'external' program access to the X3D browser and to the current scene. Like 19975 Part 1, the interfaces are described in a form that is independent of the actual implementation language/platform. This is my quick reference for the abstract SAI.<u style="font-family:"Times New Roman",serif"></u><u style="font-family:"Times New Roman",serif"></u></span></p><p class="MsoNormal" style="font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;word-spacing:0px"><img border="0" src="cid:17b7a06a60de2117c8c1" style="width:667px;max-width:100%"><u></u><u></u></p><pre style="margin-left:11.25pt;line-height:12pt;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;word-spacing:0px;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">TheFinalDetail = <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  SAIBrowserRef.SAIExecutionContext.SAINode.SAIField.SAIFieldValue;<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">X3D browser 'external' events default = <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">* external event becomes internal event as received; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  each with new internal timestamp, thus new cascade <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">* external events buffered between beginUpdate/endUpdate become internal events; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  all have same internal timestamp, thus same cascade  <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">X3D browser 'internal' events default = <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">* initial output-capable field change event sets timestamp for resulting cascade <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">* script output event(s) sent with initial timestamp when script completes<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  beginUpdate when script starts; endUpdate when script complete<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">* script directOutput event(s) sent as set; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  (separate from current cascade, directOutput does not initiate new cascade)<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode.SAIField.SAIFieldValue lifecycle<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><table border="0" cellspacing="3" cellpadding="0" style="margin-left:11.25pt"><tbody><tr><td style="padding:0.75pt"><p class="MsoNormal" align="center" style="text-align:center"><b>Field type</b><b><u></u><u></u></b></p></td><td style="padding:0.75pt"><p class="MsoNormal" align="center" style="text-align:center"><b>Creation<u></u><u></u></b></p></td><td style="padding:0.75pt"><p class="MsoNormal" align="center" style="text-align:center"><b>Setup<u></u><u></u></b></p></td><td style="padding:0.75pt"><p class="MsoNormal" align="center" style="text-align:center"><b>Realized<u></u><u></u></b></p></td><td style="padding:0.75pt"><p class="MsoNormal" align="center" style="text-align:center"><b>Disposed<u></u><u></u></b></p></td></tr><tr><td style="padding:0.75pt"><p class="MsoNormal">initializeOnly<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">readable/writable<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td></tr><tr><td style="padding:0.75pt"><p class="MsoNormal">inputOnly<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">writable<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td></tr><tr><td style="padding:0.75pt"><p class="MsoNormal">outputOnly<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">readable<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td></tr><tr><td style="padding:0.75pt"><p class="MsoNormal">inputOutput<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">readable/writable<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">readable/writable<u></u><u></u></p></td><td style="padding:0.75pt"><p class="MsoNormal">None<u></u><u></u></p></td></tr></tbody></table><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          External Browser services<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">createBrowser(SAIParameterList, SAIPropertyList);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  create X3D browser instance  <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  return new SAIBrowserApp<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">getBrowser(SAIParameterList); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  return SAIBrowserRef <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">updateControl(SAIBrowserRef, SAIAction); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = BeginUpdate|EndUpdate<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dispose(SAIBrowserRef); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> no further interest; X3D browser returns SAI_Browser_Shutdown event<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBoolean = setBrowserOption(SAIBrowserRef, SAIString, SAIObject); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> set defined Browser options <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dispose(SAIExecutionContext); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> no further interest; X3D browser may reclaim resources consumed by this execution context.<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">prepareEvents; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  called every frame; evaluate directOutput(s), evaluate cascade(s) <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">eventsProcessed(SAIBrowserRef); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  current event cascade processing for this node is complete; please update scene graph <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">shutdown; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  user code is no longer functional or executed<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Internal Browser services<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  The main containing scene, each proto instance, <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  and each inline instance is a distinct and independent <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  execution context in the current scene graph. <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBrowserName = getName(SAIBrowserRef); name of X3D browser<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBrowserVersion = getVersion(SAIBrowserRef); version of X3D browser<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINavSpeed = getCurrentSpeed(SAIBrowserRef, SAILayerID); navigation speed <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFrameRate = getCurrentFrameRate(SAIBrowserRef); current frame display rate <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIProfileDeclaration[s] = getSupportedProfiles(SAIBrowserRef); list of supported profiles <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIProfileDeclaration = getProfile(SAIBrowserRef, SAIString); declaration of named profile<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIComponentDeclaration[s] = getSupportedComponents(SAIBrowserRef); list of supported components<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIComponentDeclaration = getComponent(SAIBrowserRef, SAIComponent); declaration of the named component<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIExecutionContext = getExecutionContext(SAIBrowserRef); current execution context<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScene = createScene(SAIBrowserRef, [SAIProfileDeclaration], [SAIComponentDeclaration]s); creates new empty scene  <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">replaceWorld(SAIBrowserRef, SAIScene); replace current scene with new scene<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScene = importDocument(SAIBrowserRef, DOMNode); import W3C DOM string, return X3D syntax<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">loadURL(SAIBrowserRef, SAIURL [SAIURL]s, SAIPropertyList); replace current scene with new X3D scene <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">setDescription(SAIBrowserRef, SAIString); set new scene description title<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScene = createX3DFromString(SAIBrowserRef, SAIString); process string, return X3D syntax <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScene = createX3DFromStream(SAIBrowserRef, SAIStream); process stream, return X3D syntax<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScene = createX3DFromURL(SAIBrowserRef, SAIURL [SAIURL]s); process url, return X3D syntax<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">updateControl(SAIBrowserRef, SAIAction); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = BeginUpdate|EndUpdate<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">registerBrowserInterest(SAIBrowserRef, SAIAction, SAIRequester);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddBrowserInterest|RemoveBrowserInterest<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIPropertyList = getRenderingProperties(SAIBrowserRef); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> String any|Flat|Gouraud|Phong|Wireframe = getShading();<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> String maximum texture size WIDTHxHEIGHT = getMaxTextureSize();<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Integer multitexture texture units = getTextureUnits();<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if anti-aliased = getAntiAliased();<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Integer bits of screen colour depth = getColorDepth();<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Float memory in megabytes = getTextureMemory();<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIPropertyList = getBrowserProperties(SAIBrowserRef); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if ABSTRACT_NODES <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if CONCRETE_NODES <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if EXTERNAL_INTERACTIONS <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if PROTOTYPE_CREATE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if DOM_IMPORT <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if XML_ENCODING <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if CLASSIC_VRML_ENCODING <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> Boolean if BINARY_ENCODING<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">changeViewpoint(SAIBrowserRef, SAIAction, SAILayerID); select viewpoint<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = Next|Previous|First|Last<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">print(SAIBrowserRef, SAIString); print to X3D browser console<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dispose(SAIBrowserRef); exit browser; generate SAI_Browser_Shutdown event <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBoolean = setBrowserOption(SAIBrowserRef, SAIString, SAIObject); set defined Browser options <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Execution context services<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getSpecificationVersion(SAIExecutionContext); specification version string<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIEncoding = getEncoding(SAIExecutionContext); encoding string<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIEncoding = Scripted|ASCII|VRML|XML|Binary|BIFS<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIProfileDeclaration = getProfile(SAIExecutionContext); profile string<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIProfileDeclaration = from profile list<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIComponentDeclaration[s] = getComponents(SAIExecutionContext); components list<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIComponentDeclaration[s] = from components list<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIURL = getWorldURL(SAIExecutionContext); world url string<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode = getNode(SAIExecutionContext, SAIString, SAIAction); return named node <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = DEFNode|IMPORTNode|EXPORTNode<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode = createNode(SAIExecutionContext, SAIString); create X3D node<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIString = name of an X3D node type<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode = createProto(SAIExecutionContext, SAIString); create proto instance <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIString = name of PROTO<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">namedNodeHandling(SAIExecutionContext, SAIAction, SAIAction, SAIString, [SAINode | SAIString, [SAIString]]); action named node <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddDEFNode|UpdateDEFNode|RemoveDEFNode|<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">             AddIMPORTNode|UpdateIMPORTNode|RemoveIMPORTNode|<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">             AddEXPORTNode|UpdateEXPORTNode|RemoveEXPORTNode<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIProtoDeclaration = getProtoDeclaration(SAIExecutionContext, SAIString); return proto declaration<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIString = named PROTO declaration <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">protoDeclarationHandling(SAIExecutionContext, SAIString, SAINode, SAIAction); action extern proto declareation<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddProto|UpdateProto|RemoveProto<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIProtoDeclaration = getExternProtoDeclaration(SAIExecutionContext, SAIString); return extern proto declaration<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">externprotoDeclarationHandling(SAIExecutionContext, SAIString, SAINode, SAIAction); action extern proto declareation<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddExternProto|UpdateExternProto|RemoveExternProto<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINodes = getRootNodes(SAIExecutionContext); listing of current root nodes <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIRoutes = getRoutes(SAIExecutionContext); return route list<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dynamicRouteHandling(SAIExecutionContext, SAINode, SAIField, SAINode, SAIField, SAIAction); action route<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddRoute|DeleteRoute<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dispose(SAIExecutionContext); no further interest in context<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Scene services<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getMetadata(SAIScene, SAIString); return an item of metadata  <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">setMetadata(SAIScene, SAIString, SAIString); inserts an item of metadata <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">namedNodeHandling(SAIExecutionContext, SAIAction, SAIAction, SAIString, [SAINode | SAIString, [SAIString]]); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> action named node <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddDEFNode|UpdateDEFNode|RemoveDEFNode|<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">             AddIMPORTNode|UpdateIMPORTNode|RemoveIMPORTNode|<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">             AddEXPORTNode|UpdateEXPORTNode|RemoveEXPORTNode<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">rootNodeHandling(SAIScene, SAINode, SAIAction); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> action named root node<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddRootNode|RemoveRootNode<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">   If AddRootNode when the node or children is currently part of another scene, generate SAI_NODE_IN_USE<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Node services<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getTypeName(SAINode); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINodeType = getType(SAINode);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIField = getField(SAINode, SAIFieldName);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldsgetFieldDefinitions(SAINodeType);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dispose(SAINode); no further interest<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Field services<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldAccess = getAccessType(SAINode, SAIField); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldType = getType(SAINode, SAIField);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldName = getName(SAINode, SAIField);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldValue = getValue(SAINode, SAIField);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">setValue(SAINode, SAIField, SAIFieldValue);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">registerFieldInterest(SAINode, SAIField, SAIAction, SAIRequester); action field interest<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> SAIAction = AddInterest|RemoveINteres<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dispose(SAIField); no further interest<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Route services <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode = getSourceNode(SAIRoute); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getSourceField(SAIRoute); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode = getDestinationNode(SAIRoute);  <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getDestinationField(SAIRoute);  <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">dispose(SAIRoute); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Prototype services <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBoolean = isExternproto(SAIProtoDeclaration);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode = createInstance(SAIProtoDeclaration);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIField[s] = getFieldDefinitions(SAIProtoDeclaration); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAILoadState = checkLoadState(SAIProtoDeclaration); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">requestImmediateLoad(SAIProtoDeclaration);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Configuration services <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getComponentName(SAIComponentDeclaration); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getComponentLevel(SAIComponentDeclaration); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getProfileName(SAIProfileDeclaration); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIComponentDeclaration[s] = getProfileComponents(SAIProfileDeclaration); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString = getProviderName(SAIProfileDeclaration)<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Script Services  <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">setBrowser(SAIBrowserRef); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">setFields(SAINode, SAIField, [SAIField]s )<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">initialize; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  the user code is active <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">prepareEvents; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  called every frame; evaluate directOutput(s), evaluate cascade(s) <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">eventsProcessed(SAIBrowserRef); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  current event cascade processing for this node is complete; please update scene graph <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">shutdown; <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  user code is longer functional or executed<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          3x3 and 4x4 Matrix services <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">set(SAIMatrix, SFVec3f, SFRotation, SFVec3f, SFRotation, SFVec3f);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  for the matrix set<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  translation, rotation, scale, scaleOrientation, center <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">get(SAIMatrix, SFVec3f, SFRotation, SFVec3f);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"> from the matrix return <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">   translation, rotation, scale<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">inverse(SAIMatrix); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  inverse this matrix in place<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">transpose(SAIMatrix); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  transpose this matrix in place<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">multiply(SAIMatrix, SAIMatrix); <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  multiply first matrix by second matrix place result first matrix <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">multiplyWithVector(SAIMatrix, SFVec3f);<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">  both left and right <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Data type definitions <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIAction <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBoolean <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBrowserApp <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBrowserName <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBrowserRef <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIBrowserVersion <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIComponentDeclaration <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIComponent <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIEncoding <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIExecutionContext <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldAccess <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldDeclaration <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIField <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldName <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldType <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldValue <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFrameRate <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAILayerID *<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAILoadState <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIMatrix *<u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINavSpeed <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINode <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAINodeType <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIParameterLIst <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIProfileDeclaration <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIPropertyList <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIProtoDeclaration <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIRequester <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIRoute <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScene <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScript <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIScriptImplementation <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIStream <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIString <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIURL <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">NULL <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Error types <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIError <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_BROWSER_UNAVAILABLE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_CONNECTION_ERROR <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_DISPOSED <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_IMPORTED_NODE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INSUFFICIENT_CAPABILITIES <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_ACCESS_TYPE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_BROWSER <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_IINVALID_DOCUMENT <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_EXECUTION_CONTEXT <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_FIELD <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_NAME <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_NODE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_OPERATION_TIMING <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_URL <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_INVALID_X3D <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_NODE_IN_USE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_NODE_NOT_AVAILABLE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_NOT_SHARED <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_NOT_SUPPORTED <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_URL_UNAVAILABLE <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">          Event types <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_Browser_Event <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_Browser_Initialized <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_Browser_Shutdown <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_Browser_Connection_Error <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAI_Browser_URL_Error <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black">SAIFieldEvent <u style="font-family:monospace"></u><u style="font-family:monospace"></u></span></b></pre></div></div><div lang="EN-US" link="blue" vlink="#954F72" style="word-wrap:break-word"><div class="m_1133648766508955019WordSection1"><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><pre style="margin-left:11.25pt;line-height:12pt;font-family:monospace"><b style="font-family:monospace"><span style="font-family:monospace;color:black"><u style="font-family:monospace"></u> <u style="font-family:monospace"></u></span></b></pre><p class="MsoNormal"><u></u> <u></u></p><div style="border-style:solid none none;border-top-width:1pt;padding:3pt 0in 0in;border-top-color:rgb(225,225,225)"><p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:yottzumm@gmail.com" target="_blank">John Carlson</a><br><b>Sent: </b>Monday, August 23, 2021 3:05 PM<br><b>To: </b><a href="mailto:x3d-public@web3d.org" target="_blank">X3D Graphics public mailing list</a><br><b>Subject: </b>[x3d-public] SAI before X3DJSAIL and x3d.py</p></div><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Can anyone describe how to export VRML and XML from SAI?   I do have a good reason and it’s not to steal anything.   Let’s say I need to apply a transform, then drop the transform.   This is for HAnim.   I want to output the modified model  to XML with transform and no transform attributes, they have been applied to the children.<u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Now I understand why no one wanted to touch VRML.</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal">John</p><p class="MsoNormal"><u></u> <u></u></p></div></div></blockquote></div></div>