//
// ClientRendererJ3D.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
*/

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;

/**
   ClientRendererJ3D is the VisAD DataRenderer for cluster clients
*/
public class ClientRendererJ3D extends DefaultRendererJ3D {

  private DisplayImpl display = null;
  private ConstantMap[] cmaps = null;

  private DataDisplayLink link = null;
  private Data data = null;
  private boolean cluster = true;

  private RemoteClientAgentImpl[] agents = null;
  private RemoteClientAgentImpl focus_agent = null;
  private RemoteAgentContact[] contacts = null;

  private long time_out = 10000;

  private int[] resolutions = null;

  public ClientRendererJ3D () {
    this(10000);
  }

  public ClientRendererJ3D (long to) {
    time_out = to;
  }

  public void setResolutions(int[] rs) {
    if (rs == null) return;
    int n = rs.length;
    resolutions = new int[n];
    for (int i=0; i 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.