[x3d-public] Cobweb_dom...Script Magic? Loading DOM subscenes after parent in X3DOM and Cobweb.

Andreas Plesch andreasplesch at gmail.com
Sat May 20 17:21:06 PDT 2017


Hi John,

it is difficult for me to see what is not working, in the example. It looks
like it is working but only by using callbacks in custom methods and you
would rather use Promises in reusable fashion ?

By child DOM scenegraph, do you mean a scene which is added as an Inline to
another (parent) scene ? Hm. it looks more like an appended Transform group
which would be quite different.

I think for cobweb_dom I added a dom event which is dispatched when an
Inline or Scene is fully loaded but I would have to go back and check.
Events would be another way to guarantee a sequence of loading.

jquery xhr and regular xhr have mechanisms to allow acting on when a
request is fulfilled (which is I think what you are using).

It may be necessary to come up with a minimal, non-working example which
shows the issue. Is dealing with expanding prototypes related to sequencing
?

I think you are also trying to show how to load json encoded x3d with x3dom
and cobweb ?

Sorry to be of no more constructive help, eg. asking all the returned
questions,

Andreas


On Sat, May 20, 2017 at 5:23 PM, John Carlson <yottzumm at gmail.com> wrote:

> Cobweb_dom, X3DOM experts, I need some help adding a child DOM scenegraph
> with prototypes to a parent DOM scenegraph after the 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.
>
>
>
> Here is my example so far:
>
> https://github.com/coderextreme/X3DJSONLD/blob/
> master/src/main/html/flipper.html
>
> Viewable here:
>
> https://coderextreme.net/X3DJSONLD/src/main/html/flipper.html
>
>
>
> The white Box is the subscene of the dolphin scene.
>
>
>
> The following related code is from https://github.com/
> coderextreme/X3DJSONLD/blob/master/src/main/node/loaderJQuery.js
>
> and references code from:
>
>
>
> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/
> X3DJSONLD.js
>
> [ actually, I think the last two reference each other – naughty ]
>
>
>
> Data is here:
>
> [ child scenegraph ]
>
> https://github.com/coderextreme/X3DJSONLD/blob/
> master/src/main/data/abox.json
>
>
>
> [ parent scenegraph ]
>
> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/flipp.
> json
>
>
>
>
>
> 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:
>
>
>
> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/
> PrototypeExpander.js
>
> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/
> Flattener.js
>
>
>
>
>
> 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.
>
>
>
> And if you start supporting X3D JSON in your viewers, that would be even
> better!
>
>
>
> John
>
>
>
> /**
>
>    - Next is passed the element parameter
>    - */
>
> function appendInline(element, url, next) {
>
>         $.getJSON(url, function(json) {
>
>                 if (typeof prototypeExpander === 'function') {
>
>                         json = prototypeExpander(url, json, "");
>
>                 } else {
>
>                         console.error("Perhaps you need to include the
> PrototypeExpander.js?");
>
>                 }
>
>                 if (typeof flattener === 'function') {
>
>                         json = flattener(json);
>
>                 } else {
>
>                         console.error("Perhaps you need to include the
> Flattener.js?");
>
>                 }
>
>                 // must validate here because we call an inner method.
>
>                 loadSchema(json, url, doValidate, function() {
>
>                         ConvertToX3DOM(json["X3D"]["Scene"], "Scene",
> element, url);
>
>                         next(element);
>
>                 }, function(e) {
>
>                         console.error(e);
>
>                 });
>
>         }).fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON
> request failed! ' + textStatus + ' ' + errorThrown); });
>
> }
>
>
>
> /**
>
>    - Next is passed the selected element from selector
>    - Selector is the CSS selector to append inline to.
>    - */
>
> function loadSubscene(selector, url, next) {
>
>         appendInline(document.querySelector(selector), url, next);
>
> }
>



-- 
Andreas Plesch
39 Barbara Rd.
Waltham, MA 02453
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20170520/781a0611/attachment-0001.html>


More information about the x3d-public mailing list