<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">John,<br>
      <br>
    </div>
    <blockquote type="cite"
      cite="mid:5920b3e5.60866b0a.86567.03e3@mx.google.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <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.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.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:199558338;
        mso-list-type:hybrid;
        mso-list-template-ids:1334497586 -1 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:"Times New Roman";
        mso-bidi-font-family:Calibri;}
@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;}
@list l1
        {mso-list-id:1885871744;
        mso-list-type:hybrid;
        mso-list-template-ids:-1281850172 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1: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;
        margin-left:20.25pt;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:Calibri;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:56.25pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:92.25pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:128.25pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:164.25pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:200.25pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:236.25pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:272.25pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:308.25pt;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style>
      <div class="WordSection1">
        <p class="MsoNormal">Cobweb_dom, X3DOM experts, I need some help
          adding a child DOM scenegraph with prototypes to a parent DOM
          scenegraph after the </p>
      </div>
    </blockquote>
    <br>
    Not sure how any of this applies to X3DOM as it does not have
    PROTOs. Assuming you mean X3D prototypes via PROTO or EXTERNPROTO.
    If you mean something else, please elaborate.<br>
    <br>
    <br>
    Leonard Daly<br>
    <br>
    <br>
    <br>
    <blockquote type="cite"
      cite="mid:5920b3e5.60866b0a.86567.03e3@mx.google.com">
      <div class="WordSection1">
        <p class="MsoNormal">primary scene has been  loaded, and not
          before. I have an example of loading before the scene is
          loaded, and in a callback.  If you have an example with
          Promises instead of callback nesting, that would be more
          ideal, the second $.getJSON() (child scenegraph) might finish
          before the first $.getJSON() (parent scenegraph) if I don’t
          use promises or callback nesting. Also, Promises would allow
          me to separate the parent loading somewhat from the child
          loading, and create separate functions.  Also, X3DOM experts
          can provide an example with Promises as well.  Meanwhile, I
          will be reading about Promises.</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Here is my example so far:</p>
        <p class="MsoNormal"><a
href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html"
            moz-do-not-send="true">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html</a><br>
          <br>
          Viewable here:<o:p></o:p></p>
        <p class="MsoNormal"><a
            href="https://coderextreme.net/X3DJSONLD/src/main/html/flipper.html"
            moz-do-not-send="true">https://coderextreme.net/X3DJSONLD/src/main/html/flipper.html</a><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The white Box is the subscene of the
          dolphin scene.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The following related code is from <a
href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/loaderJQuery.js"
            moz-do-not-send="true">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/loaderJQuery.js</a><o:p></o:p></p>
        <p class="MsoNormal">and references code from:<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><a
href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/X3DJSONLD.js"
            moz-do-not-send="true">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/X3DJSONLD.js</a><o:p></o:p></p>
        <p class="MsoNormal">[ actually, I think the last two reference
          each other – naughty ]<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Data is here:<o:p></o:p></p>
        <p class="MsoNormal">[ child scenegraph ]<o:p></o:p></p>
        <p class="MsoNormal"><a
href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/abox.json"
            moz-do-not-send="true">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/abox.json</a><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">[ parent scenegraph ]<o:p></o:p></p>
        <p class="MsoNormal"><a
href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/flipp.json"
            moz-do-not-send="true">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/flipp.json</a><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Cobweb doesn’t need the prototypeExpander
          or the flattener (well, it might have with prototypes in
          cobweb_dom, but I think the last release fixed that…haven’t
          checked—here is a good test for you!).  This is a dual
          example, and I haven’t figured out how to conditionally run
          the prototypeExpander on only X3DOM code.  Please test without
          the PrototypeExpander.js and Flattener.js included, and remove
          X3DOM, since it won’t work in that case.  X3DOM folks can
          include the two JavaScript files which are here:<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><a
href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PrototypeExpander.js"
            moz-do-not-send="true">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PrototypeExpander.js</a><o:p></o:p></p>
        <p class="MsoNormal"><a
href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Flattener.js"
            moz-do-not-send="true">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Flattener.js</a><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">You may provide your own appendInline
          (below) which doesn’t call loadSchema.  That may be too
          complex of a download.  That is, you probably don’t want to do
          all that JSON schema validation in your example.  Try to keep
          my code close to what it is otherwise.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">And if you start supporting X3D JSON in
          your viewers, that would be even better!<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">John<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">/**<o:p></o:p></p>
        <ul style="margin-top:0in" type="disc">
          <li class="MsoListParagraph"
            style="margin-left:-15.75pt;mso-list:l1 level1 lfo2">Next is
            passed the element parameter<o:p></o:p></li>
          <li class="MsoListParagraph"
            style="margin-left:-15.75pt;mso-list:l1 level1 lfo2">*/<o:p></o:p></li>
        </ul>
        <p class="MsoNormal">function appendInline(element, url, next) {<o:p></o:p></p>
        <p class="MsoNormal">        $.getJSON(url, function(json) {<o:p></o:p></p>
        <p class="MsoNormal">                if (typeof
          prototypeExpander === 'function') {<o:p></o:p></p>
        <p class="MsoNormal">                        json =
          prototypeExpander(url, json, "");<o:p></o:p></p>
        <p class="MsoNormal">                } else {<o:p></o:p></p>
        <p class="MsoNormal">                       
          console.error("Perhaps you need to include the
          PrototypeExpander.js?");<o:p></o:p></p>
        <p class="MsoNormal">                }<o:p></o:p></p>
        <p class="MsoNormal">                if (typeof flattener ===
          'function') {<o:p></o:p></p>
        <p class="MsoNormal">                        json =
          flattener(json);<o:p></o:p></p>
        <p class="MsoNormal">                } else {<o:p></o:p></p>
        <p class="MsoNormal">                       
          console.error("Perhaps you need to include the
          Flattener.js?");<o:p></o:p></p>
        <p class="MsoNormal">                }<o:p></o:p></p>
        <p class="MsoNormal">                // must validate here
          because we call an inner method.<o:p></o:p></p>
        <p class="MsoNormal">                loadSchema(json, url,
          doValidate, function() {<o:p></o:p></p>
        <p class="MsoNormal">                       
          ConvertToX3DOM(json["X3D"]["Scene"], "Scene", element, url);<o:p></o:p></p>
        <p class="MsoNormal">                        next(element);<o:p></o:p></p>
        <p class="MsoNormal">                }, function(e) {<o:p></o:p></p>
        <p class="MsoNormal">                        console.error(e);<o:p></o:p></p>
        <p class="MsoNormal">                });<o:p></o:p></p>
        <p class="MsoNormal">        }).fail(function(jqXHR, textStatus,
          errorThrown) { alert('getJSON request failed! ' + textStatus +
          ' ' + errorThrown); });<o:p></o:p></p>
        <p class="MsoNormal">}<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">/**<o:p></o:p></p>
        <ul style="margin-top:0in" type="disc">
          <li class="MsoListParagraph"
            style="margin-left:0in;mso-list:l0 level1 lfo1">Next is
            passed the selected element from selector<o:p></o:p></li>
          <li class="MsoListParagraph"
            style="margin-left:0in;mso-list:l0 level1 lfo1">Selector is
            the CSS selector to append inline to.<o:p></o:p></li>
          <li class="MsoListParagraph"
            style="margin-left:0in;mso-list:l0 level1 lfo1">*/<o:p></o:p></li>
        </ul>
        <p class="MsoNormal">function loadSubscene(selector, url, next)
          {<o:p></o:p></p>
        <p class="MsoNormal">       
          appendInline(document.querySelector(selector), url, next);<o:p></o:p></p>
        <p class="MsoNormal">}<o:p></o:p></p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! <a class="moz-txt-link-freetext" href="http://sdm.link/slashdot">http://sdm.link/slashdot</a></pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
X3dom-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:X3dom-users@lists.sourceforge.net">X3dom-users@lists.sourceforge.net</a>
<a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/x3dom-users">https://lists.sourceforge.net/lists/listinfo/x3dom-users</a>
</pre>
    </blockquote>
    <p><br>
    </p>
    <div class="moz-signature">-- <br>
      <font class="tahoma,arial,helvetica san serif" color="#333366">
        <font size="+1"><b>Leonard Daly</b></font><br>
        3D Systems & Cloud Consultant<br>
        LA ACM SIGGRAPH Chair<br>
        President, Daly Realism - <i>Creating the Future</i>
      </font></div>
  </body>
</html>