<div dir="ltr"><div dir="auto">Joe wants lower precision numbers output from x3d.py.  I could care less.  There’s example code in</div><div dir="auto"><br><div dir="auto"><a href="https://github.com/coderextreme/BlenderX3DSupport/blob/main/io_scene_x3dv/blender/exp/x3dv_blender_export.py" target="_blank">https://github.com/coderextreme/BlenderX3DSupport/blob/main/io_scene_x3dv/blender/exp/x3dv_blender_export.py</a></div><div dir="auto"><br></div><div dir="auto">please look for chicenter and center, lines 662-732.</div><div dir="auto"><br></div><div dir="auto">Note that the lengthUnitConversion can be 0.01 to convert cm to m.  We realize this can be done with a UNIT statement.  Not all of our clients’ data is in m, so we convert all numbers to m by multiplying, which is where the problem started.  If the UNIT statement works across all browsers, we will gladly switch to it.</div><div dir="auto"><br></div><div dir="auto">We can also patch by providing a scale field, but I’m not sure if scaling applies to interpolators in all cases.  Some browser vendors say that transforms do not apply to interpolators, and recommend moving them outside of Transforms.</div><div dir="auto"><br></div><div dir="auto">Please consider this use case of x3d.py.  It seems like you’re only focused on a single use case, some programmer constructing a whole scenegraph as a unit, by hand.  I will try to create a better test case, but I’d rather think of possible solutions.  I will work on finding test cases with HAnim.</div><div dir="auto"><br></div><div dir="auto">John </div></div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 24, 2023 at 9:22 PM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div><p class="MsoNormal">I have no idea what you are talking about because you have not created a test case that explains what you want.  Sorry.<u></u><u></u></p><div><p class="MsoNormal"><span style="font-size:9pt;font-family:"Courier New""><u style="font-family:"Courier New""></u> <u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:9pt;font-family:"Courier New"">all the best, Don<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:9pt;font-family:"Courier New"">-- <u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:9pt;font-family:"Courier New"">Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" style="font-family:"Courier New"" target="_blank">brutzman@nps.edu</a><u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:9pt;font-family:"Courier New"">Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:9pt;font-family:"Courier New"">X3D graphics, virtual worlds, navy robotics <a href="https://faculty.nps.edu/brutzman" style="font-family:"Courier New"" target="_blank">https://faculty.nps.edu/brutzman</a><u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p></div><p class="MsoNormal"><u></u> <u></u></p><div><div style="border-width:1pt medium medium;border-style:solid none none;padding:3pt 0in 0in;border-color:rgb(225,225,225) currentcolor currentcolor"><p class="MsoNormal"><b>From:</b> John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> <br><b>Sent:</b> Thursday, October 19, 2023 9:16 AM<br><b>To:</b> GPU Group <<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>><br><b>Cc:</b> Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>>; Peitso, Loren (CIV) <<a href="mailto:lepeitso@nps.edu" target="_blank">lepeitso@nps.edu</a>>; X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br><b>Subject:</b> Re: Thoughts for x3d.py str() calls<u></u><u></u></p></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><div><p class="MsoNormal">There are 239 instances of "str" in X3duomToX3dPythonPackage.xslt.  208 of them are not related to isinstance<u></u><u></u></p></div></div></div></div></div><div lang="EN-US"><div><div><div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Please advise before I go sailing in modifying them to another function.  This looks like a major modification.<u></u><u></u></p></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Thu, Oct 19, 2023 at 11:09 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<u></u><u></u></p></div><blockquote style="border-width:medium medium medium 1pt;border-style:none none none solid;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in;border-color:currentcolor currentcolor currentcolor rgb(204,204,204)"><div><div><p class="MsoNormal">Redeclaring the float class doesn't seem to work, isinstance fails <u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Monkey patching doesn't work:<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><div><p class="MsoNormal">def custom_float_str(value):<u></u><u></u></p></div><div><p class="MsoNormal">    return f"{value:.5g}"<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"># Monkey-patch the float class<u></u><u></u></p></div><div><p class="MsoNormal">float.__str__ = custom_float_str<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Overriding the str function doesn't work, because that overrides the str type as well.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Adding methods to SFFloat doesn't seem to work.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I'm pretty much bamboozled, and the next step is to replace many str() calls in x3d.py with my own function, which was my original idea.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Another idea is to convert all floating point input to x3d.py to strings.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Hmm! I don't like python much, as a beginner.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Thu, Oct 19, 2023 at 9:56 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<u></u><u></u></p></div><blockquote style="border-width:medium medium medium 1pt;border-style:none none none solid;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in;border-color:currentcolor currentcolor currentcolor rgb(204,204,204)"><div><p class="MsoNormal">I’m guessing I can override float.__str__() and maybe the list.__str__() methods.  Do I do that in x3d.py or my code?<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I’m on unfamiliar ground and will have to do some testing unless someone has a definitive response.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I hope this works.  I will run through the smoke tests provided.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I will probably modify the Blender X3DV exporter first, and if that doesn’t work, proceed to modify x3d.py.  I don’t think it’s a good idea to modify x3d.py itself.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">So far, I haven’t seen anyone replacing the str() function.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">John <u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Mon, Oct 16, 2023 at 11:10 AM GPU Group <<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>> wrote:<u></u><u></u></p></div><blockquote style="border-width:medium medium medium 1pt;border-style:none none none solid;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in;border-color:currentcolor currentcolor currentcolor rgb(204,204,204)"><div><div><p class="MsoNormal">It seems possible to override functions in python, if there are just a few to override. <u></u><u></u></p><div><p class="MsoNormal">And one suggestion for x3d.py imperfections is to apply fixes at runtime in some initialization function.<u></u><u></u></p></div><div><p class="MsoNormal">- that assumes/requires just a few target functions, not 480 functions that need to be repaired<u></u><u></u></p></div><div><p class="MsoNormal">- so for some fixes it may be helpful to change the upstream x3d.py to call a function that can be easily replaced.<u></u><u></u></p></div><div><p class="MsoNormal">-Doug<u></u><u></u></p></div><div><p class="MsoNormal">Example:<u></u><u></u></p></div><div><p class="MsoNormal">file myclass.py <u></u><u></u></p><div><div><p class="MsoNormal">class Wonky:<u></u><u></u></p></div><div><p class="MsoNormal">  def __init__(self):<u></u><u></u></p></div><div><p class="MsoNormal">    self.color = "Red"<u></u><u></u></p></div><div><p class="MsoNormal">  def func1(self, color :str) -> bool:<u></u><u></u></p></div><div><p class="MsoNormal">    if color == self.color:<u></u><u></u></p></div><div><p class="MsoNormal">      return True<u></u><u></u></p></div><div><p class="MsoNormal">    return False<u></u><u></u></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">file override.py<u></u><u></u></p></div><div><div><p class="MsoNormal">from myclass import *<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">mc = Wonky()<u></u><u></u></p></div><div><p class="MsoNormal">print("match with Blue? "+str(mc.func1("Blue")))<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">def func2(self, color: str) -> bool:<u></u><u></u></p></div><div><p class="MsoNormal">  if self.color != color:<u></u><u></u></p></div><div><p class="MsoNormal">    return True<u></u><u></u></p></div><div><p class="MsoNormal">  return False<u></u><u></u></p></div><div><p class="MsoNormal">Wonky.func1 = func2 # <<<<<<<<<<<< OVERRIDE<u></u><u></u></p></div><div><p class="MsoNormal">print("don't match with Blue? "+str(mc.func1("Blue")))<u></u><u></u></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">output:<u></u><u></u></p></div><div><div><p class="MsoNormal">match with Blue? False<u></u><u></u></p></div><div><p class="MsoNormal">don't match with Blue? True<u></u><u></u></p></div></div><div><p class="MsoNormal">-Doug<u></u><u></u></p></div></div></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Mon, Oct 16, 2023 at 9:55 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<u></u><u></u></p></div><blockquote style="border-width:medium medium medium 1pt;border-style:none none none solid;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in;border-color:currentcolor currentcolor currentcolor rgb(204,204,204)"><p class="MsoNormal">Instead of calling str() to print out a value, call a function that does precision floating point formatting on floats according to a user’s wishes.  If the value is a list, call the function recursively with a list comprehension, otherwise, call str. <u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I think this is doable by mere humans.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Thanks,<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">John<u></u><u></u></p></div></blockquote></div></blockquote></div></div></blockquote></div></blockquote></div></div></div></div></blockquote></div></div>