/*
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
*/
import java.awt.Component;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import java.rmi.RemoteException;
import visad.*;
import visad.java3d.DisplayImplJ3D;
import visad.util.LabeledColorWidget;
import visad.util.SelectRangeWidget;
public class Test61
extends UISkeleton
{
private boolean nice = false;
private int texture3DMode = GraphicsModeControl.STACK2D;
public Test61() { }
public Test61(String[] args)
throws RemoteException, VisADException
{
super(args);
}
public void initializeArgs() {
nice = false;
texture3DMode = GraphicsModeControl.STACK2D;
}
public int checkKeyword(String testName, int argc, String[] args)
{
if (argc == 0 && !args[argc].equals("t")) {
nice = true;
}
if (argc == 1 || args[argc].equals("t")) {
texture3DMode = GraphicsModeControl.TEXTURE3D;
}
return 1;
}
DisplayImpl[] setupServerDisplays()
throws RemoteException, VisADException
{
DisplayImpl[] dpys = new DisplayImpl[1];
dpys[0] = new DisplayImplJ3D("display", DisplayImplJ3D.APPLETFRAME);
return dpys;
}
private static float[][] buildTable(float[][] table)
{
int length = table[0].length;
for (int i=0; i<length; i++) {
float a = ((float) i) / ((float) (table[3].length - 1));
table[3][i] = a;
}
return table;
}
void setupServerData(LocalDisplay[] dpys)
throws RemoteException, VisADException
{
RealType xr = RealType.getRealType("xr");
RealType yr = RealType.getRealType("yr");
RealType zr = RealType.getRealType("zr");
RealType wr = RealType.getRealType("wr");
RealType[] types3d = {xr, yr, zr};
RealTupleType earth_location3d = new RealTupleType(types3d);
FunctionType grid_tuple = new FunctionType(earth_location3d, wr);
// int NX = 32;
// int NY = 32;
// int NZ = 32;
int NX = 35;
int NY = 35;
int NZ = 35;
Integer3DSet set = new Integer3DSet(NX, NY, NZ);
FlatField grid3d = new FlatField(grid_tuple, set);
float[][] values = new float[1][NX * NY * NZ];
int k = 0;
for (int iz=0; iz<NZ; iz++) {
// double z = Math.PI * (-1.0 + 2.0 * iz / (NZ - 1.0));
double z = Math.PI * (-1.0 + 2.0 * iz * iz / ((NZ - 1.0)*(NZ - 1.0)) );
for (int iy=0; iy<NY; iy++) {
double y = -1.0 + 2.0 * iy / (NY - 1.0);
for (int ix=0; ix<NX; ix++) {
double x = -1.0 + 2.0 * ix / (NX - 1.0);
double r = x - 0.5 * Math.cos(z);
double s = y - 0.5 * Math.sin(z);
double dist = Math.sqrt(r * r + s * s);
values[0][k] = (float) ((dist < 0.1) ? 10.0 : 1.0 / dist);
k++;
}
}
}
grid3d.setSamples(values);
dpys[0].addMap(new ScalarMap(xr, Display.XAxis));
dpys[0].addMap(new ScalarMap(yr, Display.YAxis));
dpys[0].addMap(new ScalarMap(zr, Display.ZAxis));
ScalarMap xrange = new ScalarMap(xr, Display.SelectRange);
ScalarMap yrange = new ScalarMap(yr, Display.SelectRange);
ScalarMap zrange = new ScalarMap(zr, Display.SelectRange);
dpys[0].addMap(xrange);
dpys[0].addMap(yrange);
dpys[0].addMap(zrange);
GraphicsModeControl mode = dpys[0].getGraphicsModeControl();
mode.setScaleEnable(true);
if (nice) mode.setTransparencyMode(DisplayImplJ3D.NICEST);
mode.setTexture3DMode(texture3DMode);
// new
RealType duh = RealType.getRealType("duh");
int NT = 32;
Linear2DSet set2 = new Linear2DSet(0.0, (double) NX, NT,
0.0, (double) NY, NT);
RealType[] types2d = {xr, yr};
RealTupleType domain2 = new RealTupleType(types2d);
FunctionType ftype2 = new FunctionType(domain2, duh);
float[][] v2 = new float[1][NT * NT];
for (int i=0; i<NT*NT; i++) {
v2[0][i] = (i * i) % (NT/2 +3);
}
// float[][] v2 = {{1.0f,2.0f,3.0f,4.0f}};
FlatField field2 = new FlatField(ftype2,set2);
field2.setSamples(v2);
dpys[0].addMap(new ScalarMap(duh, Display.RGB));
ScalarMap map1color = new ScalarMap(wr, Display.RGBA);
dpys[0].addMap(map1color);
ColorAlphaControl control = (ColorAlphaControl) map1color.getControl();
control.setTable(buildTable(control.getTable()));
DataReferenceImpl ref_grid3d = new DataReferenceImpl("ref_grid3d");
ref_grid3d.setData(grid3d);
DataReferenceImpl ref2 = new DataReferenceImpl("ref2");
ref2.setData(field2);
ConstantMap[] cmaps = {new ConstantMap(0.0, Display.TextureEnable)};
dpys[0].addReference(ref2, cmaps);
dpys[0].addReference(ref_grid3d, null);
}
String getFrameTitle0() { return "VisAD Color Alpha Widget"; }
Component getSpecialComponent(LocalDisplay[] dpys)
throws RemoteException, VisADException
{
java.util.Vector mapVector = dpys[0].getMapVector();
final int numMaps = mapVector.size();
ScalarMap xrange = (ScalarMap )mapVector.elementAt(numMaps-5);
ScalarMap yrange = (ScalarMap )mapVector.elementAt(numMaps-4);
ScalarMap zrange = (ScalarMap )mapVector.elementAt(numMaps-3);
ScalarMap map1color = (ScalarMap )mapVector.elementAt(numMaps-1);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new LabeledColorWidget(map1color));
panel.add(new SelectRangeWidget(xrange));
panel.add(new SelectRangeWidget(yrange));
panel.add(new SelectRangeWidget(zrange));
return panel;
}
public String toString()
{
return " smooth texture3D: volume rendering and ColorAlphaWidget";
}
public static void main(String[] args)
throws RemoteException, VisADException
{
new Test61(args);
}
}