<div dir="ltr">Okay, seeing this fix, it looks good, I will test now<div><br></div><div> if ((((getFieldOfView().length > 0) && !getFieldOfViewList().equals(FIELDOFVIEW_DEFAULT_VALUE)) || !ConfigurationProperties.getStripDefaultAttributes()) /* ArrayList .x3d compare */ && !hasUSE())<br> {<br> stringX3D.append(" fieldOfView='").append(MFFloat.toString(getFieldOfView())).append("'");<br> }</div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Tue, Jul 29, 2025 at 6:20 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</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 dir="ltr">Okay, I'm not sure if there are updates, but here's my take:<div><br></div><div>In OrthoViewpoint.java,</div><div><br></div><div>This code (XML output) looks like this:</div><div><br></div><div> if ((((getFieldOfView().length > 0) ).equals(FIELDOFVIEW_DEFAULT_VALUE)) || !ConfigurationProperties.getStripDefaultAttributes()) /* ArrayList .x3d compare */ && !hasUSE())<br> {<br> stringX3D.append(" fieldOfView='").append(MFFloat.toString(getFieldOfView())).append("'");<br> }</div><div><br></div><div>The condition for VRML output looks better, but I haven't tested it.</div><div><br></div><div> if (((getFieldOfView().length > 0) && !getFieldOfViewList().equals(FIELDOFVIEW_DEFAULT_VALUE)) || !ConfigurationProperties.getStripDefaultAttributes()) /* ArrayList .x3dv compare */<br> {<br> stringClassicVRML.append("fieldOfView ").append("[ ").append(MFFloat.toString(getFieldOfView())).append(" ]").append("\n").append(indent).append(indentCharacter);<br> }</div><div><br></div><div>There's an ant target for just rebuilding one file, and building Jars, so I can just modify OrthoViewpiont.java, that would be useful information:</div><div><br></div><div><br></div><div>I am not prepared to debug XSLT. But I see the comment you put there, so I will go hunting.</div><div><br></div><div>I'm certainly hoping you will quickly upstream my code if I find a fix.</div><div><br></div><div>John</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 28, 2025 at 11:19 PM Don Brutzman <<a href="mailto:don.brutzman@gmail.com" target="_blank">don.brutzman@gmail.com</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 dir="ltr">Thanks for the trouble report. Please include .x3d file in such reports so that repeatability is possible.<div><ul><li>Ticket #42 Missing OrthoViewpoint.fieldOfView when using MFFloat </li><li><a href="https://sourceforge.net/p/x3d/tickets/42/" target="_blank">https://sourceforge.net/p/x3d/tickets/42/</a></li></ul><div><div>Of relevant note is presence of following HelloWorldProgram.java "smoke test" program, which demonstrates successful operation. I just adjusted it to include the OrthoViewpoint tests in all of the various output files. Still having some trouble getting fieldOfView output (not sure why) and a properly valid pattern for Layout publication.</div><div><ul><li>HelloWorldProgram.java</li><li><a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/java/examples/HelloWorldProgram.java#l201" target="_blank">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/java/examples/HelloWorldProgram.java#l201</a></li></ul><div>my updated excerpt:</div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> // testing layout.setAlign()<br> Layout layout = new Layout("SpecialTestLayout");<br> layout.setAlign("LEFT");<br> layout.setAlign(Layout.ALIGN_LEFT_BOTTOM);<br> layout.setAlign(new java.lang.String[] {"LEFT","BOTTOM"});<br>// layout.setAlign(Layout.ALIGN_LEFT); // TODO test singleton enumerations<br> System.out.println("layout.getAlign=" + layout.getAlignString());<br> System.out.println("layout field smoke tests = " +<br> Boolean.toString((new MFString(layout.getAlign())).toString().equals((new MFString(Layout.ALIGN_LEFT_BOTTOM)).toString())) +<br> " (through manual debug checks)");<br> LayoutGroup layoutGroup = new LayoutGroup("SpecialTestLayoutGroup")<br> .setLayout(layout);<br> layoutGroup.addChild(layout);<br>// scene.addChild(layoutGroup); // TODO how best to add to scene? validation problems need to be sorted out...<br> <br> // testing orthoViewpoint.setFieldOfView()<br> OrthoViewpoint orthoViewpoint = new OrthoViewpoint("SpecialTestOrthoViewpoint");<br> orthoViewpoint.setFieldOfView(1, 2, 3, 4); // valid, special-case utility method<br> orthoViewpoint.setFieldOfView(new SFVec4f(1, 2, 3, 4)); // valid, special-case utility method<br> orthoViewpoint.setFieldOfView(new float[] {1, 2, 3, 4}); // valid<br> orthoViewpoint.setFieldOfView(new MFFloat(new float[] {1, 2, 3, 4})); // valid<br> System.out.println("Multiple tests pass for orthoViewpoint.fieldOfView=" + orthoViewpoint.getFieldOfViewString() + "=" + Arrays.toString(orthoViewpoint.getFieldOfView()) +<br> " for (minimum_x, minimum_y, maximum_x, maximum_y)");<br> System.out.println("Test improper invocation orthoViewpoint.setFieldOfView(4, 3, 2, 1);");<br> orthoViewpoint.setFieldOfView(4, 3, 2, 1); // erroneous<br> <br> scene.addChild(orthoViewpoint); // TODO why isn't fieldOfView appearing in output?</blockquote></div></div></div></div><div><div><br></div><div>As the head of the prior log file shows, the Ant tests are in the parent stylesheets directory, target <i>test.X3DJSAIL</i> and <i>test.X3DJSAIL.Schematron</i></div><div><ul><li><a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/build.xml#l421" target="_blank">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/build.xml#l421</a><i> </i></li><li><a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/build.xml#l2209" target="_blank">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/build.xml#l2209</a></li></ul></div><div>Posted another X3DJSAIL update. Good luck on next steps.</div></div><div><br></div><div>all the best, Don</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 28, 2025 at 1:35 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</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 dir="ltr"><div dir="ltr">Here's the Java presented from X3DJSAIL:</div><div dir="ltr"><br></div><div dir="ltr">$ java -cp ".;../../../X3DJSAIL.4.0.full.jar" org.web3d.x3d.jsail.CommandLine -toJava Connectors.x3d|grep ieldOf<br>no className provided, using normalized meta title value='Connectors'<br> .addChild(new OrthoViewpoint().setDescription("OthoViewpoint").setCenterOfRotation(-3.13496,-4.19776,0.0).setFieldOfView(new double[] {0.0,0.0,10.0,10.0}).setPosition(-3.13496,-4.19776,10.0))</div><div dir="ltr"><br></div><div>That's OK. Apparently the stylesheet version doesn't work, so I will be switching away from exclusively using stylesheets. I can't seem to preserve the intermediate XML from X3DJSAIL. I suggest this issue is from not exporting fieldOfView to the intermediate file. This was the second half of the original report.</div><div dir="ltr"><br></div><div dir="ltr">$ grep public.*set.ieldOfView OrthoViewpoint.java<br> public OrthoViewpoint setFieldOfView(float[] newValue)<br> public OrthoViewpoint setFieldOfView(MFFloat newValue)<br> public OrthoViewpoint setFieldOfView(ArrayList<Float> newValue)<br> public OrthoViewpoint setFieldOfView(int[] newValue)<br> public OrthoViewpoint setFieldOfView(double[] newArray)<br> public OrthoViewpoint setFieldOfView(SFVec4f newFieldOfView)<br> public OrthoViewpoint setFieldOfView(float minimum_x, float minimum_y, float maximum_x, float maximum_y)</div><div dir="ltr"><br></div><div dir="ltr">$ javac -cp ".;../../../X3DJSAIL.4.0.full.jar" net/x3djsonld/data/Connectors.java<br><br>$ java -cp ".;../../../X3DJSAIL.4.0.full.jar" net.x3djsonld.data.Connectors<br>Build this X3D model, showing validation diagnostics...<br>Connectors self-validation test confirmation: success<br>Note: toFileX3D() is overwriting prior file ./Connectors_JavaExport.x3d<br>Note: toFileClassicVRML() is overwriting prior file ./Connectors_JavaExport.x3dv<br><br>$ ls -ltr Connectors_JavaExport.x3d* net/x3djsonld/data/Connectors.*<br>-rw-r--r-- 1 jcarl 197609 26294 Jul 28 03:23 net/x3djsonld/data/Connectors.java<br>-rw-r--r-- 1 jcarl 197609 19013 Jul 28 03:27 net/x3djsonld/data/Connectors.class<br>-rw-r--r-- 1 jcarl 197609 14301 Jul 28 03:27 Connectors_JavaExport.x3d<br>-rw-r--r-- 1 jcarl 197609 10417 Jul 28 03:27 Connectors_JavaExport.x3dv<br><br>$ grep -i fieldOfView Connectors_JavaExport.x3d* net/x3djsonld/data/Connectors.java<br>net/x3djsonld/data/Connectors.java: .addChild(new OrthoViewpoint().setDescription("OthoViewpoint").setCenterOfRotation(-3.13496,-4.19776,0.0).setFieldOfView(new double[] {0.0,0.0,10.0,10.0}).setPosition(-3.13496,-4.19776,10.0))</div><div dir="ltr"><br></div><div>So the MFFloat for setFieldOfValue is not appearing in XML or Classic VRML output, I'm guessing it's not in the intermediate XML.</div><div><br></div><div>I have not tried setting the flag for not deleting the intermediate file yet. I have more important things to accomplish.</div><div><br></div><div>I will be posting this message on sourceforge. Java is attached if you want to play with it.</div><div><br></div><div>Good luck!</div><div><br></div><div>John</div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jul 27, 2025 at 1:36 PM Don Brutzman via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</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 dir="ltr"><div dir="ltr"><br><div><div><ul style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium"><li><span style="color:darkgreen"><i>Complete</i></span>. Added utility methods <code><a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Navigation/OrthoViewpoint.html#setFieldOfView(org.web3d.x3d.jsail.fields.SFVec4f)" target="_blank">setFieldOfView(SFVec4f newValue)</a></code> and <code><a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Navigation/OrthoViewpoint.html#setFieldOfView(float,float,float,float)" target="_blank">setFieldOfView(float minimum_x, float minimum_y, float maximum_x, float maximum_y)</a></code>. Nevertheless, multiple counterintuitive <i>MFFloat</i> accessor methods also appear... Probably need to change <i>fieldOfView</i> field to type <i>SFVec4f</i>, for programmer clarity when handling the <i>fieldOfView</i> field, as recommended by <a href="https://mantis.web3d.org/view.php?id=1398" target="_blank">Mantis 1398</a>.</li></ul></div></div></div></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>