//
// UserRendererJ3D.java
//
/*
VisAD system for interactive analysis and visualization of numerical
data. Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom
Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and
Tommy Jasmin.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
/* PROXY
UserRendererJ3D like ClientRendererJ3D, but ?
ClientRendererJ3D <--> nodes
or
UserRendererJ3D <--> RemoteProxyAgentImpl <--> nodes
RemoteProxyAgent
no Java3D on nodes or proxy
RemoteClientDataImpl on Client or Proxy, not on User
UserDummyDataImpl extends DataImpl
getType() from adaptedRemoteClientData
RemoteCellImpl triggered by adaptedRemoteClientData
calls notifyReferences()
UserDisplayRendererJ3D extends DefaultDisplayRendererJ3D
like ClientDisplayRendererJ3D
*/
package visad.cluster;
import visad.*;
import visad.java3d.*;
import javax.media.j3d.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.util.Vector;
import java.util.Enumeration;
import java.rmi.*;
import java.io.Serializable;
/**
UserRendererJ3D is the VisAD DataRenderer for remote users
connecting to a cluster via a proxy on the client.
*/
public class UserRendererJ3D extends DefaultRendererJ3D {
// no UserDummyDataImpl variable
// data access via RemoteProxyAgent
private RemoteProxyAgent agent = null;
private DisplayImpl display = null;
private ConstantMap[] cmaps = null;
private DataDisplayLink link = null;
private long time_out = 10000;
private int[] resolutions = null;
public UserRendererJ3D() {
this(null, 10000);
}
public UserRendererJ3D(RemoteProxyAgent a) {
this(a, 10000);
}
public UserRendererJ3D(RemoteProxyAgent a, long to) {
agent = a;
time_out = to;
}
public void setResolutions(int[] rs) throws RemoteException {
try {
agent.setResolutions(rs);
}
catch (RemoteException re) {
if (visad.collab.CollabUtil.isDisconnectException(re)) {
getDisplay().connectionFailed(this, link);
removeLink(link);
return;
}
throw re;
}
}
public DataShadow prepareAction(boolean go, boolean initialize,
DataShadow shadow)
throws VisADException, RemoteException {
DataDisplayLink[] Links = getLinks();
if (Links != null && Links.length > 0) {
link = Links[0];
// initialize cmaps if not already
if (cmaps == null) {
display = getDisplay();
Vector cvector = link.getConstantMaps();
if (cvector != null && cvector.size() > 0) {
int clength = cvector.size();
cmaps = new ConstantMap[clength];
for (int i=0; i=0; i--) {
VisADAppearance appearance = (VisADAppearance) VbranchX.getChild(i);
branchXrev.addChild((Shape3D) convertSceneGraph(appearance));
}
int nY = VbranchY.numChildren();
OrderedGroup branchY = new OrderedGroup();
branchY.setCapability(Group.ALLOW_CHILDREN_READ);
VisADAppearance[] appearanceY = new VisADAppearance[nY];
for (int i=0; i=0; i--) {
VisADAppearance appearance = (VisADAppearance) VbranchY.getChild(i);
branchYrev.addChild((Shape3D) convertSceneGraph(appearance));
}
int nZ = VbranchZ.numChildren();
OrderedGroup branchZ = new OrderedGroup();
branchZ.setCapability(Group.ALLOW_CHILDREN_READ);
VisADAppearance[] appearanceZ = new VisADAppearance[nZ];
for (int i=0; i=0; i--) {
VisADAppearance appearance = (VisADAppearance) VbranchZ.getChild(i);
branchZrev.addChild((Shape3D) convertSceneGraph(appearance));
}
swit.addChild(branchX);
swit.addChild(branchY);
swit.addChild(branchZ);
swit.addChild(branchXrev);
swit.addChild(branchYrev);
swit.addChild(branchZrev);
ProjectionControlJ3D control =
(ProjectionControlJ3D) display.getProjectionControl();
control.addPair(swit, this);
}
branch.addChild(swit);
return branch;
}
else if (scene instanceof VisADGroup) {
VisADGroup group = (VisADGroup) scene;
BranchGroup branch = new BranchGroup();
branch.setCapability(BranchGroup.ALLOW_DETACH);
branch.setCapability(Group.ALLOW_CHILDREN_READ);
branch.setCapability(Group.ALLOW_CHILDREN_WRITE);
branch.setCapability(Group.ALLOW_CHILDREN_EXTEND);
int n = group.numChildren();
for (int i=0; i
Ads help maintain this website.