<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Okay, I have changed my serializer to NOT remove set_ and _<i>changed, and things are looking good! I will run more tests later…</i></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I have a couple of items left, I’m sure you smart fellows can figure out:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Based on flowers7.x3d:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>org.web3d.x3d.sai.InvalidFieldValueException: ROUTE details: FROM Animate.a_changed (Script.SFFloat.outputOnly) TO cobweb.set_a (ComposedShader.ERROR_UNKNOWN_FIELD_TYPE.ERROR_UNKNOWN_FIELD_ACCESSTYPE)</p><p class=MsoNormal>ROUTE has source-destination type mismatch, fromField='a_changed' source and toField='set_a' destination have different types. ROUTE toField (destination) event can only have accessType='inputOutput' or accessType='inputOnly'.</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.ROUTEObject.validate(ROUTEObject.java:720)</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.SceneObject.validate(SceneObject.java:607)</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.X3DObject.validate(X3DObject.java:1855)</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.X3DObject.toFileJSON(X3DObject.java:746)</p><p class=MsoNormal> at flowers7.main(flowers7.java:79)R_UNKNOWN_FIELD_ACCESSTYPE)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m assuming in the programmable shader GLSL, if I have an inputOnly field, I have to use set_ in the GLSL shader code as well. That may explain why my X3DOM shader wasn’t working.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Based on x3dconnectorProto.x3d:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>org.web3d.x3d.sai.InvalidFieldValueException: ROUTE details: FROM G1.translation_changed (Transform.SFVec3f.inputOutput) TO connector1.set_startpoint (ProtoInstance.ERROR_UNKNOWN_FIELD_TYPE.ERROR_UNKNOWN_FIELD_ACCESSTYPE)</p><p class=MsoNormal>ROUTE has source-destination type mismatch, fromField='translation_changed' source and toField='set_startpoint' destination have different types. ROUTE toField (destination) event can only have accessType='inputOutput' or accessType='inputOnly'.</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.ROUTEObject.validate(ROUTEObject.java:720)</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.SceneObject.validate(SceneObject.java:607)</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.X3DObject.validate(X3DObject.java:1855)</p><p class=MsoNormal> at org.web3d.x3d.jsail.Core.X3DObject.toFileJSON(X3DObject.java:746)</p><p class=MsoNormal> at x3dconnectorProto.main(x3dconnectorProto.java:79)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Both are attached.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a><br><b>Sent: </b>Monday, April 24, 2017 7:24 AM<br><b>To: </b><a href="mailto:michalis.kambi@gmail.com">Michalis Kamburelis</a>; <a href="mailto:brutzman@nps.edu">Don Brutzman</a><br><b>Cc: </b><a href="mailto:andreasplesch@gmail.com">Andreas Plesch</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>RE: [x3d-public] [...] set_Value prefix and value_changedsuffix,potential v4 issue</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I will try taking out my code to remove set_ and _changed and see what happens. Perhaps I can patch my XML.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:michalis.kambi@gmail.com">Michalis Kamburelis</a><br><b>Sent: </b>Monday, April 24, 2017 5:03 AM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a><br><b>Cc: </b><a href="mailto:andreasplesch@gmail.com">Andreas Plesch</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3d-public] [...] set_Value prefix and value_changed suffix,potential v4 issue<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>2017-04-24 5:40 GMT+02:00 Don Brutzman <brutzman@nps.edu>:<o:p></o:p></p><p class=MsoNormal>> So for example, am not finding any specification prose that would permit<o:p></o:p></p><p class=MsoNormal>> routing from a TimeSensor.fraction (it is defined as<o:p></o:p></p><p class=MsoNormal>> TimeSensor.fraction_changed) or into a PositionInterpolator.fraction (it is<o:p></o:p></p><p class=MsoNormal>> defined as PositionInterpolator.set_fraction).<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I always understood the X3D specification (the<o:p></o:p></p><p class=MsoNormal>http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#FieldSemantics<o:p></o:p></p><p class=MsoNormal>section) to mean that "if you want to refer to the input event of the<o:p></o:p></p><p class=MsoNormal>xxx inputOutput, you MUST write it set_xxx". (And, analogously, you<o:p></o:p></p><p class=MsoNormal>MUST write "xxx_changed" to refer to the output event.)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I guess it comes from the VRML times, when the concept of "fields" and<o:p></o:p></p><p class=MsoNormal>"events" felt more separated in the specification. We had "exposed<o:p></o:p></p><p class=MsoNormal>field" that I understood as equivalent to a sum of 1 field + 2 events.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The specification says<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> """<o:p></o:p></p><p class=MsoNormal> An inputOutput field named zzz can be referred to as 'set_zzz' and<o:p></o:p></p><p class=MsoNormal>treated as an inputOnly, and can be referred to as 'zzz_changed' and<o:p></o:p></p><p class=MsoNormal>treated as an outputOnly field.<o:p></o:p></p><p class=MsoNormal> """<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I understood the "referred to as 'set_zzz' and treated as an<o:p></o:p></p><p class=MsoNormal>inputOnly" as a requirement: you have to refer to it as 'set_zzz', in<o:p></o:p></p><p class=MsoNormal>order to treat it as an inputOnly.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Consequently, view3dscene does not allow<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> ROUTE MyTimeSensor.fraction TO MyPositionInterpolator.fraction<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>You must use<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> ROUTE MyTimeSensor.fraction_changed TO MyPositionInterpolator.set_fraction<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Attaching the smallest testcase possible:) If any other X3D browser<o:p></o:p></p><p class=MsoNormal>allows the 1st ROUTE above (just "MyTimeSensor.fraction"), or if the<o:p></o:p></p><p class=MsoNormal>specification allows it, I would like to know about it, so that I can<o:p></o:p></p><p class=MsoNormal>fix view3dscene.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Out of curiosity, I looked at what VRML 97 specification says about it:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>1. VRML 97 spec says basically the same thing as X3D spec (<o:p></o:p></p><p class=MsoNormal>http://www.web3d.org/documents/specifications/14772/V2.0/part1/concepts.html#4.7<o:p></o:p></p><p class=MsoNormal>):<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> """An exposedField named zzz can be referred to as 'set_zzz' and<o:p></o:p></p><p class=MsoNormal>treated as an eventIn, and can be referred to as 'zzz_changed' and<o:p></o:p></p><p class=MsoNormal>treated as an eventOut."""<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>2. The "Annotated VRML 97 Reference Manual" (<o:p></o:p></p><p class=MsoNormal>http://www.x-3-x.net/vrml/archive/annotatedVRML2/BOOK.HTM ) adds a<o:p></o:p></p><p class=MsoNormal>"tip" (not present in the spec):<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> """Note that the names of exposedFields do not include a prefix or<o:p></o:p></p><p class=MsoNormal>suffix. For example, the PointLight node's on exposedField is not<o:p></o:p></p><p class=MsoNormal>named isOn. However, the set_ and _changed conventions may be used<o:p></o:p></p><p class=MsoNormal>when referring to the eventIn and eventOut of the exposedField<o:p></o:p></p><p class=MsoNormal>respectively."""<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> Hm, the words "may be used" inside the above sentence indeed suggest<o:p></o:p></p><p class=MsoNormal>that the set_/_changed are optional. I'm curious what other VRML and<o:p></o:p></p><p class=MsoNormal>X3D browsers do!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>P.S. I don't have an opinion about whether this requirement should be<o:p></o:p></p><p class=MsoNormal>relaxed for X3D 4.0 or not. As the DOM compatibility is not in my main<o:p></o:p></p><p class=MsoNormal>usecase for X3D, I don't have any argument in favor. But the necessary<o:p></o:p></p><p class=MsoNormal>change in the browser implementation, to make set_/_changed optional,<o:p></o:p></p><p class=MsoNormal>would be absolutely trivial, so I don't see any argument against. So,<o:p></o:p></p><p class=MsoNormal>as long as the specification is clear about whether it should be<o:p></o:p></p><p class=MsoNormal>allowed or not, I'm fine either way:)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Regards,<o:p></o:p></p><p class=MsoNormal>Michalis<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>