[x3d-public] metadata for ProtoInstance
John Carlson
yottzumm at gmail.com
Sat Jun 6 11:23:54 PDT 2020
I think that X_ITE may manage script by having a URL reference, then it can
manage the link instead of the HTML browser.
JSON manages script by providing JSON, not XML, so browser does not
"recognize" it as script, and I can process it as much as one likes.
The primary purpose of the proto expander is to expand proto scripts and
JSON scripts. I don't really know what to do with DOM Scripts.
On Sat, Jun 6, 2020 at 1:06 PM Don Brutzman <brutzman at nps.edu> wrote:
> [possible Web3D 2020 participant gift: skateboard bumperstickers that say
> "X3D Prototypes Are Not A Crime"]
>
> 8)
>
> On 6/5/2020 12:45 PM, Andreas Plesch wrote:
> > Indeed,
> >
> >
> https://savage.nps.edu/Savage/Tools/Animation/DoubleClickTouchSensorPrototypeIndex.html
> >
> > shows that pattern of allowing metadata for a ProtoInstance. Perhaps
> > the exposed metadata field should be populated in the example
> > ProtoInstance as well.
>
> Sounds good, thank you. Excerpt follows, checked in and validated.
>
> <ProtoDeclare appinfo='DoubleClickTouchSensor functionality activates
> when user double clicks (or double selects) within maxDelayInterval'
> name='DoubleClickTouchSensor'>
> <ProtoInterface>
> <field accessType='inputOutput' appinfo='describe the purpose of
> this sensor' name='description' type='SFString'/>
> <field accessType='initializeOnly' appinfo='seconds'
> name='maxDelayInterval' type='SFTime' value='0.5'/>
> <field accessType='inputOutput' name='enabled' type='SFBool'
> value='true'/>
> <field accessType='outputOnly' name='isActive' type='SFBool'/>
> <field accessType='outputOnly' name='isOver' type='SFBool'/>
> <field accessType='outputOnly' appinfo='seconds' name='touchTime'
> type='SFTime'/>
> <field accessType='outputOnly' name='hitPoint_changed'
> type='SFVec3f'/>
> <field accessType='outputOnly' name='hitNormal_changed'
> type='SFVec3f'/>
> <field accessType='outputOnly' name='hitTexCoord_changed'
> type='SFVec2f'/>
> <field accessType='initializeOnly' name='metadata' type='SFNode'
> appinfo='can contain one of Metadata nodes'>
> <!-- initialization node (if any) goes here -->
> </field>
> <field accessType='initializeOnly' name='traceEnabled'
> type='SFBool' value='false'/>
> </ProtoInterface>
> ...
>
> <ExternProtoDeclare appinfo='DoubleClickTouchSensor functionality
> activates when user double clicks (or double selects) within
> maxDelayInterval' name='DoubleClickTouchSensor'
> url='"DoubleClickTouchSensorPrototype.x3d#DoubleClickTouchSensor"
> "../../../Savage/Tools/Animation/DoubleClickTouchSensorPrototype.x3d#DoubleClickTouchSensor"
> "
> https://savage.nps.edu/Savage/Tools/Animation/DoubleClickTouchSensorPrototype.x3d#DoubleClickTouchSensor"
> "DoubleClickTouchSensorPrototype.wrl#DoubleClickTouchSensor"
> "../../../Savage/Tools/Animation/DoubleClickTouchSensorPrototype.wrl#DoubleClickTouchSensor"
> "
> https://savage.nps.edu/Savage/Tools/Animation/DoubleClickTouchSensorPrototype.wrl#DoubleClickTouchSensor
> "'>
> <field accessType='inputOutput' appinfo='describe the purpose of
> this sensor' name='description' type='SFString'/>
> <field accessType='initializeOnly' appinfo='seconds'
> name='maxDelayInterval' type='SFTime'/>
> <field accessType='inputOutput' name='enabled' type='SFBool'/>
> <field accessType='outputOnly' name='isActive' type='SFBool'/>
> <field accessType='outputOnly' name='isOver' type='SFBool'/>
> <field accessType='outputOnly' appinfo='seconds' name='touchTime'
> type='SFTime'/>
> <field accessType='outputOnly' name='hitPoint_changed'
> type='SFVec3f'/>
> <field accessType='outputOnly' name='hitNormal_changed'
> type='SFVec3f'/>
> <field accessType='outputOnly' name='hitTexCoord_changed'
> type='SFVec2f'/>
> <field accessType='initializeOnly' name='metadata' type='SFNode'
> appinfo='can contain one of Metadata nodes'>
> <!-- initialization node (if any) goes here -->
> </field>
> <field accessType='initializeOnly' name='traceEnabled'
> type='SFBool'/>
> </ExternProtoDeclare>
> ...
>
> <ProtoInstance DEF='TouchSensorActive'
> name='DoubleClickTouchSensor'>
> <fieldValue name='description' value='double click to initiate
> time delay and color change'/>
> <fieldValue name='traceEnabled' value='true'/>
> <fieldValue name='metadata'>
> <MetadataString name="exampleTerm" value='"exampleValue"'/>
> </fieldValue>
> </ProtoInstance>
>
> This design pattern seemed too specialized to add to X3D Tooltips, but I
> have added an entry with links to
>
> * X3D Scene Authoring Hints, Inline Scenes and Prototype Templates
>
> https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#Inlines
>
> "If an author wants a ProtoInstance node to contain metadata like other
> X3D nodes, then first add a metadata field to the defining ProtoDeclere.
> For an example, see DoubleClickTouchSensorPrototype and
> DoubleClickTouchSensorExample."
>
> > Authors should consider ProtoInstance as a node in the scenegraph.
> > Does that indicate that the spec. also should consider ProtoInstance
> > more formally as a node, rather than a statement ? The SAI efforts, I
> > think, already do that. It would be a node which is dynamically
> > defined as it derives its definition from the named Protodeclaration.
> > So instead of treating it as something to be replaced/expanded, it
> > would be stay in the scenegraph and reference the Protodeclaration.
>
> From a 'specification parlance' perspective, ProtoDeclare
> ExternProtoDeclare ProtoInstance (PROTO EXTERNPROTO [someName] ) are
> statements.
>
> From a practical perspective, an instantiated ProtoInstance is a node (or
> node subtree) in the scene graph.
>
> In X3DJSAIL some creativity was needed, class ProtoInstanceObject
> indrectly implements X3DChildNode (and thus X3DNode) with the following
> signature:
>
> public class ProtoInstanceObject extends X3DConcreteNode
> implements ProtoInstance
>
> *
> https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/ProtoInstanceObject.html
>
> The specification prose seems pretty thorough about all these ins &
> outs... no doubt you've seen it.
>
> * X3D Architecture, 4.4.4 Prototype semantics
>
> https://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#PrototypeSemantics
>
> For anybody, questions or potential spec clarifications are always welcome.
>
> > To be honest, I am a bit worried that if Proto's should become
> > available for x3dom, there will be unnecessary management of
> > expectations, mostly with regards to scripting. So strategically, it
> > will be best to first figure out if it is possible to reproduce
> > scripted prototype behaviours with dom scripts, and only then release
> > more widely.
> >
> > -Andreas
>
> Understood, please implement/rollout as you think best. Each will be a
> major advance for X3DOM. Suggest getting prototypes out without scripting
> is a good incremental achievement; acknowledged that many prototype
> declarations include scripting for advanced capabilities.
>
> Looking ahead in that direction...
>
> I've always thought that a <Script> within a <Scene> within a root <X3D>
> ought to be pretty easy to distinguish from a HTML Script. However I
> haven't actually tried to do that in any DOM programming. MIght be an
> issue if the page is some kinda tag soup (which HTML allows, I think).
>
> If you want to experiment with <X3dScript> as a synonym, that might be an
> interesting experiment. If it seems necessary then we could write that up
> in the forthcoming X3D4 section for X3D-HTML. Similarly we might consider
> implications of using <X3DCanvas> (as X_ITE does) when scene graph is
> external to the HTML page.
>
> We're having fun now... Thanks Andreas!
>
> > On Fri, Jun 5, 2020 at 9:54 AM Don Brutzman <brutzman at nps.edu> wrote:
> >>
> >> Great question about metadata in a protoinstance... i believe that your
> deduction is correct and that we have some examples. here are some:
>
> p.s. it took me a heckuva lot longer (weeks maybe) than the few hours you
> apparently needed to figure that one out - very impressive!! 8)
>
> >> [1] X3D Example Archives: Savage, Tools, Animation, Flying Text
> Prototype
> >>
> https://savage.nps.edu/Savage/Tools/Animation/FlyingTextPrototypeIndex.html
> >>
> >> [2] X3D Example Archives: Savage, Tools, Animation, Flying Text Example
> >>
> https://savage.nps.edu/Savage/Tools/Animation/FlyingTextExampleIndex.html
> >>
> >> <field name='metadata' type='SFNode' accessType='initializeOnly'/>
> >>
> >> [3] X3D Example Archives: Savage, Tools, Animation, Double Click Touch
> Sensor Prototype
> >>
> https://savage.nps.edu/Savage/Tools/Animation/DoubleClickTouchSensorPrototypeIndex.html
> >>
> >> <field name='metadata' type='SFNode' accessType='initializeOnly'>
> >> <!-- initialization node (if any) goes here -->
> >> </field>
> >>
> >> [4] X3D Example Archives: Savage, Tools, Animation, Double Click Touch
> Sensor Example
> >>
> https://savage.nps.edu/Savage/Tools/Animation/DoubleClickTouchSensorExampleIndex.html
> >>
> >> Authors should definitely consider a ProtoInstance as a node in the
> scene graph.
> >>
> >> btw i fixed a small error in x3d.py for serializing out typed values
> found in field/fieldValue declarations, wrapping str() around the value
> being written out. planning to deploy an x3d.py at the end of the weekend,
> hopefully.
> >>
> >> Finally, i expend demand for ProtoInstance to shoot way up as people
> understand it and as X3DOM matches support found in other key
> implementations (InstantReality, X_ITE, Xj3D, others). Will be happy for
> the community to check compliance all around, especially if you and John
> Carlson et al. are successful in finally bringing it to X3DOM some day.
> >>
> >> Prototypes are a fundamental part of the "X" in X3D. Onward we go...
> >>
> >> On 6/4/2020 3:36 PM, Andreas Plesch wrote:
> >>> I realized that the way to add metadata to a protoinstance is expose a
> >>> metadata field in the protodeclaration. I think that answers my
> >>> question.
> >>>
> >>> -Andreas
> >>>
> >>> On Thu, Jun 4, 2020 at 3:31 PM Andreas Plesch <andreasplesch at gmail.com>
> wrote:
> >>>>
> >>>> I think a ProtoInstance currently cannot have its own, instance
> >>>> specific metadata node since it is a statement rather than a node.
> >>>>
> >>>> Is that correct ?
> >>>>
> >>>> If so, it does not seem to be much of an issue since there does not
> >>>> seem to be much demand for it. But everything else can have associated
> >>>> metadata, so should a ProtoInstance not have this ability as well ?
> >>>>
> >>>> -Andreas
>
> 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
>
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20200606/e0c1f463/attachment-0001.html>
More information about the x3d-public
mailing list