<html 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=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@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;}
.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;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Let me send you my example code and we’ll see how it might be modified.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:joedwil@earthlink.net">Joe D Williams</a><br><b>Sent: </b>Monday, May 22, 2017 5:51 PM<br><b>To: </b><a href="mailto:yottzumm@gmail.com">"John Carlson"</a>; <a href="mailto:john.carlson3@sbcglobal.net">"John Carlson"</a><br><b>Cc: </b><a href="mailto:Leonard.Daly@realism.com">Leonard Daly</a>; <a href="mailto:x3d-public@web3d.org">list</a>; <a href="mailto:x3dom-users@lists.sourceforge.net">x3dom mlist</a>; <a href="mailto:educators@x3dbook.com">educators@x3dbook.com</a><br><b>Subject: </b>Re: [x3dom-users] Cobweb_dom...Script Magic? LoadingDOMsubscenesafter parent in X3DOM and Cobweb. ALMOST complete,requiressequencing ofouter functions.</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John, isn't the real contribution of the X3d event system is simply</p><p class=MsoNormal>the easy way to attach listeners to a node? Also that it is easy to</p><p class=MsoNormal>document the listener and the path or route the event to the nexxt</p><p class=MsoNormal>step in processing. Well, I guess also the built-in abilities to group</p><p class=MsoNormal>events streams in cascade, evaluate the cascade, then apply them to</p><p class=MsoNormal>the scenegraph as if 'instantatneously' for time and event based</p><p class=MsoNormal>simulation. Finally, just the way that an X3D scene can be treated as</p><p class=MsoNormal>an entity which an be controlled by a outside entity in the same way</p><p class=MsoNormal>as an internal entity.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Maybe there are other important details,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>All Best Wishes,</p><p class=MsoNormal>Joe</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>----- Original Message ----- </p><p class=MsoNormal>From: "John Carlson" <john.carlson3@sbcglobal.net></p><p class=MsoNormal>To: "John Carlson" <yottzumm@gmail.com></p><p class=MsoNormal>Cc: "Leonard Daly" <Leonard.Daly@realism.com>; "list"</p><p class=MsoNormal><x3d-public@web3d.org>; <X3D>; <x3dom-users@lists.sourceforge.net></p><p class=MsoNormal>Sent: Monday, May 22, 2017 10:38 AM</p><p class=MsoNormal>Subject: Re: [x3dom-users] Cobweb_dom...Script Magic? Loading</p><p class=MsoNormal>DOMsubscenesafter parent in X3DOM and Cobweb. ALMOST complete,</p><p class=MsoNormal>requiressequencing ofouter functions.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> If someone could provide sample JavaScript code which even gets</p><p class=MsoNormal>> close to implementing the X3D event model (in HTML if you like) for</p><p class=MsoNormal>> a couple of sample ROUTEs, I could probably take it from there.   Or</p><p class=MsoNormal>> a potential event model replacement.  A simple loop apparently</p><p class=MsoNormal>> doesn't cut it?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Thanks!</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> On May 22, 2017 11:58 AM, John Carlson <yottzumm@gmail.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>  In summary, X3D ecmascript and HTML ecmascript are mostly</p><p class=MsoNormal>> compatible, except for DOM and SAI. Â  I believe Cobweb supports</p><p class=MsoNormal>> both DOM and SAI, but I could Â be corrected.  What is different</p><p class=MsoNormal>> with X3D are 1) fields and 2) ROUTEs. Â  I think we can share the</p><p class=MsoNormal>> same script tag if fields are added to HTML scripts, possibly</p><p class=MsoNormal>> through some kind of extension or conversion.  Fields are currently</p><p class=MsoNormal>> required for ROUTEs. Â  If there was a conversion mechanism for</p><p class=MsoNormal>> ROUTEs, that would be helpful, and would avoid having to have fields</p><p class=MsoNormal>> on scripts.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>  John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>  On May 22, 2017 11:20 AM, "John Carlson" <yottzumm@gmail.com></p><p class=MsoNormal>> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      1.. You don’t have to have HTML script in <script></script>Â</p><p class=MsoNormal>> you can eval them.  You do need X3D Script fields for ROUTES. I am</p><p class=MsoNormal>> asking for script fields, not script tags.  I am fine with the HTML</p><p class=MsoNormal>> script node, except I just want fields that I can route to.  If you</p><p class=MsoNormal>> provide ROUTEs to non-X3D things that would be an OK alternate by</p><p class=MsoNormal>> me, too, or a just way to convert X3D Script-based ROUTEs to</p><p class=MsoNormal>> JavaScript.</p><p class=MsoNormal>>      2.. Self-modifying scripts are a bad idea. LOL.</p><p class=MsoNormal>>    Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Again, I am not asking for strict X3D Scripts.  I can build an</p><p class=MsoNormal>> SAI library or get one if I want to.  I am asking for a way to</p><p class=MsoNormal>> ROUTE between X3D and JavaScript (and by happy circumstance,</p><p class=MsoNormal>> JavaScript to JavaScript).  That is how you need to keep X3D</p><p class=MsoNormal>> relevant, if you want to maintain a standard, and that’s how you</p><p class=MsoNormal>> make everyone happy.  If there’s a conversion tool, that’s OK</p><p class=MsoNormal>> by me.  Are you going to write it?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Sent from Mail for Windows 10</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    From: Leonard Daly</p><p class=MsoNormal>>    Sent: Monday, May 22, 2017 11:01 AM</p><p class=MsoNormal>>    To: John Carlson</p><p class=MsoNormal>>    Subject: Re: [x3dom-users] Cobweb_dom...Script Magic? Loading</p><p class=MsoNormal>> DOMsubscenesafter parent in X3DOM and Cobweb. ALMOST complete,</p><p class=MsoNormal>> requiressequencing ofouter functions.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    On 5/22/2017 7:12 AM, John Carlson wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      The Script AND the Proto problem have ben solved in the HTML</p><p class=MsoNormal>> environment, I believe, with Cobweb + Cobweb DOM, or close to it.Â</p><p class=MsoNormal>> See Cobweb 3.2.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    John,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Script is very far from being solved, and (I believe) unsolvable</p><p class=MsoNormal>> with the constraints of X3D and DOM. These are my reasons.</p><p class=MsoNormal>>    1) There is a name conflict so X3D Script cannot be in the same</p><p class=MsoNormal>> namespace as HTML's Script. HTML only has one namespace</p><p class=MsoNormal>>    2) DOM allows scripts to modify themselves or be modified by</p><p class=MsoNormal>> other scripts. This is not possible in Cobweb or Cobweb_DOM.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    3) If you create a new node called (for example) X3dScript</p><p class=MsoNormal>> replacing the current X3D's Script node you solve (1) and because</p><p class=MsoNormal>> it's not JavaScript in the DOM, (2) is irrelevant. Now a scene has</p><p class=MsoNormal>> two different scripting environments. Even though the code looks to</p><p class=MsoNormal>> be the same (written in the same language), one cannot access</p><p class=MsoNormal>> fields, methods, properties, etc. of the other. They have different</p><p class=MsoNormal>> calling mechanisms. The X3dScript node code cannot respond to HTML</p><p class=MsoNormal>> events (mouseover, click, typing, etc in HTML elements). The</p><p class=MsoNormal>> HTML/DOM Script code can only interact with X3D elements through</p><p class=MsoNormal>> X3D's SAI. This design would produce an environment that has minimal</p><p class=MsoNormal>> (even less than current X3D) adoption. It would be confusing to</p><p class=MsoNormal>> developers with no obvious reason to the separate design.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Leonard Daly</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      Sent from Mail for Windows 10</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      From: Leonard Daly</p><p class=MsoNormal>>      Sent: Monday, May 22, 2017 10:06 AM</p><p class=MsoNormal>>      To: John Carlson</p><p class=MsoNormal>>      Cc: X3D Graphics public mailing list;</p><p class=MsoNormal>> x3dom-users@lists.sourceforge.net; Andreas Plesch;</p><p class=MsoNormal>> holger.seelig@yahoo.de</p><p class=MsoNormal>>      Subject: Re: [x3dom-users] Cobweb_dom...Script Magic? Loading</p><p class=MsoNormal>> DOM subscenesafter parent in X3DOM and Cobweb. ALMOST complete,</p><p class=MsoNormal>> requires sequencing ofouter functions.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      John,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      I have not been convinced that Protos need to exist in an HTML</p><p class=MsoNormal>> environment. Scripts are an integral piece of the Proto architecture</p><p class=MsoNormal>> so if you path is to implement Protos on the way to implementing</p><p class=MsoNormal>> Scripts, you need to solve the entire Script problem first. If</p><p class=MsoNormal>> Scripts are optional, then why have Proto? I think something like a</p><p class=MsoNormal>> macro expansion can solve all of the use cases where Proto would be</p><p class=MsoNormal>> used while being lighter weight and easier to implement and possibly</p><p class=MsoNormal>> use.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      Leonard Daly</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><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>        Leonard, I believe Scripts should be implemented AFTER</p><p class=MsoNormal>> Protos. Â  Just my opinion.  Once the Protos and the ROUTEs and the</p><p class=MsoNormal>> Scripts are expanded with the new DEFs, then you apply the event</p><p class=MsoNormal>> model. Â  This makes things easier, but takes more memory. Â  Then</p><p class=MsoNormal>> you optimize. Â  Beware premature optimization.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>        Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>        John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>        Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>        On May 21, 2017 12:16 AM, "Leonard Daly"</p><p class=MsoNormal>> <Leonard.Daly@realism.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          John,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          I don't really like to answer this way, but why?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          X3DOM does not have Proto/ExternProto feature. It does not</p><p class=MsoNormal>> have X3D Script node. The integration with HTML is too close to</p><p class=MsoNormal>> allow an X3D Script node. HTML JavaScript (via DOM and X3D node</p><p class=MsoNormal>> manipulation) is available and used extensively. X3DOM does not</p><p class=MsoNormal>> handle VRML (meaning a text file with {} syntax). There is an</p><p class=MsoNormal>> unofficial JSON loader. Perhaps you have one too. How does it get</p><p class=MsoNormal>> the scene graph into DOM? Does it create DOM elements (or perhaps an</p><p class=MsoNormal>> HTML text string which is then parsed)? Something else?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          To the extent I understand your question, you are asking</p><p class=MsoNormal>> for help in constructing a means of handling X3D Script node in</p><p class=MsoNormal>> X3DOM. Once that is done, Proto/ExternProto would be next. This</p><p class=MsoNormal>> would all come into the browser through an JSON encoded file. It</p><p class=MsoNormal>> seems to me that trying to handle X3D Script code requires an entire</p><p class=MsoNormal>> infrastructure supporting the X3D event mode and calling script code</p><p class=MsoNormal>> with X3D arguments. It also requires building full support for SAI</p><p class=MsoNormal>> and supporting the 'directOutput' field. That is a major effort with</p><p class=MsoNormal>> no obvious purpose that I see in V4.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          You are asking for some serious time support (I think) into</p><p class=MsoNormal>> an application that is neither fully X3D-compliant, nor</p><p class=MsoNormal>> DOM-compliant (but the closest to both that is available). At least</p><p class=MsoNormal>> for me, I do not understand how this effort would further an X3D</p><p class=MsoNormal>> integrated DOM system. I am quite willing to listen to your reasons</p><p class=MsoNormal>> and help where I can, but I would like to see where this is going</p><p class=MsoNormal>> first.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          Leonard Daly</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          P.S.  Everything above is for client-side code. Server</p><p class=MsoNormal>> side code can manipulate things as much as it wants to create</p><p class=MsoNormal>> something that runs in a client-side browser.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          P.P.S. I do think there is a need to JSON encoding in V4</p><p class=MsoNormal>> subject to the node definition for V4.</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><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Yes, Leonard, for quite some time I have an X3D JSON</p><p class=MsoNormal>> PROTOtypeExpander.js that works with X3D PROTOs and EXTERNPROTOs and</p><p class=MsoNormal>> displays in X3DOM.  I don’t know how complete it is, and testers</p><p class=MsoNormal>> are welcome. My EXTERNPROTO expander runs on the server, so is not</p><p class=MsoNormal>> included in the message, but it is included in the link in the</p><p class=MsoNormal>> original message.  If someone can make the EXTERNPROTO expander</p><p class=MsoNormal>> work client side that would be great.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            The EXTERNPROTO expander is generally called like:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  json =</p><p class=MsoNormal>> externPrototypeExpander(outfile, json);</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Where json is the parent json of the extern, and outfile</p><p class=MsoNormal>> is the parent X3D file being loaded (I think â€œâ€ will probably do</p><p class=MsoNormal>> in a pinch.  I am not sure.).  The extern PROTOs will be included</p><p class=MsoNormal>> in the original JSON as a ProtoDeclare object.  You may have to run</p><p class=MsoNormal>> the flattener afterwards, and it is run as:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â Â Â Â Â Â Â Â Â Â Â  json = flattener(json);</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            It removes empty objects from the JSON.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Yes, I would like someone to help me with VRMLScript for</p><p class=MsoNormal>> X3DOM, if someone is available.  I have a very barebones and</p><p class=MsoNormal>> incorrect implementation here:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Script.js</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Please help.  I don’t know the X3D event model, and</p><p class=MsoNormal>> I’m not likely to learn soon.  The X3D event model can be</p><p class=MsoNormal>> emulated in Browser-side JavaScript, but there’s only Cobweb for</p><p class=MsoNormal>> proof.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            I have another version of flipper.html here that works</p><p class=MsoNormal>> with X3DOM and Cobweb adding the subscene later.  It works with</p><p class=MsoNormal>> Promises, but the functions still aren’t separated…close, but no</p><p class=MsoNormal>> cigar.  Take a look:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Sorry, I tend to use the XML version of â€œProto”, and</p><p class=MsoNormal>> not the VRML â€œPROTO”.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            X3DJSONLD provides an infrastructure for X3D JSON Browser</p><p class=MsoNormal>> development, including X3D XML -> X3D JSON conversion on the server,</p><p class=MsoNormal>> and X3D JSON to X3D XML loading into X3DOM and Cobweb.  It also</p><p class=MsoNormal>> includes conversions from XML DOM to Java and Nashorn JavaScript for</p><p class=MsoNormal>> X3DJSAIL app development.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            There is definite potential for an XML PROTO expander, as</p><p class=MsoNormal>> I have written this code, but not seriously tested:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/CompleteXMLPrototypeExpander.js</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            So far, it’s still server-side.  If you’re going to</p><p class=MsoNormal>> modify it, split it into server and client-side pieces, please.Â</p><p class=MsoNormal>> Complete is probably a misnomer…</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Thanks,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Sent from Mail for Windows 10</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            From: Leonard Daly</p><p class=MsoNormal>>            Sent: Saturday, May 20, 2017 7:17 PM</p><p class=MsoNormal>>            To: John Carlson; Andreas Plesch; holger.seelig@yahoo.de</p><p class=MsoNormal>>            Cc: x3dom-users@lists.sourceforge.net; X3D Graphics</p><p class=MsoNormal>> public mailing list</p><p class=MsoNormal>>            Subject: Re: [x3dom-users] Cobweb_dom...Script Magic?</p><p class=MsoNormal>> Loading DOM subscenesafter parent in X3DOM and Cobweb.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            John,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Cobweb_dom, X3DOM experts, I need some help adding a</p><p class=MsoNormal>> child DOM scenegraph with prototypes to a parent DOM scenegraph</p><p class=MsoNormal>> after the</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Not sure how any of this applies to X3DOM as it does not</p><p class=MsoNormal>> have PROTOs. Assuming you mean X3D prototypes via PROTO or</p><p class=MsoNormal>> EXTERNPROTO. If you mean something else, please elaborate.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Leonard Daly</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><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              primary scene has been  loaded, and not before. I have</p><p class=MsoNormal>> an example of loading before the scene is loaded, and in a</p><p class=MsoNormal>> callback.  If you have an example with Promises instead of callback</p><p class=MsoNormal>> nesting, that would be more ideal, the second $.getJSON() (child</p><p class=MsoNormal>> scenegraph) might finish before the first $.getJSON() (parent</p><p class=MsoNormal>> scenegraph) if I don’t use promises or callback nesting. Also,</p><p class=MsoNormal>> Promises would allow me to separate the parent loading somewhat from</p><p class=MsoNormal>> the child loading, and create separate functions.  Also, X3DOM</p><p class=MsoNormal>> experts can provide an example with Promises as well.  Meanwhile, I</p><p class=MsoNormal>> will be reading about Promises.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Here is my example so far:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Viewable here:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://coderextreme.net/X3DJSONLD/src/main/html/flipper.html</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              The white Box is the subscene of the dolphin scene.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              The following related code is from</p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/loaderJQuery.js</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              and references code from:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/X3DJSONLD.js</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              [ actually, I think the last two reference each other</p><p class=MsoNormal>> â€“ naughty ]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Data is here:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              [ child scenegraph ]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/abox.json</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              [ parent scenegraph ]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/flipp.json</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Cobweb doesn’t need the prototypeExpander or the</p><p class=MsoNormal>> flattener (well, it might have with prototypes in cobweb_dom, but I</p><p class=MsoNormal>> think the last release fixed that…haven’t checked—here is a</p><p class=MsoNormal>> good test for you!).  This is a dual example, and I haven’t</p><p class=MsoNormal>> figured out how to conditionally run the prototypeExpander on only</p><p class=MsoNormal>> X3DOM code.  Please test without the PrototypeExpander.js and</p><p class=MsoNormal>> Flattener.js included, and remove X3DOM, since it won’t work in</p><p class=MsoNormal>> that case.  X3DOM folks can include the two JavaScript files which</p><p class=MsoNormal>> are here:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PrototypeExpander.js</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Flattener.js</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              You may provide your own appendInline (below) which</p><p class=MsoNormal>> doesn’t call loadSchema.  That may be too complex of a download.Â</p><p class=MsoNormal>> That is, you probably don’t want to do all that JSON schema</p><p class=MsoNormal>> validation in your example.  Try to keep my code close to what it</p><p class=MsoNormal>> is otherwise.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              And if you start supporting X3D JSON in your viewers,</p><p class=MsoNormal>> that would be even better!</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              /**</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â·Â Â Â Â Â Â Â Â  Next is passed the element parameter</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â·Â Â Â Â Â Â Â Â  */</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              function appendInline(element, url, next) {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â  $.getJSON(url, function(json) {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  if (typeof</p><p class=MsoNormal>> prototypeExpander === 'function') {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  json =</p><p class=MsoNormal>> prototypeExpander(url, json, "");</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  } else {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â</p><p class=MsoNormal>> console.error("Perhaps you need to include the</p><p class=MsoNormal>> PrototypeExpander.js?");</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â  Â Â Â Â Â Â Â Â Â }</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  if (typeof flattener ===</p><p class=MsoNormal>> 'function') {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  json =</p><p class=MsoNormal>> flattener(json);</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  } else {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â</p><p class=MsoNormal>> console.error("Perhaps you need to include the Flattener.js?");</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  }</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â  Â Â Â Â Â // must validate here</p><p class=MsoNormal>> because we call an inner method.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  loadSchema(json, url,</p><p class=MsoNormal>> doValidate, function() {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â</p><p class=MsoNormal>> ConvertToX3DOM(json["X3D"]["Scene"], "Scene", element, url);</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â</p><p class=MsoNormal>> next(element);</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â  Â Â Â Â Â Â Â }, function(e) {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â</p><p class=MsoNormal>> console.error(e);</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  });</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â  }).fail(function(jqXHR, textStatus,</p><p class=MsoNormal>> errorThrown) { alert('getJSON request failed! ' + textStatus + ' ' +</p><p class=MsoNormal>> errorThrown); });</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              }</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              /**</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â·Â Â Â Â Â Â Â Â  Next is passed the selected element</p><p class=MsoNormal>> from selector</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â·Â Â Â Â Â Â Â Â  Selector is the CSS selector to</p><p class=MsoNormal>> append inline to.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â·Â Â Â Â Â Â Â Â  */</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              function loadSubscene(selector, url, next) {</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â Â Â Â Â Â Â</p><p class=MsoNormal>> appendInline(document.querySelector(selector), url, next);</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              }</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>              Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ------------------------------------------------------------------------------Check</p><p class=MsoNormal>> out the vibrant tech community on one of the world's mostengaging</p><p class=MsoNormal>> tech sites, Slashdot.org! http://sdm.link/slashdotÂ</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> _______________________________________________X3dom-users mailing</p><p class=MsoNormal>> listX3dom-users@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/x3dom-usersÂ</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            -- </p><p class=MsoNormal>>            Leonard Daly</p><p class=MsoNormal>>            3D Systems & Cloud Consultant</p><p class=MsoNormal>>            LA ACM SIGGRAPH Chair</p><p class=MsoNormal>>            President, Daly Realism - Creating the Future</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>            Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>          -- </p><p class=MsoNormal>>          Leonard Daly</p><p class=MsoNormal>>          3D Systems & Cloud Consultant</p><p class=MsoNormal>>          LA ACM SIGGRAPH Chair</p><p class=MsoNormal>>          President, Daly Realism - Creating the Future</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      -- </p><p class=MsoNormal>>      Leonard Daly</p><p class=MsoNormal>>      3D Systems & Cloud Consultant</p><p class=MsoNormal>>      LA ACM SIGGRAPH Chair</p><p class=MsoNormal>>      President, Daly Realism - Creating the Future</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>      Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Â</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    -- </p><p class=MsoNormal>>    Leonard Daly</p><p class=MsoNormal>>    3D Systems & Cloud Consultant</p><p class=MsoNormal>>    LA ACM SIGGRAPH Chair</p><p class=MsoNormal>>    President, Daly Realism - Creating the Future</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>>    Â</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><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>--------------------------------------------------------------------------------</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> ------------------------------------------------------------------------------</p><p class=MsoNormal>> Check out the vibrant tech community on one of the world's most</p><p class=MsoNormal>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>--------------------------------------------------------------------------------</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> _______________________________________________</p><p class=MsoNormal>> X3dom-users mailing list</p><p class=MsoNormal>> X3dom-users@lists.sourceforge.net</p><p class=MsoNormal>> https://lists.sourceforge.net/lists/listinfo/x3dom-users</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></div></body></html>