[x3d-public] [x3dom-users] Cobweb_dom...Script Magic? Loading DOM subscenes after parent in X3DOM and Cobweb. ALMOST complete, requires sequencing of outer functions.
Leonard Daly
Leonard.Daly at realism.com
Wed May 31 11:39:11 PDT 2017
Joe,
>> I have not been convinced that Protos need to exist in an HTML
> environment.
>
> Well, i guess you don't have any example you like that use protos. I
> suggest more study.
I asked for examples, there were no responses.
>
>> if you path is to implement Protos on the way to implementing Scripts,
>> you need to solve the entire Script problem first.
>
> Why bother telling someone who is actually doing some work how the
> problem must be solmved. Protos don't need scripts to operate yet can
> still be very usefull.
Because that problem will still need to be solved. So me (again) an
example of a non-trivial PROTO. Non-trivial means it is not a
convenience short-cut that collects multiple nodes or a node structure
into a single instance. It needs to do something useful and at least as
efficiently as other means for generating the same result. It needs to
be a production usable, not just a development tool or technique.
>
>> I think something like a macro expansion ...
>
> well, show your design and we will see if we can help you get it working.
I did - almost a year ago. It's online at
http://tools.realism.com/specification/x3d-next-generation/abstract-specification/changes-additions-x3d-v33/macro
Leonard Daly
>
>
> Joe
>
>
> ----- Original Message ----- From: "Leonard Daly"
> <Leonard.Daly at realism.com>
> To: "John Carlson" <yottzumm at gmail.com>
> Cc: <x3dom-users at lists.sourceforge.net>; "X3D Graphics public mailing
> list" <x3d-public at web3d.org>; "Andreas Plesch" <andreasplesch at gmail.com>
> Sent: Monday, May 22, 2017 7:06 AM
> Subject: Re: [x3d-public] [x3dom-users] Cobweb_dom...Script Magic?
> Loading DOM subscenes after parent in X3DOM and Cobweb. ALMOST
> complete, requires sequencing of outer functions.
>
>
>> John,
>>
>> I have not been convinced that Protos need to exist in an HTML
>> environment. Scripts are an integral piece of the Proto architecture so
>> if you path is to implement Protos on the way to implementing Scripts,
>> you need to solve the entire Script problem first. If Scripts are
>> optional, then why have Proto? I think something like a macro expansion
>> can solve all of the use cases where Proto would be used while being
>> lighter weight and easier to implement and possibly use.
>>
>> Leonard Daly
>>
>>
>>> Leonard, I believe Scripts should be implemented AFTER Protos. Just
>>> my opinion. Once the Protos and the ROUTEs and the Scripts are
>>> expanded with the new DEFs, then you apply the event model. This
>>> makes things easier, but takes more memory. Then you optimize.
>>> Beware premature optimization.
>>>
>>> John
>>>
>>> On May 21, 2017 12:16 AM, "Leonard Daly" <Leonard.Daly at realism.com
>>> <mailto:Leonard.Daly at realism.com>> wrote:
>>>
>>> John,
>>>
>>> I don't really like to answer this way, but why?
>>>
>>> X3DOM does not have Proto/ExternProto feature. It does not have
>>> X3D Script node. The integration with HTML is too close to allow
>>> an X3D Script node. HTML JavaScript (via DOM and X3D node
>>> manipulation) is available and used extensively. X3DOM does not
>>> handle VRML (meaning a text file with {} syntax). There is an
>>> unofficial JSON loader. Perhaps you have one too. How does it get
>>> the scene graph into DOM? Does it create DOM elements (or perhaps
>>> an HTML text string which is then parsed)? Something else?
>>>
>>> To the extent I understand your question, you are asking for help
>>> in constructing a means of handling X3D Script node in X3DOM. Once
>>> that is done, Proto/ExternProto would be next. This would all come
>>> into the browser through an JSON encoded file. It seems to me that
>>> trying to handle X3D Script code requires an entire infrastructure
>>> supporting the X3D event mode and calling script code with X3D
>>> arguments. It also requires building full support for SAI and
>>> supporting the 'directOutput' field. That is a major effort with
>>> no obvious purpose that I see in V4.
>>>
>>> You are asking for some serious time support (I think) into an
>>> application that is neither fully X3D-compliant, nor DOM-compliant
>>> (but the closest to both that is available). At least for me, I do
>>> not understand how this effort would further an X3D integrated DOM
>>> system. I am quite willing to listen to your reasons and help
>>> where I can, but I would like to see where this is going first.
>>>
>>> Leonard Daly
>>>
>>> P.S. Everything above is for client-side code. Server side code
>>> can manipulate things as much as it wants to create something that
>>> runs in a client-side browser.
>>>
>>> P.P.S. I do think there is a need to JSON encoding in V4 subject
>>> to the node definition for V4.
>>>
>>>
>>>
>>>> Yes, Leonard, for quite some time I have an X3D JSON
>>>> PROTOtypeExpander.js that works with X3D PROTOs and EXTERNPROTOs
>>>> and displays in X3DOM. I don’t know how complete it is, and
>>>> testers are welcome. My EXTERNPROTO expander runs on the server,
>>>> so is not included in the message, but it is included in the link
>>>> in the original message. If someone can make the EXTERNPROTO
>>>> expander work client side that would be great.
>>>>
>>>> The EXTERNPROTO expander is generally called like:
>>>>
>>>> json = externPrototypeExpander(outfile, json);
>>>>
>>>> Where json is the parent json of the extern, and outfile is the
>>>> parent X3D file being loaded (I think “” will probably do in a
>>>> pinch. I am not sure.). The extern PROTOs will be included in
>>>> the original JSON as a ProtoDeclare object. You may have to run
>>>> the flattener afterwards, and it is run as:
>>>>
>>>> json = flattener(json);
>>>>
>>>> It removes empty objects from the JSON.
>>>>
>>>> Yes, I would like someone to help me with VRMLScript for X3DOM,
>>>> if someone is available. I have a very barebones and incorrect
>>>> implementation here:
>>>>
>>>>
>>>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Script.js
>>>>
>>>>
>>>> <https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Script.js>
>>>>
>>>>
>>>> Please help. I don’t know the X3D event model, and I’m not
>>>> likely to learn soon. The X3D event model can be emulated in
>>>> Browser-side JavaScript, but there’s only Cobweb for proof.
>>>>
>>>>
>>>> I have another version of flipper.html here that works with X3DOM
>>>> and Cobweb adding the subscene later. It works with Promises,
>>>> but the functions still aren’t separated…close, but no cigar.
>>>> Take a look:
>>>>
>>>>
>>>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html
>>>>
>>>>
>>>> <https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html>
>>>>
>>>>
>>>> Sorry, I tend to use the XML version of “Proto”, and not the VRML
>>>> “PROTO”.
>>>>
>>>> X3DJSONLD provides an infrastructure for X3D JSON Browser
>>>> development, including X3D XML -> X3D JSON conversion on the
>>>> server, and X3D JSON to X3D XML loading into X3DOM and Cobweb.
>>>> It also includes conversions from XML DOM to Java and Nashorn
>>>> JavaScript for X3DJSAIL app development.
>>>>
>>>> There is definite potential for an XML PROTO expander, as I have
>>>> written this code, but not seriously tested:
>>>>
>>>>
>>>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/CompleteXMLPrototypeExpander.js
>>>>
>>>>
>>>> <https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/CompleteXMLPrototypeExpander.js>
>>>>
>>>>
>>>> So far, it’s still server-side. If you’re going to modify it,
>>>> split it into server and client-side pieces, please. Complete is
>>>> probably a misnomer…
>>>>
>>>> Thanks,
>>>>
>>>> John
>>>>
>>>> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986>
>>>> for Windows 10
>>>>
>>>> *From: *Leonard Daly <mailto:Leonard.Daly at realism.com>
>>>> *Sent: *Saturday, May 20, 2017 7:17 PM
>>>> *To: *John Carlson <mailto:yottzumm at gmail.com>; Andreas Plesch
>>>> <mailto:andreasplesch at gmail.com>; holger.seelig at yahoo.de
>>>> <mailto:holger.seelig at yahoo.de>
>>>> *Cc: *x3dom-users at lists.sourceforge.net
>>>> <mailto:x3dom-users at lists.sourceforge.net>; X3D Graphics public
>>>> mailing list <mailto:x3d-public at web3d.org>
>>>> *Subject: *Re: [x3dom-users] Cobweb_dom...Script Magic? Loading
>>>> DOM subscenesafter parent in X3DOM and Cobweb.
>>>>
>>>> John,
>>>>
>>>> Cobweb_dom, X3DOM experts, I need some help adding a child
>>>> DOM scenegraph with prototypes to a parent DOM scenegraph
>>>> after the
>>>>
>>>>
>>>> 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.
>>>>
>>>>
>>>> Leonard Daly
>>>>
>>>>
>>>>
>>>>
>>>> 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
>>>>
>>>>
>>>> <https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html>
>>>>
>>>>
>>>> Viewable here:
>>>>
>>>>
>>>> https://coderextreme.net/X3DJSONLD/src/main/html/flipper.html
>>>>
>>>> <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
>>>>
>>>>
>>>> <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
>>>>
>>>>
>>>> <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
>>>>
>>>>
>>>> <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
>>>>
>>>>
>>>> <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/PrototypeExpander.js>
>>>>
>>>>
>>>>
>>>> https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Flattener.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);
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>>
>>>> Check out the vibrant tech community on one of the world's
>>>> most
>>>>
>>>> engaging tech sites, Slashdot.org!http://sdm.link/slashdot
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>>
>>>> X3dom-users mailing list
>>>>
>>>> X3dom-users at lists.sourceforge.net
>>>> <mailto:X3dom-users at lists.sourceforge.net>
>>>>
>>>> https://lists.sourceforge.net/lists/listinfo/x3dom-users
>>>> <https://lists.sourceforge.net/lists/listinfo/x3dom-users>
>>>>
>>>> -- *Leonard Daly*
>>>> 3D Systems & Cloud Consultant
>>>> LA ACM SIGGRAPH Chair
>>>> President, Daly Realism - /Creating the Future/
>>>>
>>>
>>> -- *Leonard Daly*
>>> 3D Systems & Cloud Consultant
>>> LA ACM SIGGRAPH Chair
>>> President, Daly Realism - /Creating the Future/
>>>
>>
>> --
>> *Leonard Daly*
>> 3D Systems & Cloud Consultant
>> LA ACM SIGGRAPH Chair
>> President, Daly Realism - /Creating the Future/
>>
>
>
> --------------------------------------------------------------------------------
>
>
>
>> _______________________________________________
>> x3d-public mailing list
>> x3d-public at web3d.org
>> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>>
>
>
> ------------------------------------------------------------------------------
>
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> X3dom-users mailing list
> X3dom-users at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/x3dom-users
--
*Leonard Daly*
3D Systems & Cloud Consultant
LA ACM SIGGRAPH Chair
President, Daly Realism - /Creating the Future/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20170531/62320215/attachment-0001.html>
More information about the x3d-public
mailing list