<div dir="ltr"><div dir="ltr">freewrl loads extern proto scenes as whole scene files, but as 'dead' scenery like a library file: in binary form, ready to binary deep copy parts to live scenery, but node initialization functions not yet called, and not rendered. Subsequent # references to the same scene file use the same loaded library scene. So any ProtoDeclares outside the ProtoBody would be resolved.<div>-Doug</div><div>PS this relates to:</div><div><p class="MsoNormal">PROTOTYPE STYLE IMPORTS<span></span></p>

<p class="MsoNormal">I had mentioned a prototype style import for gltf use:<span></span></p>

<p class="MsoNormal">Shape { url=”library.gltf#shapeName” }<span></span></p>

<p class="MsoNormal">Similar to how we load extern protos as a whole ‘dead’ scene,
and then do binary deep copies where used in the live scene to make live.<span></span></p>

<p class="MsoNormal">But interestingly, the same goes for x3d scenery – don’t
need glTF, don’t need extern protos in library scene, don’t need Inline or
IMPORT.<span></span></p>

<p class="MsoNormal">So the concept could be tested first with x3d scenery. <span></span></p>

<p class="MsoNormal">Shape { url=’library.x3dv#shapeName }<span></span></p>

<p class="MsoNormal">And then extended to gltf.<span></span></p>

<p class="MsoNormal">/PROTOTYPE STYLE IMPORTS<span></span></p></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 24, 2022 at 10:43 PM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Actually please look a little more closely at that (admittedly tricky)<br>
example.<br>
<br>
* CircleFish is an ExternProto, separately defined in another file<br>
* CircleFishLod is a ProtoDeclare defined in that first file,<br>
CircleFishLodPrototype.x3d<br>
* CircleFishLod ProtoBody contains two ProtoInstance copies of CircleFish<br>
* CircleFishLod ProtoDeclare is then followed by a CircleFishLod<br>
ProtoInstance (again  in CircleFishLodPrototype.x3d)<br>
<br>
So I would expect an X3D Browser to<br>
<br>
a. load ExternProtoDeclare      CircleFish<br>
b. build ProtoDeclare                CircleFishLod<br>
c. create inner ProtoInstance  CircleFish for use<br>
d. create outer ProtoInstance CircleFishLod<br>
<br>
Order of steps might vary a bit, but those are the dependencies.  Good luck<br>
sir.<br>
<br>
all the best, Don<br>
-- <br>
Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a><br>
Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<br>
X3D graphics, virtual worlds, Navy robotics https://<br>
<a href="http://faculty.nps.edu/brutzman" rel="noreferrer" target="_blank">faculty.nps.edu/brutzman</a><br>
<br>
-----Original Message-----<br>
From: x3d-public <<a href="mailto:x3d-public-bounces@web3d.org" target="_blank">x3d-public-bounces@web3d.org</a>> On Behalf Of Andreas Plesch<br>
Sent: Sunday, April 24, 2022 9:08 PM<br>
To: X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>
Subject: [x3d-public] ProtoBody completeness in nested Protos<br>
<br>
ProtoDeclarations may use ProtoInstances of other Protos inside their<br>
ProtoBody definitions.<br>
<br>
For example, the CircleFishLod proto here:<br>
<br>
<a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphic" rel="noreferrer" target="_blank">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphic</a><br>
<a href="http://s.com" rel="noreferrer" target="_blank">s.com</a>%2Fexamples%2FX3dForWebAuthors%2FKelpForestExhibit%2FCircleFishLodProto<br>
typeIndex.html&amp;data=05%7C01%7Cbrutzman%<a href="http://40nps.edu" rel="noreferrer" target="_blank">40nps.edu</a>%7C0b4a867ba9874e371f9b0<br>
8da267152fa%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637864565880708349%<br>
7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwi<br>
LCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=upr4eckI8axT7MO5fAUvAWfyBzUJfhTwqcp<br>
BuH7tZjc%3D&amp;reserved=0<br>
<br>
uses ProtoInstances of the CircleFish proto.<br>
<br>
A more extreme case of nesting is:<br>
<br>
<a href="https://www.web3d.org/x3d/content/examples/ConformanceNist/Miscellaneous/PROTO/fivedeepnestingIndex.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/ConformanceNist/Miscellaneous/PRO<br>
TO/fivedeepnestingIndex.html</a><br>
<br>
where Proto1 uses ProtoInstance of Proto2 inside its ProtoBody. Proto2<br>
itself uses a ProtoInstance of Proto3 inside its ProtoBody. And so on to<br>
five levels deep.<br>
<br>
The second example with the deep nesting currently works with x3dom but the<br>
seemingly simpler CircleFishLod proto does not.<br>
<br>
The reason is that x3dom expects the complete definition of a proto to be<br>
contained in its ProtoBody. However, The CircleFishLod proto only contains<br>
the CircleFish ProtoInstances in the body but not the associated CircleFish<br>
ProtoDeclaration which for some reason occurs outside the CircleFishLod<br>
ProtoBody (and outside the CircleFishLod ProtoDeclaration).<br>
<br>
Expecting the ProtoBody to be complete and self-contained seems rather<br>
natural. Is x3dom too strict in this regard, or is there an oversight in the<br>
example ? There is not much guidance in the spec., if any.<br>
<br>
Thanks, Andreas<br>
<br>
--<br>
Andreas Plesch<br>
Waltham, MA 02453<br>
<br>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div>