[x3d-public] Thoughts for x3d.py str() calls
John Carlson
yottzumm at gmail.com
Mon Oct 16 18:26:23 PDT 2023
Does x3d.py handle bullet point 3? Can you show me an x3d.oy python example?
Thanks!
John
On Mon, Oct 16, 2023 at 8:15 PM Brutzman, Donald (Don) (CIV) <
brutzman at nps.edu> wrote:
> John, if you are asking whether duplicate DEF names are allowed in a
> single X3D model, the answer is no.
>
>
>
>
>
> - *X3D 4.0 Architecture, clause 4 Concepts, 4.4.3 DEF/USE semantics*
> - Node DEF names are limited in scope to a single X3D file, prototype
> definition, or string submitted to either CreateX3DFromString,
> CreateX3DFromStream, or CreateX3DFromURL X3D browser service (as specified
> in ISO/IEC 19775-2).
> - The USE statement does not create a copy of the node identified by a
> DEF name. Instead, the same node is inserted into the scene graph a second
> time, resulting in the node having multiple parents (see 4.3.5
> Transformation hierarchy, for restrictions on self-referential nodes).
> - Node names shall be unique in the context within which the
> associated DEF name occurs.
> -
> https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.proof/Part01/concepts.html
>
>
>
>
>
>
>
> all the best, Don
>
> --
>
> Don Brutzman Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
>
> Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA
> +1.831.656.2149
>
> X3D graphics, virtual worlds, navy robotics
> https://faculty.nps.edu/brutzman
>
>
>
> *From:* John Carlson <yottzumm at gmail.com>
> *Sent:* Monday, October 16, 2023 5:42 PM
> *To:* Joe D Williams <joedwil at earthlink.net>
> *Cc:* Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>; GPU Group <
> gpugroup at gmail.com>; Peitso, Loren (CIV) <lepeitso at nps.edu>; X3D Graphics
> public mailing list <x3d-public at web3d.org>
> *Subject:* Re: Thoughts for x3d.py str() calls
>
>
>
> Here’s a python example from Doug:
>
>
>
>
>
> trans = Transform(DEF='C')
>
> grpb.children.append(trans)
>
> grpa.children.append(trans)
>
>
>
> Is the author doing the wrong thing?
>
>
>
> John
>
>
>
> On Mon, Oct 16, 2023 at 7:37 PM John Carlson <yottzumm at gmail.com> wrote:
>
> If we keep a reference around to place in both skin coordinate and
> skinCoord, will x3d.py be smart enough to output DEF in the first case and
> USE in the second case, or will it just output whatever DEF or USE is
> currently stored for the node? Will it gladly print out both USE and DEF
> plus all the fields along with USE and DEF? A simple python example would
> use a a reference more than once. I don’t have that yet, but it should be
> easy to create one.
>
>
>
> No, I don’t want to override the str function, because my new function
> will use it.
>
>
>
> On Mon, Oct 16, 2023 at 5:32 PM Joe D Williams <joedwil at earthlink.net>
> wrote:
>
> I don't know if this helps, but just from memory, every loader I have ever
> seen that deep into will assign a unique def if a DEFable field does not
> have a DEF. I think a DEF always helps the runtime. The SAI can discover
> the assignment if you need it.
>
> Joe
>
>
>
> -----Original Message-----
> From: GPU Group <gpugroup at gmail.com>
> Sent: Oct 16, 2023 2:36 PM
> To: Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>
> Cc: John Carlson <yottzumm at gmail.com>, Joe D Williams <
> joedwil at earthlink.net>, Peitso, Loren (CIV) <lepeitso at nps.edu>, X3D
> Graphics public mailing list <x3d-public at web3d.org>
> Subject: Re: Thoughts for x3d.py str() calls
>
>
>
> Don,
>
> Q1. Do you acknowledge x3d.py makes no attempt to conjugate DEF and USE of
> the same name?
>
> Q2. Do you acknowledge some nodes in x3d can have multiple fields using
> the same node?
>
> Q3. Do you acknowledge x3d.py controls the order fields of a node are
> exported?
>
> Q4. Do you acknowledge there may be use-cases when a script using x3d.py
> will instance DEF and USE x3d.py nodes of the same name in a different
> order than x3d.py may export?
>
> In HAnimHumanoid 2 fields take the same Coordinate node: a) .coordinate b)
> .skin (in descendent nodes)
>
> The blender exporter traverses the blender scenegraph in a systematic
> order convenient to that script. The first time it encounters the
> Coordinate node it instances an x3d.py Coordinate node with a DEF. The
> subsequent times it encounters the same node it instances an x3d.py node
> with a USE of the same name.
>
> x3d.py exports the HAnimHumanoid.coordinate field before .skin. That's a
> different order than the user script visits blender nodes.
>
> That 2-field-same-node scenario may not occur frequently in web3d, or a
> using-script may be lucky in its case to instance the DEF and USE in the
> same order as x3d.py happens to export. So many successful Examples don't
> help this case.
>
> -Doug
>
>
>
>
>
> On Mon, Oct 16, 2023 at 2:47 PM Brutzman, Donald (Don) (CIV) <
> brutzman at nps.edu> wrote:
>
> The x3d.py makes no effort to correct author errors. That is up to the
> author. Trying to “fix” things further can lead to further problems and a
> corrupted model.
>
>
>
> There are a great many models in X3D Examples with DEF and USE which run
> properly in unit tests.
>
>
>
> There are several diagnostics built in for reporting errors. Have you
> tested your erroneous scene to see what you get? If a further error
> diagnostic is needed, we can add it to the X3DPSAIL TODO list. If you
> write a python method to do that, we can test it further and possibly
> integrate it.
>
>
>
> - X3D Python Scene Access Interface Library (X3DPSAIL), TODO
> - https://www.web3d.org/x3d/stylesheets/python/python.html#TODO
>
>
>
> If a correct model is getting exported into another form incorrectly, then
> we can diagnose and fix the conversion. As ever, use-case examples of such
> errors are essential to continuing progress.
>
>
>
> Thanks for all efforts with X3D Python.
>
>
>
> all the best, Don
>
> --
>
> Don Brutzman Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
>
> Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA
> +1.831.656.2149
>
> X3D graphics, virtual worlds, navy robotics
> https://faculty.nps.edu/brutzman
>
>
>
> *From:* GPU Group <gpugroup at gmail.com>
> *Sent:* Monday, October 16, 2023 9:49 AM
> *To:* John Carlson <yottzumm at gmail.com>
> *Cc:* Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>; Joe D Williams <
> joedwil at earthlink.net>; Peitso, Loren (CIV) <lepeitso at nps.edu>; X3D
> Graphics public mailing list <x3d-public at web3d.org>
> *Subject:* Re: Thoughts for x3d.py str() calls
>
>
>
> correction first output is
>
> <Scene>
>
> <Group DEF='A'>
>
> <Transform DEF='C'/>
>
> </Group>
>
> <Group DEF='B'>
>
> <Transform DEF='C'/>
>
> </Group>
>
>
>
> On Mon, Oct 16, 2023 at 10:32 AM GPU Group <gpugroup at gmail.com> wrote:
>
> That may relate to the DEF USE issue with X3D.py:
>
> x x3d.py makes no effort to conjugate DEF and USE and properly order DEF
> before USE in its export stream
>
> - not a common problem unless a node has 2 fields that take the same node
> (directly SF or indirectly in MFNode descendent field)
>
> x it's a problem with HAnimHumanoid which has coordinate and skin fields,
> which typically involve the same Coordinate node
>
> - tinkering can be done in the blender exporter, to do a USE before a
> DEF, but with inconvenience and messy code
>
> If a call can be made in x3d.py before exporting a DEF or USE, then that
> function can be over-ridden to take responsibility for DEF USE conjugation
> and correct output ordering something like this:
>
> node = getDefOrUse(node, node.DEF, node.USE)
>
> and for the x3d.py default it would just return the same element (or
> node), and overrides can do something more sophisticated.
>
>
>
> more..
>
> DEF USE NON-CONJUGATION IN X3D.PY
>
> test_def.py
>
> x3d = X3D()
>
> scene = Scene()
>
> x3d.Scene = scene
>
> grpa = Group(DEF='A')
>
> grpb = Group(DEF='B')
>
> scene.children.append(grpa)
>
> scene.children.append(grpb)
>
> trans = Transform(DEF='C')
>
> grpb.children.append(trans)
>
> grpa.children.append(trans)
>
> blob = x3d.XML()
>
> fp = open("dump.x3d","w+")
>
> fp.write(blob)
>
> fp.close()
>
>
>
> output:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "
> https://www.web3d.org/specifications/x3d-4.0.dtd">
>
> <X3D profile='Full' version='4.0' xmlns:xsd='
> http://www.w3.org/2001/XMLSchema-instance
> <https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance&data=05%7C01%7Cbrutzman%40nps.edu%7C89d7f7485cd84f8b903608dbcea9d716%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638331001111259651%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Wuo4vUbsIurLvuOtQluXwClFaf7DbgnvyoTw8vvWPGo%3D&reserved=0>'
> xsd:noNamespaceSchemaLocation='
> https://www.web3d.org/specifications/x3d-4.0.xsd'>
>
> <Scene>
>
> <Group DEF='A'>
>
> <Transform USE='C'/>
>
> </Group>
>
> <Group DEF='B'>
>
> <Transform DEF='C'/>
>
> </Group>
>
> </Scene>
>
> </X3D>
>
>
>
> test_def_use.py
>
> from x3d import *
>
>
>
> x3d = X3D()
>
> scene = Scene()
>
> x3d.Scene = scene
>
> grpa = Group(DEF='A')
>
> grpb = Group(DEF='B')
>
> scene.children.append(grpa)
>
> scene.children.append(grpb)
>
> trans = Transform(DEF='C')
>
> grpb.children.append(trans)
>
> grpa.children.append(trans)
>
> blob = x3d.XML()
>
> fp = open("dump.x3d","w+")
>
> fp.write(blob)
>
> fp.close()
>
>
>
> output:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "
> https://www.web3d.org/specifications/x3d-4.0.dtd">
>
> <X3D profile='Full' version='4.0' xmlns:xsd='
> http://www.w3.org/2001/XMLSchema-instance
> <https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance&data=05%7C01%7Cbrutzman%40nps.edu%7C89d7f7485cd84f8b903608dbcea9d716%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638331001111259651%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Wuo4vUbsIurLvuOtQluXwClFaf7DbgnvyoTw8vvWPGo%3D&reserved=0>'
> xsd:noNamespaceSchemaLocation='
> https://www.web3d.org/specifications/x3d-4.0.xsd'>
>
> <Scene>
>
> <Group DEF='A'>
>
> <Transform USE='C'/>
>
> </Group>
>
> <Group DEF='B'>
>
> <Transform DEF='C'/>
>
> </Group>
>
> </Scene>
>
> </X3D>
>
>
>
>
>
>
>
> On Mon, Oct 16, 2023 at 10:09 AM GPU Group <gpugroup at gmail.com> wrote:
>
> It seems possible to override functions in python, if there are just a few
> to override.
>
> And one suggestion for x3d.py imperfections is to apply fixes at runtime
> in some initialization function.
>
> - that assumes/requires just a few target functions, not 480 functions
> that need to be repaired
>
> - so for some fixes it may be helpful to change the upstream x3d.py to
> call a function that can be easily replaced.
>
> -Doug
>
> Example:
>
> file myclass.py
>
> class Wonky:
>
> def __init__(self):
>
> self.color = "Red"
>
> def func1(self, color :str) -> bool:
>
> if color == self.color:
>
> return True
>
> return False
>
>
>
> file override.py
>
> from myclass import *
>
>
>
> mc = Wonky()
>
> print("match with Blue? "+str(mc.func1("Blue")))
>
>
>
> def func2(self, color: str) -> bool:
>
> if self.color != color:
>
> return True
>
> return False
>
> Wonky.func1 = func2 # <<<<<<<<<<<< OVERRIDE
>
> print("don't match with Blue? "+str(mc.func1("Blue")))
>
>
>
> output:
>
> match with Blue? False
>
> don't match with Blue? True
>
> -Doug
>
>
>
> On Mon, Oct 16, 2023 at 9:55 AM John Carlson <yottzumm at gmail.com> wrote:
>
> 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.
>
>
>
> I think this is doable by mere humans.
>
>
>
> Thanks,
>
>
>
> John
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20231016/7122bcf3/attachment-0001.html>
More information about the x3d-public
mailing list