//
// DefaultRendererJ3D.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.java3d;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.rmi.RemoteException;

import javax.media.j3d.BranchGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;

import visad.AnimationControl;
import visad.ContourControl;
import visad.Data;
import visad.DataDisplayLink;
import visad.DataReferenceImpl;
import visad.Display;
import visad.DisplayException;
import visad.DisplayImpl;
import visad.FieldImpl;
import visad.FlatField;
import visad.FunctionType;
import visad.Integer1DSet;
import visad.Integer3DSet;
import visad.RealTupleType;
import visad.RealType;
import visad.ScalarMap;
import visad.VisADException;


/**
   DefaultRendererJ3D is the VisAD class for the default graphics
   rendering algorithm under Java3D.

*/ public class DefaultRendererJ3D extends RendererJ3D { DataDisplayLink link = null; /** this is the default DataRenderer used by the addReference method for DisplayImplJ3D */ public DefaultRendererJ3D () { super(); } public void setLinks(DataDisplayLink[] links, DisplayImpl d) throws VisADException { if (links == null || links.length != 1) { throw new DisplayException("DefaultRendererJ3D.setLinks: must be " + "exactly one DataDisplayLink"); } super.setLinks(links, d); link = links[0]; } /** create a BranchGroup scene graph for Data in links[0] */ public BranchGroup doTransform() throws VisADException, RemoteException { if (link == null) return null; BranchGroup branch = new BranchGroup(); branch.setCapability(BranchGroup.ALLOW_DETACH); branch.setCapability(BranchGroup.ALLOW_CHILDREN_READ); branch.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); // BMF ShadowTypeJ3D type = (ShadowTypeJ3D) link.getShadow(); /** TDR, if a scalarMap to Animation, make make the Data's node live, ie add it to Display via setBranchEarly. */ boolean isAnimation = false; java.util.Vector scalarMaps = link.getSelectedMapVector(); for (int kk = 0; kk < scalarMaps.size(); kk++) { ScalarMap scalarMap = (ScalarMap) scalarMaps.elementAt(kk); if ( (scalarMap.getDisplayScalar()).equals(Display.Animation) ) { isAnimation = true; } } if (isAnimation) setBranchEarly(branch); // initialize valueArray to missing int valueArrayLength = getDisplay().getValueArrayLength(); float[] valueArray = new float[valueArrayLength]; for (int i=0; i 0) { test = args[0]; if (!test.equals("default")) { System.out.println("args: 'default' for Default logic, None for Animation"); System.exit(0); } } int size = 160; int nr = size; int nc = size; int nz = size; double ang = 2 * Math.PI / nr; RealType[] types = { RealType.Latitude, RealType.Longitude, RealType.Altitude }; RealTupleType earth_location = new RealTupleType(types); RealType radiance = RealType.getRealType("radiance", null, null); RealType index = RealType.getRealType("index", null, null); FunctionType image_type = new FunctionType(earth_location, radiance); Integer3DSet image_domain_set = new Integer3DSet( RealTupleType.SpatialCartesian3DTuple, nr, nc, nz); FunctionType field_type = new FunctionType(index, image_type); Integer1DSet field_domain_set = new Integer1DSet(index, 6); FieldImpl field = new FieldImpl(field_type, field_domain_set); FlatField image = null; for (int tt = 0; tt < field_domain_set.getLength(); tt++) { float[][] values = new float[1][nr * nc * nz]; for (int kk = 0; kk < nz; kk++) { for (int jj = 0; jj < nc; jj++) { for (int ii = 0; ii < nr; ii++) { int idx = kk * nr * nc + jj * nr + ii; values[0][idx] = (tt + 1)*(2f*((float) Math.sin(2*ang*ii)) + 2f*((float) Math.sin(2 * ang * jj))) + kk; } } } image = new FlatField(image_type, image_domain_set); image.setSamples(values); field.setSample(tt, image, false); } DisplayImplJ3D dpys = new DisplayImplJ3D("AnimationRendererJ3D Test"); JFrame jframe = new JFrame("AnimationRendererTest"); jframe.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); jframe.setContentPane((JPanel) dpys.getComponent()); jframe.pack(); jframe.setVisible(true); ScalarMap xmap = new ScalarMap(RealType.Longitude, Display.XAxis); dpys.addMap(xmap); ScalarMap ymap = new ScalarMap(RealType.Latitude, Display.YAxis); dpys.addMap(ymap); ScalarMap zmap = new ScalarMap(RealType.Altitude, Display.ZAxis); dpys.addMap(zmap); ScalarMap rgbaMap = new ScalarMap(radiance, Display.RGBA); dpys.addMap(rgbaMap); ScalarMap amap = new ScalarMap(index, Display.Animation); dpys.addMap(amap); ScalarMap map1contour = new ScalarMap(radiance, Display.IsoContour); dpys.addMap(map1contour); ContourControl ctr_cntrl = (ContourControl) map1contour.getControl(); ctr_cntrl.setSurfaceValue(24f); AnimationControl acontrol = (AnimationControl) amap.getControl(); //acontrol.setOn(true); acontrol.setStep(500); DataReferenceImpl ref = new DataReferenceImpl("field_ref"); if (test.equals("default")) { ref.setData(image); } else { ref.setData(field); } dpys.addReference(ref); } }

Ads help maintain this website.