<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;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 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.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
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.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:Consolas;}
span.EmailStyle22
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@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:525563137;
mso-list-type:hybrid;
mso-list-template-ids:-1283014978 -1536009564 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:16;
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;}
@list l1
{mso-list-id:712733756;
mso-list-template-ids:-978675252;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2
{mso-list-id:789476503;
mso-list-type:hybrid;
mso-list-template-ids:1159905160 -1980734240 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:.25in;
text-indent:-.25in;}
@list l2:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:.75in;
text-indent:-.25in;}
@list l2:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
margin-left:1.25in;
text-indent:-9.0pt;}
@list l2:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:1.75in;
text-indent:-.25in;}
@list l2:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:2.25in;
text-indent:-.25in;}
@list l2:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
margin-left:2.75in;
text-indent:-9.0pt;}
@list l2:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:3.25in;
text-indent:-.25in;}
@list l2:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:3.75in;
text-indent:-.25in;}
@list l2:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
margin-left:4.25in;
text-indent:-9.0pt;}
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><ol style='margin-top:0in' start=1 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l2 level1 lfo3'>Sorry to be unclear, that was not the relevant reference, rather the prior email in the thread.<o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>My mail of 9 June 16:30:04 PDT 2023 holds the relevant reference. Excerpt follows, quoting a quote, and have provided yellow highlights to key phrasing this time.<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 lfo2'>[x3d-public] Problem in x3dviewscene: ROUTE placement<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-June/018836.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>The intent for ROUTE is that it might appear within other nodes. The<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>phrasing in X3D4 Architecture is quite explicit about this:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>* X3D 4.0 Part 1: Architecture and base components, clause 4 Concepts, 4.4.8.2 Routes<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>*</span> <span style='font-size:10.0pt;font-family:"Courier New";color:black'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.proof/Part01/concepts.html#Routes<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>* Routes allows an author to declaratively connect the output events<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>of a node to input events of other nodes, providing a way to implement<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>complex behaviors without imperative programming. When a routed output event<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>is fired, the corresponding destination input event receives notification<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>and can process a response to that change. This processing can change the<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>state of the node, generate additional events, or change the structure of<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>the scene graph. Routes may be created declaratively in an X3D file or<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>programmatically via an SAI call.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>* Routes are not nodes. The ROUTE statement is a construct for<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>establishing event paths between specified fields of nodes. <span style='background:yellow;mso-highlight:yellow'>ROUTE statements<o:p></o:p></span></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black;background:yellow;mso-highlight:yellow'>may either appear at the top level of an X3D file or inside a node wherever<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black;background:yellow;mso-highlight:yellow'>fields may appear.</span><span style='font-size:10.0pt;font-family:"Courier New";color:black'> A ROUTE statement shall only appear after the definition<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>of the source and destination nodes. <span style='background:yellow;mso-highlight:yellow'>Placing a ROUTE statement within a node<o:p></o:p></span></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black;background:yellow;mso-highlight:yellow'>does not associate it with that node in any way.</span><span style='font-size:10.0pt;font-family:"Courier New";color:black'> A ROUTE statement does<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'><span style='font-size:10.0pt;font-family:"Courier New";color:black'>follow the name scoping rules as described in 4.4.7 Run-time name scope.<o:p></o:p></span></p><p class=MsoNormal style='border:none;padding:0in'><span style='font-size:10.0pt;font-family:"Courier New";color:black'><o:p> </o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=2 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l2 level1 lfo3'>I next took the offered example scene<o:p></o:p></li></ol><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter08AnimatingPositionOrientationScale/Figure08_3PositionInterpolator.x3d<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>and moved entire scene graph within Scene inside a Group, i.e.<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'><Scene><Group><!—everything including ROUTE statements --></Group></Scene><o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>Thus nothing remains in top-level MFNode list of the scene, except for single parent Group<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Then tested the modified example.<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>All validation tests passed.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>Xj3D worked.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>X3DOM worked.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>After 10 minutes of reporting to Microsoft that view3dscene was legitimate, and coercing Windows 10 to accept it, view3dscene.exe worked on this modified example too.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>Searching for “<ROUTE” found 4989 matches in first 500 scenes searched (out of 4060 total archived scenes) so no doubt there are more.<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=3 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l2 level1 lfo3'>To my prior list of benefits for flexible placement of ROUTE statements, here is another:<o:p></o:p></li></ol><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>Simplifies author and tool addition of code-block patterns and templates within a scene (this a feature used numerous times as an optional authoring assist for event tracing by X3D-Edit, likely to be added as utility features in X3DJSAIL and X3DPSAIL someday as well.)<o:p></o:p></li></ul><p class=MsoNormal>Specifically, from X3D-Edit documentation,<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'><u>Trace capabilities</u> are available for ROUTE, sensors, interpolators and other nodes that produce or consume events. <u>Trace output results</u> are logged on the browser console to show the timing and values passed events. When the <b>Trace</b> checkbox is selected by the author, a Script node is inserted immediately after the node to accomplish this task. This is a useful debugging technique.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>https://savage.nps.edu/X3D-Edit/images/TraceFeatureReportsRoutedEventValuesOnBrowserConsoleViaScriptOutput.png<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'>https://x3dgraphics.com/examples/X3dForWebAuthors/Chapter07-EventAnimationInterpolation/Chapter07-EventAnimationInterpolation-EventTracing.pdf<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=4 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l2 level1 lfo3'>“Consistency across all file encodings and language bindings is possible.” This is our basic design principle for separation of functionality in X3D architecture from implementation details in all related specifications.<o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We have immense interoperability already. As promised many times, we will smooth out any mismatches in future X3D 4.0 file encodings and language bindings. Test cases do help too. So stand by for action.<o:p></o:p></p><p class=MsoListParagraph style='margin-left:.25in'><o:p> </o:p></p><p class=MsoNormal>Hopefully the highlighted specification requirement, the ease of creating flexible test cases, and the value of this existing specification capability is presented more clearly now.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Careful consideration, implementation efforts, and consensus-based progress are always appreciated.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Having fun with X3D… I hope that others are too.<o:p></o:p></p><div><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New"'>all the best, Don<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New"'>-- <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.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:9.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:9.0pt;font-family:"Courier New"'>X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> vmarchetti@kshell.com <vmarchetti@kshell.com> <br><b>Sent:</b> Sunday, June 11, 2023 4:42 PM<br><b>To:</b> Brutzman, Donald (Don) (CIV) <brutzman@nps.edu>; X3D-Public <x3d-public@web3d.org><br><b>Cc:</b> Michalis Kamburelis <michalis.kambi@gmail.com><br><b>Subject:</b> Re: [x3d-public] Problem in x3dviewscene: ROUTE placement<o:p></o:p></p></div></div><div><div><p class=MsoNormal><br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal>On Jun 11, 2023, at 5:09 PM, Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>Not trying to invent anything here, rather point out what is specified (and also common practice). I already gave the relevant links in the X3D 4.0 Architecture governing what is required. <o:p></o:p></p></div></div></blockquote><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>I do not see this requirement given or even implied in the link you specified:<o:p></o:p></p></div><div><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='margin-top:0in;margin-bottom:0in;mso-list:l1 level1 lfo1'><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.proof/Part01/fieldTypes.html">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.proof/Part01/fieldTypes.html</a><o:p></o:p></li></ul><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>is a comprehensive listing of the X3D Field types, with details on SFNode and MFNode therein, and on this page I don't see any mention of the ROUTE statement nor does a text search on that page discover even the terms "route" or "statement" in isolation.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>...<o:p></o:p></p></div></div><div><p class=MsoNormal><br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><div><p class=MsoNormal>Consistency across all file encodings and language bindings is possible.<o:p></o:p></p></div></div></blockquote><div><p class=MsoNormal>I don't this this statement is true, or to the extent that it is true, then long - ago X3D design decisions did not treat it as of primary importance. As Michalis pointed out, in the ClassicVRML encoding the zero or more items in a single MFNode value are syntactically enclosed in square brackets. Moreover, in the ClassicVRML encoding all the field values are explicitly identified with the name of the field. However, in the X3D encoding the XML child elements are in most cases identified as belonging to an X3D field through the node type-inheritance classification; and in the few cases where that is not possible an explicit "containerField" XML attribute is used. To make the X3D encoding consistent with ClassicVRML would entail the use of wrapper XML elements around the element encoding of one node-element for an SFNode value, or the several nodes of MFNode. However, the design decision was made long ago not to use wrapper elements in the XML encoding ( see <a href="https://www.web3d.org/x3d/content/examples/Basic/development/WrapperTagsConsideredHarmful.html">https://www.web3d.org/x3d/content/examples/Basic/development/WrapperTagsConsideredHarmful.html</a> )<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>My point is that the consistency among encodings is a useful criteria but should not automatically take precedence over other considerations. One such consideration is maintainging stability of our formal ClassicVRML grammar.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>And I think there is little additional benefit in changing the the ClassicVRML to allow ROUTE inside MFNode encodings. Doing so does allow a ROUTE to be placed adjacent to a node whose fields it modifies and you (Don) have pointed out the readability benefits that offers -- but Michalis points out that the ClassicVRML already allows that ROUTE statement to be placed inside the body of a node it modifies, even closer!<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Vince Marchetti<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div></div></div></div></body></html>