<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>