<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:430123499;
        mso-list-type:hybrid;
        mso-list-template-ids:1708296802 1152411608 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoPlainText>Agreed that ‘isLoaded’ field should indicate completion.  Additional indicators for loading are the LoadSensor ‘loadTime’ and 'progress' fields.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>X3D4 Architecture, Networking component, 9.4.3 LoadSensor<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/networking.html#LoadSensor<o:p></o:p></li></ul><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:8.5pt;font-family:Symbol;color:black'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:8.5pt;font-family:"Courier New";color:black'>SFBool   [out]    isLoaded<o:p></o:p></span></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>The <i>isLoaded</i> field generates events when loading of the LoadSensor's children has completed. An isLoaded TRUE event is generated when all of the elements have been loaded. An isLoaded FALSE event is generated when one or more of the elements has failed to load, or when the timeout period is reached as specified in the timeout field. If all elements in the children are already loaded by the time the LoadSensor is processed, the LoadSensor shall generate an isLoaded event with value TRUE and a progress event with value 1 at the next event cascade.<o:p></o:p></li></ul><pre style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:8.5pt;font-family:Symbol;color:black'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:8.5pt;color:black'>SFTime   [out]    loadTime<o:p></o:p></span></pre><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>The <i>loadTime</i> event is generated when loading of the LoadSensor's children has successfully completed. If loading fails or the timeout period is reached, a <i>loadTime</i> event is not generated.<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo1'><span style='font-size:8.5pt;font-family:"Courier New";color:black'>SFFloat  [out]    progress</span><span style='font-family:"Courier New"'><o:p></o:p></span></li><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>The <i>progress</i> field generates events as loading progresses. The value of <i>progress</i> is a floating-point number between 0 and 1 inclusive. A value of 1 indicates complete loading of all children elements. The exact meaning of all other values ( i.e., whether these indicate a percentage of total bytes, a percentage of total number of files, or some other measurement) and the frequency with which <i>progress</i> events are generated are X3D browser-dependent. Regardless, the X3D browser shall in all cases guarantee that a progress value of 1 is generated upon successful load of all URL objects.<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Worth noting is that LoadSensor can have multiple children (for commonly shared logical dependencies), or alternatively, multiple LoadSensor nodes can be used (for multiple independent logical dependencies).  So X3D simulation authors have a lot of flexibility for scalable composition of animated models for interactive simulation design.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Regarding IMPORT and EXPORT, these are defined pair-wise between immediate parent and child scenes respectively.  Prose for each statement includes the caveat “Once imported…”<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>X3D4 Architecture, Networking component, 9.2.5 IMPORT statement<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/networking.html#IMPORTStatement<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>X3D4 Architecture, Networking component, 9.2.6 EXPORT statement<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/networking.html#EXPORTStatement<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Thus LoadSensor <i>isLoaded</i> or <i>loadTime</i> can be used in the parent scene to determine whether child scene is loaded and ready to receive events.  “But wait there’s more:” overachievers using a Script node might also monitor the <i>progress</i> field for responding at the moment when an event value of 1 is received.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>One might speculate that a child scene needs to know when parent scene is present… this might get tricky if we tried to specify a field indicating presence of a parent, because the parent scene might not yet be ready to receive events.  Suggested authoring approach:  parent scene can send an “I am ready now, get started” event to the loaded child scene once ready to begin two-way exchange of events.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Gee, better be careful out there.  If we keep going with scalable deterministic logic for interconnected X3D models like this, we might end up building a metaverse or something…<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Thanks for serious implementation efforts in X_ITE and X3DOM.  Happy New Year, have fun with X3D4!  8)<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>all the best, Don<o:p></o:p></p><p class=MsoPlainText>-- <o:p></o:p></p><p class=MsoPlainText>Don Brutzman  Naval Postgraduate School, Code USW/Br        brutzman@nps.edu<o:p></o:p></p><p class=MsoPlainText>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<o:p></o:p></p><p class=MsoPlainText>X3D graphics, virtual worlds, Navy robotics https:// faculty.nps.edu/brutzman<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----Original Message-----<br>From: x3d-public <x3d-public-bounces@web3d.org> On Behalf Of Holger Seelig<br>Sent: Wednesday, December 21, 2022 9:09 AM<br>To: Andreas Plesch <andreasplesch@gmail.com><br>Cc: X3D <x3d-public@web3d.org><br>Subject: Re: [x3d-public] LoadSensor completion of loading</p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I think, and it is how it is now implemented in X_ITE, Inline nodes are loaded, if they are completely loaded with all it sub scenes. This makes it easier for an X3D author to to determine if all is loaded, otherwise the author must traverse the scene, or do other logic, to determine if sub Inline scenes are loaded. I makes sense that, that an Inline is loaded when it is completely loaded.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Best regards,<o:p></o:p></p><p class=MsoPlainText>Holger<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>> Am 21.12.2022 um 17:50 schrieb Andreas Plesch <<a href="mailto:andreasplesch@gmail.com"><span style='color:windowtext;text-decoration:none'>andreasplesch@gmail.com</span></a>>:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> It is useful to be notified after an Inline has completed loading.<o:p></o:p></p><p class=MsoPlainText>> This is especially true for external access to the scene if the Inline <o:p></o:p></p><p class=MsoPlainText>> has exports (or dom style access is used).<o:p></o:p></p><p class=MsoPlainText>> A LoadSensor generates such an event:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> <a href="https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/com"><span style='color:windowtext;text-decoration:none'>https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/com</span></a><o:p></o:p></p><p class=MsoPlainText>> ponents/networking.html#LoadSensor<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> "The isLoaded field generates events when loading of the LoadSensor's <o:p></o:p></p><p class=MsoPlainText>> children has completed."<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> However, in the case that the Inline contains another Inline itself a <o:p></o:p></p><p class=MsoPlainText>> question came up. Is loading considered complete when the outer Inline <o:p></o:p></p><p class=MsoPlainText>> xml/json/.. is completely downloaded but still has only a url <o:p></o:p></p><p class=MsoPlainText>> reference to the inner Inline ? That typically would happen before <o:p></o:p></p><p class=MsoPlainText>> also the inner Inline is completely downloaded. Or should the event be <o:p></o:p></p><p class=MsoPlainText>> generated only after the inner Inline (and all of its content) is also <o:p></o:p></p><p class=MsoPlainText>> completely downloaded ?<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> The second option is more useful, especially for web use where loading <o:p></o:p></p><p class=MsoPlainText>> generally occurs asynchronously and such events are often used to <o:p></o:p></p><p class=MsoPlainText>> initiate processing of downloaded content.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> For generic X3D use, one could imagine a situation where a LoadSensor <o:p></o:p></p><p class=MsoPlainText>> triggers something which assumes that the scene is fully rendered <o:p></o:p></p><p class=MsoPlainText>> before an Inline is actually rendered.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> It is also related to how EXPORT/IMPORT works. One could probably <o:p></o:p></p><p class=MsoPlainText>> construct a situation where a LoadSensor triggers access to an <o:p></o:p></p><p class=MsoPlainText>> EXPORTed node from an inner Inline before it is available.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Is a tightening of the language necessary ? Perhaps there is already a <o:p></o:p></p><p class=MsoPlainText>> more precise definition of 'loading' in the spec. somewhere else ?<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> -Andreas<o:p></o:p></p><p class=MsoPlainText>> --<o:p></o:p></p><p class=MsoPlainText>> Andreas Plesch<o:p></o:p></p><p class=MsoPlainText>> Waltham, MA 02453<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> _______________________________________________<o:p></o:p></p><p class=MsoPlainText>> x3d-public mailing list<o:p></o:p></p><p class=MsoPlainText>> <a href="mailto:x3d-public@web3d.org"><span style='color:windowtext;text-decoration:none'>x3d-public@web3d.org</span></a><o:p></o:p></p><p class=MsoPlainText>> <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org"><span style='color:windowtext;text-decoration:none'>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</span></a><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText>x3d-public mailing list<o:p></o:p></p><p class=MsoPlainText><a href="mailto:x3d-public@web3d.org"><span style='color:windowtext;text-decoration:none'>x3d-public@web3d.org</span></a><o:p></o:p></p><p class=MsoPlainText><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org"><span style='color:windowtext;text-decoration:none'>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</span></a><o:p></o:p></p></div></body></html>