<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<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 name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><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:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-ligatures:standardcontextual;}
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:"Aptos",sans-serif;
mso-ligatures:standardcontextual;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;}
@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:1908833556;
mso-list-type:hybrid;
mso-list-template-ids:907432612 -712627142 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:0;
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:Aptos;
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;}
@list l1
{mso-list-id:1974216104;
mso-list-type:hybrid;
mso-list-template-ids:519208984 -1817159382 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-start-at:0;
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:Aptos;
mso-bidi-font-family:"Times New Roman";}
@list l1: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 l1: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 l1: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 l1: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 l1: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 l1: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 l1: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 l1: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="#467886" vlink="#96607D" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>The X in X3D is Extensible. An important aspect of that is the ability of an X3D model to export a scene sub-graph node, for potential use by a parent model which can load and access it via Inline. The IMPORT/EXPORT statements support the Inline node to establish this capability. Events can then be ROUTEd to and fro between the parent model and the child Inline model.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Bottom line up front (BLUF): it works! Test screenshots for three players:<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:l1 level1 lfo2'>https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineImportCastleModelViewer.png<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineImportX_ITE.png<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineImportX3DOM.png<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Details follow. The X3D 4.0 Architecture specification defines this functionality:<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'>X3D Architecture version 4.0 ISO/IEC 19775-1, clause 4 Concepts, 4.4.6 Import/Export <o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/concepts.html#ImportExportsemantics<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='margin-left:.25in'>4.4.6 Import/Export semantics<o:p></o:p></p><p class=MsoNormal style='margin-left:.25in'>The IMPORT feature allows authors to incorporate content defined within Inline nodes or created programmatically into the namespace of the containing file for the purposes of event routing. In contrast with external prototyping (see 4.4.5 External prototype semantics), which allows access to individual fields of nodes defined as prototypes in external files, IMPORT provides access to all the fields of an externally defined node with a single statement (see 9.2.5 IMPORT statement).<o:p></o:p></p><p class=MsoNormal style='margin-left:.25in'><o:p> </o:p></p><p class=MsoNormal style='margin-left:.25in'>Importing nodes from an Inlined file is accomplished with two statements: IMPORT and EXPORT. The IMPORT statement is used in the containing file to define which nodes of an Inline are to be incorporated into the containing file's namespace. The EXPORT statement is used in the file being Inlined, to control access over which nodes within a file are visible to other files (see 9.2.6 EXPORT statement). EXPORT statements are not allowed in prototype declarations.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Continuing: Dick and I have been working on resolving all issues with the X3D XML Encoding revision to match X3D 4.0. Making good progress, documenting resolution of all issues in Mantis (as usual). We expect to submit this working draft to ISO in the coming weeks. As part of these efforts, we realized that the XML example for X3D Inline/EXPORT/IMPORT was not in our example archives. Implementing and evaluating further revealed an attribute error in the XML Encoding specification prose that implementers were able to figure out correctly.<o:p></o:p></p><div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal style='border:none;padding:0in'><o:p> </o:p></p></div><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'>Mantis 697, 4.3.12 IMPORT/EXPORT statement syntax - Attribute inconsistency<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://www.web3d.org/member-only/mantis/view.php?id=697<o:p></o:p></li></ul><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'>X3D XML Encoding version 4.0, clause 4 Concepts, 4.3.12 IMPORT/EXPORT statement syntax<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://web3d.org/specifications/X3Dv4Draft/ISO-IEC19776-1v4.0-WD1/Part01/concepts.html#IMPORT_EXPORTStatementSyntax<o:p></o:p></li></ul><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.25in'><span style='font-size:12.0pt;color:black;mso-ligatures:none'>The following XML syntax applies to the IMPORT/EXPORT functionality of X3D.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.25in'><span style='font-size:12.0pt;color:black;mso-ligatures:none'>An IMPORT statement consists of an IMPORT element followed by attributes </span><span style='font-size:10.0pt;color:black;mso-ligatures:none'>inlineDEF</span><span style='font-size:12.0pt;color:black;mso-ligatures:none'>, </span><span style='font-size:10.0pt;color:black;background:yellow;mso-ligatures:none'>importedDEF</span><span style='font-size:12.0pt;color:black;background:yellow;mso-ligatures:none'>,</span><span style='font-size:12.0pt;color:black;mso-ligatures:none'> </span><s><span style='font-size:10.0pt;color:black;background:orange;mso-ligatures:none'>exportedDEF</span></s><s><span style='font-size:12.0pt;color:black;background:orange;mso-ligatures:none'>,</span></s><span style='font-size:12.0pt;color:black;mso-ligatures:none'> and <span style='background:yellow'>(optionally)</span> </span><span style='font-size:10.0pt;color:black;mso-ligatures:none'>AS</span><span style='font-size:12.0pt;color:black;mso-ligatures:none'>.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.25in'><span style='font-size:12.0pt;color:black;mso-ligatures:none'>An EXPORT statement consists of an EXPORT element followed by attributes </span><span style='font-size:10.0pt;color:black;mso-ligatures:none'>localDEF</span><span style='font-size:12.0pt;color:black;mso-ligatures:none'> and <span style='background:yellow'>(optionally)</span> </span><span style='font-size:10.0pt;color:black;mso-ligatures:none'>AS</span><span style='font-size:12.0pt;color:black;mso-ligatures:none'>.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:13.5pt;margin-right:0in;margin-bottom:13.5pt;margin-left:.25in'><span style='color:black;mso-ligatures:none'>EXAMPLE <span style='background:yellow'>15 </span><s><span style='background:orange'>2</span></s> The following depicts the XML encoding of an EXPORT statement <span style='background:yellow'>within the inlined InlineExport.x3d model:</span><o:p></o:p></span></p><p class=MsoNormal style='margin-left:.25in'><span style='font-size:10.5pt;color:black;background:yellow;mso-ligatures:none'><!-- file InlineExport.x3d --></span><span style='font-size:10.5pt;color:black;mso-ligatures:none'><br><Transform DEF='T1'> <span style='background:yellow'><!-- contained 3D content --> </Transform></span><br><span style='background:yellow'><!-- Hint: EXPORT statement follows node of interest, since localDEF field is similar to USE with type IDREF --></span><br><EXPORT localDEF='T1' AS='RootTransform'/></span><span style='font-size:12.0pt;color:black;mso-ligatures:none'><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:13.5pt;margin-right:0in;margin-bottom:13.5pt;margin-left:.25in'><span style='color:black;mso-ligatures:none'>EXAMPLE <span style='background:yellow'>16 </span> <s><span style='background:orange'>1</span></s> The following depicts the XML encoding of an IMPORT statement <span style='background:yellow'>within a parent scene that corresponds to a separate Inline model:</span><o:p></o:p></span></p><p class=MsoNormal style='margin-left:.25in'><span style='font-size:10.5pt;color:black;background:yellow;mso-ligatures:none'><!-- file InlineImport.x3d --></span><span style='font-size:10.5pt;color:black;mso-ligatures:none'><br><Inline <span style='background:yellow'>DEF='MyInlineModel' url='"InlineExport.x3d"'</span> <s><span style='background:orange'>DEF='I1' url='"someUrl.x3d"'</span></s>/><br><IMPORT<br> <span style='background:yellow'>inlineDEF='MyInlineModel'</span> <s><span style='background:orange'>inlineDEF='I1'</span></s><br> <span style='background:yellow'>importedDEF='RootTransform'</span> <s><span style='background:orange'>exportedDEF='RootTransform'</span></s><br> <span style='background:yellow'>AS='MyInlineRootTransform'</span> <s><span style='background:orange'>AS='I1Root'</span></s>/><br><OrientationInterpolator DEF='MySpinner' <span style='background:yellow'>key='0 0.3333 0.6667 1' keyValue='0 1 0 0, 0 1 0 2.094395, 0 1 0 4.18879, 0 1 0 0'</span>/><br><ROUTE<br> fromNode='MySpinner' fromField='value_changed'<br> <span style='background:yellow'>toNode='MyInlineRootTransform'</span> <s><span style='background:orange'>toNode='I1Root'</span></s> toField='set_rotation'/></span><span style='font-size:12.0pt;color:black;mso-ligatures:none'><o:p></o:p></span></p><div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal style='border:none;padding:0in'><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’ve created and added a pair of scenes to the X3D Examples archives to demonstrate this functionality. Note that the child model has a Text description that remains stable, while the geometry can get animated by the parent model. These paired models conclusively demonstrate that everything is working satisfactorily.<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'>X3D Example Archives: Basic, X3D Specifications, Inline Export<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineExport.x3d<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineExportIndex.html<o:p></o:p></li></ul><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'>X3D Example Archives: Basic, X3D Specifications, Inline Import<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineImport.x3d<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineImportIndex.html<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'><a href="•%09https:/www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/InlineImportIndex.html"><span style='color:windowtext;text-decoration:none'><img border=0 width=132 height=92 style='width:1.375in;height:.9541in' id="Picture_x0020_1" src="cid:image001.png@01DAB410.5BB66F10"></span></a><o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It was great to see this important functionality working in X3DOM, X_ITE, and Castle Model Viewer. Congratulations and thanks!!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Correct authoring support for Inline, EXPORT and IMPORT nodes is also supported in X3D-Edit.<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>X3D-Edit is a free, open-source Extensible 3D (X3D) Graphics authoring tool for simple high-quality authoring, editing, import/export, validation and viewing of X3D scenes.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>https://savage.nps.edu/X3D-Edit<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Have fun with X3D4 extensibility! <span style='font-family:"Segoe UI Emoji",sans-serif'>😊</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>all the best, Don<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>-- <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>Don Brutzman Naval Postgraduate School, Code USW/Br brutzman@nps.edu<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>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:9.0pt;font-family:"Courier New";mso-ligatures:none'>X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>