[Source] Xj3D reload (replaceWorld) not updating USE nodes
Don Brutzman
brutzman at nps.edu
Tue Dec 9 10:34:11 PST 2014
Terry, have isolated the problem we saw last Friday where it appeared as is the "Reload Xj3D" feature wasn't working when we changed some Material values. There was no apparent change when the Text node in the HelloWorld.x3d scene had its color changed.
The issue is that restarting an Xj3D viewer is not reloading the USE nodes in the scene. It does appear to be reloading everything else.
Test scene: http://www.web3d.org/x3d/content/examples/HelloWorld.x3d
Code snippets follow from X3D-Edit illustrating the sequence of steps triggering the reload:
=====================
ReloadXj3dAction.java
public final class ReloadXj3dComponentAction extends CookieAction
{
@Override
protected void performAction(Node[] activatedNodes)
{
Xj3dNewTopComponent topC = Xj3dNewTopComponent.findInstance();
if(!topC.isOpened()) {
topC.open();
topC.requestActive();
}
topC.getViewerPanel().reloadXj3dComponent();
}
...
=====================
Xj3dViewerPanel.java
public void reloadXj3dComponent()
{
//System.out.println("XJ3D:.....reloadXj3dScene(xObj)");
initialize();
openXj3dScene(currentX3dObject);
}
...
// New methods to simplify life and get some of the xj3d logic out of the TopComponent
public void openXj3dScene(X3DDataObject xObj)
{
// This has been happening for some reason
if (xObj == null) {return;}
//System.out.println("XJ3D:.....openXj3dScene(xObj)");
try {
currentX3dObject = xObj;
currentFile = FileUtil.toFile(xObj.getPrimaryFile());
currentURLString = Utilities.toURI(currentFile).toURL().toExternalForm();
currentScene = x3dBrowser.createX3DFromURL(new String[]{currentURLString});
} catch(MalformedURLException ex) {
ErrorManager.getDefault().log(ErrorManager.ERROR, ex.getLocalizedMessage());
}
loadScene(false);
}
...
private void loadScene(boolean stream) {
String msg;
x3dBrowser.beginUpdate();
x3dBrowser.replaceWorld(currentScene);
x3dBrowser.endUpdate();
if (stream) {
msg = "openxj3dScene loaded (stream): " + currentURLString;
} else {
msg = "openxj3dScene loaded (file): " + currentURLString;
}
System.out.println(msg);
}
=====================
This is as far as I got. Based on preceding source fragments, I suspect that the Xj3D omission leading to incomplete reload can be found via further sleuthing in the following method:
x3dBrowser.replaceWorld(currentScene);
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
More information about the Source
mailing list