<html xmlns:v="urn:schemas-microsoft-com:vml" 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=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@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;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle20
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1289429907;
        mso-list-type:hybrid;
        mso-list-template-ids:1646020310 -1409283248 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:8;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>(Sorry, unable to keep up with thread yet.)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Wanted to point out that embedding ExternProtoDeclare within ProtoDeclare only impacts scoping (visibility) of the ExternProto.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Common design pattern for large scenes is to put all ExternProtoDeclare statements at top of model, so that ProtoInstances might be used anywhere.  Also avoids repeated loading of such prototypes.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Alternatively for reliability an author might put ExternProtoDeclare within ProtoDeclare so that it is always available.  If embedded, that ExternProtoDeclare will not be visible outside of the ProtoDeclare.  This might be preferable or undesirable, depending on modeler’s re-use plans (or possibly ProtoDeclare author’s design intentions).<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Of note is that ProtoBody content model does allow inclusion of ExternProtoDeclare as valid.  See bottom of following diagram to confirm.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>X3D4 XML Schema Documentation, ProtoBody<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://www.web3d.org/specifications/X3dSchemaDocumentation4.0/x3d-4.0.html#Link1C2<o:p></o:p></li></ul><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>all the best, Don<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>-- <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>Don Brutzman  Naval Postgraduate School, Code USW/Br        brutzman@nps.edu<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>X3D graphics, virtual worlds, Navy robotics https://</span> <span style='font-size:10.0pt;font-family:"Courier New"'>faculty.nps.edu/brutzman<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> x3d-public <x3d-public-bounces@web3d.org> <b>On Behalf Of </b>GPU Group<br><b>Sent:</b> Monday, April 25, 2022 6:09 AM<br><b>To:</b> X3D Graphics public mailing list <x3d-public@web3d.org><br><b>Subject:</b> Re: [x3d-public] ProtoBody completeness in nested Protos<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>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.<o:p></o:p></p><div><p class=MsoNormal>-Doug<o:p></o:p></p></div><div><p class=MsoNormal>PS this relates to:<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>PROTOTYPE STYLE IMPORTS<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I had mentioned a prototype style import for gltf use:<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Shape { url=”library.gltf#shapeName” }<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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.<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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.<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>So the concept could be tested first with x3d scenery. <o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Shape { url=’library.x3dv#shapeName }<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>And then extended to gltf.<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>/PROTOTYPE STYLE IMPORTS<o:p></o:p></p></div></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Sun, Apr 24, 2022 at 10:43 PM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><p class=MsoNormal>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 <a href="https://">https://</a><br><a href="http://faculty.nps.edu/brutzman" 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" target="_blank">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphic</a><br><a href="https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fs.com%2F&data=05%7C01%7Cbrutzman%40nps.edu%7C6c462fad73ca4d06524208da26bcf02d%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637864890541977199%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Qj6tv2t7stpf5rWPTZAVZUnSjcpdp8He4VvfI3BFuBg%3D&reserved=0" target="_blank">s.com</a>%2Fexamples%2FX3dForWebAuthors%2FKelpForestExhibit%2FCircleFishLodProto<br>typeIndex.html&amp;data=05%7C01%7Cbrutzman%<a href="https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2F40nps.edu%2F&data=05%7C01%7Cbrutzman%40nps.edu%7C6c462fad73ca4d06524208da26bcf02d%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637864890541977199%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=kBt9%2BaQHsLFNcJS%2BiijsHydG9xoZUaCo4TWxUAvYfgo%3D&reserved=0" 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" 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" 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" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><o:p></o:p></p></blockquote></div></div></body></html>