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

Andreas Plesch andreasplesch at gmail.com
Mon May 22 14:44:40 PDT 2017


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

> I would like to separate the main scene loading from the sub scene
> loading, so I can load many, many subscenes, plus it will make coding
> easier.
>
>
>
> I am almost able to do that, but I am not sure when the Scene object loads
> in the main scene.
>
>
>
> What wasn’t working before was that the child scene was added before it
> displayed in Cobweb.  That has been fixed now.
>
>
>
> It’s an Inline, but not in typical X3D parlance.  It’s a DOM object added
> afterwards, by using a selector on the DOM.
>
>
>
> I can expand prototypes inline, as the example now shows.  That’s not a
> problem, really.  I just want to make a way NOT to expand PROTOs for Cobweb.
>
>
>
> Yes, I am loading X3DJSON into Cobweb AND X3DOM, using the same DOM tree
> (probably not a good idea).
>
>
>
> Yes, I am interested in your DOM event which is dispatched when a Scene is
> fully loaded.  Could you go and check?  Thanks!
>

x3dom has the runtime.ready() callback:

https://doc.x3dom.org/author/runtime.html#ready

for cobweb, the scene is (presumably) fully loaded when
browser.replaceWorld() returns:

http://www.web3d.org/documents/specifications/19777-1/V3.3/Part1/functions.html#t-FunctionsBrowserObject

(In cobweb_dom, I may be able to dispatch a 'x3d_ready' event after
https://github.com/andreasplesch/cobweb_dom/blob/master/cobweb/cobweb_dom.js#L62
if that is useful.
)


>
>
> John
>
>
>
> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
> Windows 10
>
>
>
> *From: *Andreas Plesch <andreasplesch at gmail.com>
> *Sent: *Saturday, May 20, 2017 8:21 PM
> *To: *John Carlson <yottzumm at gmail.com>
> *Cc: *holger.seelig at yahoo.de; X3D Graphics public mailing list
> <x3d-public at web3d.org>; x3dom-users at lists.sourceforge.net
> *Subject: *Re: Cobweb_dom...Script Magic? Loading DOM subscenes after
> parent inX3DOM and Cobweb.
>
>
>
> 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
>
>
>



-- 
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/20170522/70922e28/attachment-0001.html>


More information about the x3d-public mailing list