<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=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@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:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></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-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Hi all,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>I did recall later that MetadataBoolean can be used in MetadataSet, not just in the metadata field, but also in the value field.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>And another example is any node derived from X3DRigidJointNode, which has the two fields body1 and body2, both of which take a RigidBody child node.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>And going back to your comments on the Collision node having both children, an MFNode field, and proxy an SFNode field; all you can deduce without reference to containerField info, is that a maximum of one child goes into proxy.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Roy<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Andreas Plesch [mailto:andreasplesch@gmail.com] <br><b>Sent:</b> 10 October 2016 22:56<br><b>To:</b> Roy Walmsley <roy.walmsley@ntlworld.com><br><b>Cc:</b> X3D Graphics public mailing list <x3d-public@web3d.org>; doug sanden <highaspirations@hotmail.com><br><b>Subject:</b> Re: [x3d-public] getContainerField() [was cobweb DOM integration]<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><div><div><div><p class=MsoNormal>On Mon, Oct 10, 2016 at 3:47 PM, Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>> wrote:<o:p></o:p></p><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><p>Hi Roy,<o:p></o:p></p><p>On Oct 10, 2016 10:27 AM, "Roy Walmsley" <<a href="mailto:roy.walmsley@ntlworld.com" target="_blank">roy.walmsley@ntlworld.com</a>> wrote:<br>>...<br>> Q1 – Usually (always) just one field for a given parent nodetype. I don’t have an exhaustive answer, but I will give an example. It may be the only one, not sure. Look at the Collision node, (19775-1, 23.4.2, <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/navigation.html#Collision" target="_blank">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/navigation.html#Collision</a>. Note that there is a children field and a proxy field, both of which accept X3DChildNode. In other words, what can go in one can also go in the other.<br>><o:p></o:p></p><p>This may not be the best example since children is a mfnode and proxy is a sfnode. So based on the node type of the child it would be still possible to determine which field is targeted ?<o:p></o:p></p></div></blockquote></div><p class=MsoNormal style='margin-bottom:12.0pt'>I was grepping through the web3d and savage examples to get a quick sense of how containerField is used. One type of usage seems to be just repeating the default containerField value, presumably as an aid for a human interpreter of the x3d, particularly in the savage archive. Another type of usage is with user defined fields in proto instances where the default container field value necessarily does not apply. A third type is with certain components: H-Anim, Rigid Body seem to use it most. Volume Rendering, as Doug noticed, also requires containerField='voxels' for VolumeData.<o:p></o:p></p></div><div><p class=MsoNormal>I can see why for XML it was decided to have containerField rather than wrapper tags. It is awkward to have a <Children> element under grouping nodes when the wrapped elements are actually child nodes, and particularly so when repeated many times. But containerField is also a rather unintuitive concept, requiring to think 'backwards', eg. up the hierarchy. Well, I am sure this was discussed at length and it would be difficult to come up with a better solution without deep changes.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>-Andreas<o:p></o:p></p></div></div></div></body></html>