[x3d-public] scoping for proto names ?

Andreas Plesch andreasplesch at gmail.com
Mon Jun 8 08:30:58 PDT 2020


Hi Don,

thanks for tracing this.

On Mon, Jun 8, 2020 at 2:42 AM Don Brutzman <brutzman at nps.edu> wrote:

>
> Next comes prototype declaration Leg2 which has global scope.
>

Yes, Leg2 has the scope of the main scene.


>
> Next comes prototype declaration Table2 which has global scope, and which
> can utilize prototype instances of Leg2 because Leg2 was defined previously
> (and not hidden within nested scope).
>

This is what I was not sure about. Leg2 was defined previously but not
inside the scope of the Table2 definition. The Table2 definition has its
own name scope so they are no conflicts of Table2 internal DEF/USE/Routes
with DEF/USE names of other prototypes or the main scene.

But Leg2 is still available. I think it means that higher or global name
scopes are included in a ProtoDeclaration for Proto names purposes but not
for DEF/USE purposes.

Similar scoping issues for a player can of course occur with Inline, and
> ExternProtoDeclare, so a browser has to keep track of name scope throughout
> each of these mechanisms.  This is especially important since authors may
> be composing diverse models via Inline and ExternProtoDeclare without any
> knowledge of each others DEF and prototype names.
>

Let's cross this bridge when the time comes.


>
> So prototype scoping may seem complex, but actually it is quite similar to
> Inline scoping so common approaches are likely OK to be used similarly.
> Authors can also think of them in the same way.  Good luck!
>

Yes, I thought, there should be an IMPORT/EXPORT for protos as well.

Thanks again, -Andreas


>
> v/r Don
>
>
> On 6/7/2020 1:40 PM, Andreas Plesch wrote:
> > Let's see if I can explain this question clearly.
> >
> > First the example:
> >
> >
> https://github.com/andreasplesch/x3dom/blob/gh-pages/test/functional/proto/castle/proto_nested.x3d
> >
> > The table2 ProtoBody uses an instance of the leg2 proto. The leg2 proto
> declaration is defined outside of the table2 proto declaration name scope.
> >
> > The expected result is that the table2 proto declaration is able to use
> the name 'leg2' to find the leg2 proto definition.
> >
> > This does not work in my x3dom proto exploration and it took me a while
> to realize that the reason is (too?) strict scoping. The leg2 proto
> definition occurs outside of the execution context and name scope of the
> table2 proto. Therefore it is not visible to the table2 proto.
> >
> > At first glance this strictness seems not unreasonable, however, all
> tested browsers display the scene as expected.
> >
> > So I am somewhat puzzled. I think what it means is that name scoping
> does not apply to the name of Protos given by the name attribute, since the
> name of Proto is the name of a node definition. Proto names are possibly
> global.
> >
> > One consequence is that two Protos in a scene cannot have the same name.
> And I recall that this case is spec'ed to lead to undefined behaviour.
> >
> > Would it be correct to treat Proto names as global ? To be clear, by
> Proto name I refer to the name given by the name attribute, not a DEF name
> of an instance.
> >
> > Thanks for any insight, or pointers to relevant spec. sections, -Andreas
> >
> > --
> > Andreas Plesch
> > Waltham, MA 02453
> >
> > _______________________________________________
> > x3d-public mailing list
> > x3d-public at web3d.org
> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> >
>
> 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
> http://faculty.nps.edu/brutzman
>


-- 
Andreas Plesch
Waltham, MA 02453
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20200608/bb397289/attachment.html>


More information about the x3d-public mailing list