<div dir="auto">Here’s the current cleanup.py code:</div><div dir="auto"><br></div><div dir="auto"><div><a href="https://github.com/coderextreme/ci2had/blob/main/python/cleanup.py">https://github.com/coderextreme/ci2had/blob/main/python/cleanup.py</a></div><div dir="auto"><br></div>I should be able to put the displacer remove from parent outside the if, and then add an if for inserting the displacer at position 0 of the parent.</div><div dir="auto"><br></div><div dir="auto">I don’t see a specific quote in the spec that displacers should be put first in segment, but it’s an ok convention, especially if one is searching through user code.</div><div dir="auto"><br></div><div dir="auto">I will do what I can.</div><div dir="auto"><br></div><div dir="auto">John<br><div class="gmail_quote gmail_quote_container" dir="auto"><div dir="ltr" class="gmail_attr">On Wed, Feb 5, 2025 at 2:14 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">What I’m hearing is HAnimDisplacer should be the first node under HAnimSegment.</div><div dir="auto"><br></div><div dir="auto">What I will do in cleanup.py is delete the HAnimDisplacer in HAnimSegment and insert it back at position 0 in the segment.</div><div dir="auto"><br></div><div dir="auto">John </div><div dir="auto"><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">On Wed, Feb 5, 2025 at 1:57 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin:0.1rem 0;line-height:1.0">> <span style="font-size:12pt">The reason is that Displacers are currently implemented in x3dom only for Joints, but not for Segments, unfortunately. </span></p>
<p style="margin:0.1rem 0;line-height:1.0"><span style="font-size:12pt"> </span></p>
<p style="margin:0.1rem 0;line-height:1.0"><span style="font-size:12pt">Please fix because we need to show this working everywhere, level 1 and Level 2. </span></p>
<p style="margin:0.1rem 0;line-height:1.0"><span style="font-size:12pt"> </span></p>
<p style="margin:0.1rem 0;line-height:1.0"><span style="font-size:12pt"><a href="https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/ObjectInterfaces.html#Segment" target="_blank">https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/ObjectInterfaces.html#Segment</a></span></p>
<p style="margin:0.1rem 0;line-height:1.0"><span style="font-size:12pt"> </span><span style="font-size:12pt"> </span></p>
<p style="margin:0.1rem 0;line-height:1.0">So we have several shapes that produce this face and thus several Displacer nodes </p>
<p style="margin:0.1rem 0;line-height:1.0">to control the various shapes to produce the motion and target pose. </p>
<p style="margin:0.1rem 0;line-height:1.0"> . </p>
<p style="margin:0.1rem 0;line-height:1.0">Most all individual shapes of this face, except those associated with other </p>
<p style="margin:0.1rem 0;line-height:1.0">Joints of the skull <span style="font-size:12pt">like eyes and jaw, are children of </span>skullbase<span style="font-size:12pt"> Joint. </span></p>
<p style="margin:0.1rem 0;line-height:1.0">If all Displacer nodes and all the shapes that produce the face are placed under the </p>
<p style="margin:0.1rem 0;line-height:1.0">skullbase Joint then there is no way to tell each Displacer which Shape to work on. </p>
<p style="margin:0.1rem 0;line-height:1.0">So, since both Joint and Segment can contain Displacer nodes we just made up a </p>
<p style="margin:0.1rem 0;line-height:1.0">Segment that holds the the geometry and placed the Displacer there. </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0">I think the general rule is for Level 1 is that a Displacer associated with geometry </p>
<p style="margin:0.1rem 0;line-height:1.0">of a Segment is to be placed as first child of the Segment node. </p>
<p style="margin:0.1rem 0;line-height:1.0">For Level 2, continuous mesh there may also be be several Displacer nodes </p>
<p style="margin:0.1rem 0;line-height:1.0">operating at various times so those Displacer nodes are placed as first children </p>
<p style="margin:0.1rem 0;line-height:1.0">of an appropriate Joint, or the first Joint. </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0">Since in this case that Level 1 hierarchy results in several shapes and displacers all under </p>
<p style="margin:0.1rem 0;line-height:1.0">a single Joint, the skullbase, we decided to try adding a Segment to skullbase to hold </p>
<p style="margin:0.1rem 0;line-height:1.0">each geometry and the associated Displacers for the various poses. </p>
<p style="margin:0.1rem 0;line-height:1.0">This seemed to work that I think I saw somewhere, and, to me, if done consistenty, </p>
<p style="margin:0.1rem 0;line-height:1.0">should work everywhere. </p>
<p style="margin:0.1rem 0;line-height:1.0">Notice joekick works fine for Level 2 with displacers in Joint. </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0">Thanks for Fun with HAnim Displacer, </p>
<p style="margin:0.1rem 0;line-height:1.0">Joe</p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
</div>
<div style="border-left:1px solid #aaa;box-sizing:border-box;padding:10px 0 10px 15px;margin:0">
<p>-----Original Message-----<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>Sent: Feb 5, 2025 10:31 AM<br>To: Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>>, Holger Seelig <<a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a>>, X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>Cc: Joe D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>><br>Subject: Re: Turning on and off simultaneous animations individually</p>
<p style="margin:0.1rem 0;line-height:1.0"> </p>
<div dir="auto">I had one I sent to Holger, probably derived from this one:</div>
<div dir="auto"> </div>
<div dir="auto">
<div><a href="https://github.com/coderextreme/ci2had/blob/main/resources/JinMouthStretch.x3d" target="_blank">https://github.com/coderextreme/ci2had/blob/main/resources/JinMouthStretch.x3d</a></div>
<div dir="auto"> </div>
<div dir="auto"> </div>
What I would do (again) is take out all the segments but the tongue.</div>
<div dir="auto"> </div>
<div dir="auto">There’s no menus involved in this one.</div>
<div dir="auto"> </div>
<div dir="auto">If you need further assistance, like a smaller example, I can help. Also all the Jin*.x3d FACS action units can also provide examples.</div>
<div dir="auto"> </div>
<div dir="auto">I’ll be pretty unbusy today. I can allocate some time for creating a model, make sure it animates, etc.</div>
<div dir="auto"> </div>
<div dir="auto">If you’re able to allocate some time today, great, we have an HAnim meeting tomorrow and showing off X3DOM editor using Displacers would be fantastic!</div>
<div dir="auto"> </div>
<div dir="auto">Remember there’s a coord field in HAnimSegment that the HAnimDisplacer operates on!</div>
<div dir="auto"> </div>
<div dir="auto">John</div>
<div dir="auto"> </div>
<div dir="auto">
<div class="gmail_quote" dir="auto">
<div class="gmail_attr" dir="ltr">On Wed, Feb 5, 2025 at 12:01 PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="ltr">
<div dir="auto">
<div>Hi John,
<div dir="auto"> </div>
<div dir="auto">The reason is that Displacers are currently implemented in x3dom only for Joints, but not for Segments, unfortunately. Do you know of a simple but instructive test case of Segments with Displacers ?</div>
</div>
</div>
</div>
<div dir="ltr">
<div dir="auto">
<div>
<div dir="auto"> </div>
<div dir="auto"> </div>
<div dir="auto">Andreas</div>
<br><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Tue, Feb 4, 2025, 2:33 PM John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="auto">I will try to test this in castle model converter.</div>
<div dir="auto"> </div>
<div dir="auto">I did try setting a value for the outputOnly fields, but the converter wouldn’t shut up.</div>
<div dir="auto"> </div>
<div dir="auto">The model below doesn’t seem to animate when one presses the menu items. Did you get it to animate?</div>
<div dir="auto"><br>
<div class="gmail_quote" dir="auto">
<div class="gmail_attr" dir="ltr">On Tue, Feb 4, 2025 at 12:27 PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener noreferrer" target="_blank">andreasplesch@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="ltr">
<div>Hi John, all,</div>
<div> </div>
<div>It turns out that x3dom currently expects a default value for Proto fields even for outputOnly fields. This is due to how Proto fields are initialized. They always need to have a value. While the spec. does not require this, it seems still good practice to always define a default value in the ProtoInterface. There may be a case where an outputOnly field is used in ISing where a valid value would be expected. There may be other corner cases.</div>
<div> </div>
<div>Here is your example with added default values for outputOnly fields:</div>
<div> </div>
<div><a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://gist.githubusercontent.com/andreasplesch/af5ff3148c1159f71d34fb78c1f63024/raw/b3d4470107ab74e301ed48448ab2a4f4154672e0/ManyClocks_John.x3d" rel="noopener noreferrer" target="_blank">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://gist.githubusercontent.com/andreasplesch/af5ff3148c1159f71d34fb78c1f63024/raw/b3d4470107ab74e301ed48448ab2a4f4154672e0/ManyClocks_John.x3d</a></div>
<div> </div>
<div>This could be fixed in x3dom, by always setting some default value. Is there a list of recommended defaults for each data type if no other source of defaults is available? For SFTime it seems to be -1.</div>
</div>
<div dir="ltr">
<div> </div>
<div> </div>
<div>-Andreas</div>
<div> </div>
</div>
<br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Mon, Feb 3, 2025 at 7:39 AM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener noreferrer" target="_blank">andreasplesch@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="ltr">
<div>Hi John,</div>
<br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Mon, Feb 3, 2025 at 12:48 AM John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener noreferrer" target="_blank">yottzumm@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="ltr">Andreas, "startTime" is an accessType outputOnly field, so why do I need to provide a value attribute in fieldValue? I'm kind of confused. I'm probably missing something in the spec.</div>
</blockquote>
<div> </div>
<div>You are right, I only outlined scenarios where the accessType allows input or initialization..</div>
<div>In the outputOnly case it is not necessary to provide a fieldValue node at all since there is no value which can be provided. Providing the node would indeed be confusing, to both the user code reader and any X3D browser.</div>
<div>I believe the spec. is silent on this case in any encoding.</div>
<div> </div>
<div>Best, Andreas</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="ltr">
<div>Thanks for any clarification.</div>
<div> </div>
<div>I have finally enabled schematron on the project, but I'm finding it hard to understand the messages, and modifications that I make, while removing the immediate problems, seem to move the problems elsewhere.</div>
<div> </div>
<div>Explaining why I need a "startTime" fieldValue value is my main lack of understanding, but perhaps I need a whole review of accessType.</div>
<div> </div>
<div>Castle Model Converter reports:</div>
<div> </div>
<div>castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element references unknown field name "enabled"<br>castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element references unknown field name "startTime"<br>castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element references unknown field name "stopTime"</div>
<div> </div>
<div>I will try providing a field value in the ProtoInterface</div>
<div> </div>
<div>If I "cleanup" enabled, startTime and stopTime, I get:</div>
<div> </div>
<div>castle-model-converter: Warning: VRML/X3D: Within prototype "MenuItem", event "inputTrue" references (by "IS" clause) non-existing event "enabled"<br>castle-model-converter: Warning: VRML/X3D: Within prototype "MenuItem", event "triggerTime" references (by "IS" clause) non-existing event "startTime"<br>castle-model-converter: Warning: VRML/X3D: Within prototype "MenuItem", event "triggerTime" references (by "IS" clause) non-existing event "stopTime"</div>
<div> </div>
<div>I guess what I conclude at this point is, startTime and stopTime are bad DEF names, but what about enabled as a field? The dominoes are falling.</div>
<div> </div>
<div>About your two scenarios in the other message, perhaps this is revealing.</div>
<div> </div>
<div>See attached attempt to fix original issue, which resulted in the above.</div>
<div> </div>
<div>John</div>
</div>
<br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Sun, Feb 2, 2025 at 3:59 PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener noreferrer" target="_blank">andreasplesch@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="ltr">
<div>I think x3dom, reasonably, expects a value for the fieldValue nodes:</div>
<div> </div>
<div>For example:</div>
<div> </div>
<fieldValue name="startTime" />
<div> </div>
<div>and others.</div>
</div>
<br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Sun, Feb 2, 2025 at 5:42 AM John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener noreferrer" target="_blank">yottzumm@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="ltr">
<div>Andreas, Joe,</div>
<div> </div>
<div>Reset Button, Reset_Clock added.</div>
<div> </div>
<div>See attached zip for details, or visit link;</div>
<div> </div>
<div><a href="https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d" rel="noopener noreferrer" target="_blank">https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d</a></div>
<div> </div>
<div>For some reason, this link doesn't show the live scene?</div>
<div> </div>
<div><a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d" rel="noopener noreferrer" target="_blank">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d</a></div>
<div> </div>
<div>Puzzled, haven't researched it yet. Looks good in Sunrize and X_ITE, will try FreeWRL next.</div>
<div> </div>
<div>John</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc">
<div dir="auto">
<div class="gmail_quote" dir="auto"> </div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
<div> </div>
<div> </div>
<span class="gmail_signature_prefix">-- </span><br>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div>Andreas Plesch<br>Waltham, MA 02453</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
<div> </div>
<div> </div></div></blockquote></div></blockquote></div></div></blockquote></div></div></div></div></blockquote></div></div></div><div style="border-left:1px solid #aaa;box-sizing:border-box;padding:10px 0 10px 15px;margin:0"><div dir="auto"><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc"><div dir="ltr"><div dir="auto"><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc"><div dir="auto"><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:#cccccc"><div dir="ltr">
<span class="gmail_signature_prefix">-- </span><br>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div>Andreas Plesch<br>Waltham, MA 02453</div>
</div>
</div>
</div>
</blockquote>
</div>
<div> </div>
<br><span class="gmail_signature_prefix">-- </span><br>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div>Andreas Plesch<br>Waltham, MA 02453</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<p style="margin:0.1rem 0;line-height:1.0"> </p></blockquote></div></div>
</blockquote></div></div>