<div><div dir="auto">Figuring how to do what Holger proposes, with Python and ElementTree might be difficult. I haven’t analyzed it yet. I have known it’s an issue.</div><div dir="auto"><br></div><div dir="auto">What I will probably do is collect all TouchSensors and all HAnimDisplacers/ScalarInterpolators, and also figure out how to send 0 SFFloat events, probably with a Script. Then generate lots of ROUTEs for routing out of the Script to the displacers/interpolators, and lots of ROUTEs from the TouchSensors to the Script when a Sensor is toggled on or off.</div><div dir="auto"><br></div><div dir="auto">Also, visual feedback in the menu as to which items are selected is also a goal.</div></div><div dir="auto"><br></div><div dir="auto">What I’d like to do is prioritize resetting and multiple simultaneous animations over a single TimeSensor. I know a single TimeSensor is highly desirable! What I’d like to accomplish is get all the ROUTEs we need, and then figure out what needs to be in Switches, with the understanding that nodes will still be active in all Switch choices, even if not visible.</div><div dir="auto"><br></div><div dir="auto">Other possibilities like putting displacers or interpolators in Switches are being considered.</div><div dir="auto"><br></div><div dir="auto">I do like the idea of adding and removing a single ROUTE leading to a cascade for each facial expression attractive. Once we get toggling multiple animations on and off, I’ll tackle that. There may be a need for a way to merge events, like an AND gate.</div><div dir="auto"><br></div><div dir="auto">Here’s the next question. Do we really want to hard reset the animation when animation selection changes? Ideally, the animation being unselected would be reset to 0 (slowly).</div><div dir="auto"><br></div><div dir="auto">So before resetting, I will work on toggling individual animations, such that any subset can be selected.</div><div dir="auto"><br></div><div dir="auto">There’s lots of important work to explore here.</div><div dir="auto"><br></div><div dir="auto">John</div><div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Dec 7, 2024 at 5:12 PM Holger Seelig <<a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-break:after-white-space">The menu is working. The only thing I would change is to send a SFFloat 0 to all interpolators if you click any TouchSensor, to reset all weights.</div><div style="line-break:after-white-space"><div><br></div><div>Holger</div><div><br id="m_-7237900762489999497m_8880680760237482704lineBreakAtBeginningOfMessage"><div>
<div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="text-align:start;text-indent:0px;line-break:after-white-space"><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">--</div><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Holger Seelig</div><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Leipzig, Germany</div><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><br></div><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a></div><div><a href="https://create3000.github.io/x_ite/" target="_blank">https://create3000.github.io/x_ite/</a></div></div></div></div></div></div></div>
</div>
<div><br><blockquote type="cite"><div>Am 08.12.2024 um 00:06 schrieb John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>>:</div><br><div><div dir="auto">I’m on board with multiple TimeSensors, but Joe is saying one TimeSensor. *shrugs*</div><div dir="auto"><br></div><div dir="auto">The link previously sent does this. I really need to figure out how to select multiple animations at the same time. That’s harder, and resetting each animation may be required for a good result.</div><div dir="auto"><br></div><div dir="auto">I think the issue is that the weight in the HAnimDisplacer doesn’t get reset.</div><div dir="auto"><br></div><div dir="auto">John</div><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Dec 7, 2024 at 4:08 PM Holger Seelig <<a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-break:after-white-space"><span>With animations, it is actually usual to only have as many TimeSensor nodes as there are animations and then switch them on and off one after the other by toggling the *enabled* field, or via *startTime* and *stopTime*. The *fraction_changed* field of each TimeSensor node can also be connected to several interpolators, which is more optimal.</span></div><div style="line-break:after-white-space"><div><br></div><div>Holger</div><br><div>
<div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="text-align:start;text-indent:0px;line-break:after-white-space"><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">--</div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Holger Seelig</div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Leipzig, Germany</div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><br></div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a></div><div><a href="https://create3000.github.io/x_ite/" target="_blank">https://create3000.github.io/x_ite/</a></div></div></div></div></div></div></div>
</div>
<div><br><blockquote type="cite"><div>Am 07.12.2024 um 22:58 schrieb John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>>:</div><br><div><div dir="auto">What I get from that is I have to keep a list of ROUTEs for each animation and add and remove them as each facial animation is toggled.</div><div dir="auto"><br></div><div dir="auto">My argument is to possibly change X3D semantics to go along with what the AI suggested, such that ROUTEs can be enabled/disabled by including them in Switches. But perhaps I can do something with addChildren and removeChildren without using SAI?</div><div dir="auto"><br></div><div dir="auto">I’m stumbling around for answers which are probably in event utilities, except in a much less understandable way. I’m looking for something straightforward. If anyone has a mechanism to enable HAnimDisplacers in groups without Switch, how did you do it?</div><div dir="auto"><br></div><div dir="auto">At some point, I just try it and see what happens. I’m wondering if someone else has solved this without Switches.</div><div dir="auto"><br></div><div dir="auto">John</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Dec 7, 2024 at 3:41 PM Holger Seelig via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-break:after-white-space">Routes are not part of the scene-graph. They exist outside of it. Every X3DExecutionContext has a list of all routes:<div><br></div><div><a href="https://www.web3d.org/documents/specifications/19777-1/V3.3/Part1/functions.html#ExecutionContextServices" target="_blank">https://www.web3d.org/documents/specifications/19777-1/V3.3/Part1/functions.html#ExecutionContextServices</a></div><div><br></div><div>Holger</div><div><br id="m_-7237900762489999497m_8880680760237482704m_-8865548893301351570m_9524295683080952lineBreakAtBeginningOfMessage"><div>
<div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="text-align:start;text-indent:0px;line-break:after-white-space"><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">--</div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Holger Seelig</div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Leipzig, Germany</div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><br></div><div style="letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a></div><div><a href="https://create3000.github.io/x_ite/" target="_blank">https://create3000.github.io/x_ite/</a></div></div></div></div></div></div></div>
</div>
<div><br><blockquote type="cite"></blockquote></div></div></div><div style="line-break:after-white-space"><div><div><blockquote type="cite"><div>Am 07.12.2024 um 22:16 schrieb John Carlson via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>>:</div><br></blockquote></div></div></div><div style="line-break:after-white-space"><div><div><blockquote type="cite"><div></div></blockquote></div></div></div><div style="line-break:after-white-space"><div><div><blockquote type="cite"><div><div dir="auto">Okay, I’m attempting to read the spec:</div><div dir="auto"><br></div><div dir="auto">“<span style="font-family:verdana,arial,helvetica,sans-serif;font-size:26px;background-color:rgb(255,255,255)">All nodes under a Switch continue to receive and send events regardless of the value of </span><i style="font-family:verdana,arial,helvetica,sans-serif;font-size:26px;background-color:rgb(255,255,255)">whichChoice</i><span style="font-family:verdana,arial,helvetica,sans-serif;font-size:26px;background-color:rgb(255,255,255)">. For example, if an active TimeSensor is contained within an inactive choice of a Switch, the TimeSensor sends events regardless of the Switch's state.”</span></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)"><br></span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)">So I’m guessing that ROUTEs are not nodes, and thus are susceptible to stop receiving and sending events in a Switch.</span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)"><br></span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)">I don’t even know if ROUTEs can send and receive events. Sure, they can transmit or transfer events.</span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)"><br></span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)">Clarification in some place in the standard is welcome!</span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)"><br></span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)"><br></span></font></div><div dir="auto"><font face="verdana, arial, helvetica, sans-serif"><span style="font-size:26px;background-color:rgb(255,255,255)">John <br></span></font><div dir="auto"><br></div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Dec 7, 2024 at 2:40 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">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">Would it be possible to put an animation’s ROUTEs in a Switch that could be toggled on and off with a boolean toggle?</div><div dir="auto"><br></div><div dir="auto">Google AI says:</div><div dir="auto"><br></div><div dir="auto"><div><div><div><div style="margin:0px 0px 20px">Yes, you can absolutely put "ROUTE" nodes within a "Switch" node in X3D; in fact, it's a common practice to use them together to dynamically control which set of connections (via ROUTE) are active depending on which child node of the Switch is currently selected.<span style="white-space:nowrap"> <div style="margin-right:6px;vertical-align:middle"><div style="display:inline-block;vertical-align:middle;outline:0px"><div style="width:28px;outline:solid 1px;border-radius:9999px;margin:0px auto;height:20px;min-height:20px;background-color:transparent"><div style="width:28px;border-radius:9999px;height:20px"><span style="margin:0px;color:rgb(11,87,208)"><span style="display:inline-block;height:18px;line-height:18px;width:18px"></span></span></div></div></div></div></span></div></div></div><div><div style="font-family:"google sans",roboto,"helvetica neue",arial,sans-serif;font-size:23.4px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;color:rgb(0,29,53)"></div></div><br></div>I didn’t realize that statements were affected by Switch.</div><div dir="auto"><br></div><div dir="auto">John</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Dec 7, 2024 at 1:43 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></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:rgb(204,204,204)">We are dealing with multiple facial animations. The thing we want to do is combine animations using HAnimDisplacers. Currently, our animations go from key = 0 to key = 1, (weight = 0 to weight = 1) and each animation is controlled by a single TimeSensor that we enable or disable. What we want to do is enable multiple facial animations, yet retain a single TimeSensor. I have done something with enabling multiple time sensors all at the same time. So, ideally, we could toggle each facial animation individually.<div dir="auto"><br></div><div dir="auto">Note that one can have multiple simultaneous HAnimDisplacer animations on a single Coordinate, they all add up just fine. There’s no single animation per body part requirement as there is in other places in X3D (according to Michalis, from my understanding).</div><div dir="auto"><br></div><div dir="auto">I don’t currently know how to individually toggle multiple animations without toggling multiple TimeSensors, so assistance is welcome! Indeed, a multiple toggle button X3D example would be welcome (hopefully, something we can put in a scenegraph).</div><div dir="auto"><br></div><div dir="auto">Here’s what we currently have <div><a href="https://github.com/coderextreme/ci2had/blob/main/resources/SingleMenuJin.x3d" target="_blank">https://github.com/coderextreme/ci2had/blob/main/resources/SingleMenuJin.x3d</a></div><div dir="auto"><br></div><div dir="auto">As you can see, lots of duplication.</div><div dir="auto"><br></div><div dir="auto">Viewed best in FreeWRL and Sunrize/X_ITE.</div></div><div dir="auto"><br></div><div dir="auto">John </div>
</blockquote></div></div>
</blockquote></div></div></div></blockquote></div></div></div><div style="line-break:after-white-space"><div><div><blockquote type="cite"><div>
_______________________________________________<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></div></blockquote></div><br></div></div>_______________________________________________<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" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div></div>
</div></blockquote></div><br></div></blockquote></div></div>
</div></blockquote></div><br></div></div></blockquote></div></div>
</div>