Here is a small example that I used when training in Australia which
illustrates what Bill wrote. Hope you find it helpful...
tom
// import needed classes
import visad.*;
import visad.java2d.DisplayImplJ2D;
import visad.java2d.DirectManipulationRendererJ2D;
import java.rmi.RemoteException;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ShapeTest {
// type 'java ShapeTest' to run this application
public static void main(String args[])
throws VisADException, RemoteException {
final RealType x = new RealType("x");
final RealType y = new RealType("y");
final RealType shape = new RealType("shape");
DisplayImpl disp = new DisplayImplJ2D("display");
ScalarMap sx = new ScalarMap(x, Display.XAxis);
sx.setRange(-1.0, 1.0);
disp.addMap(sx);
ScalarMap sy = new ScalarMap(y, Display.YAxis);
sy.setRange(-1.0, 1.0);
disp.addMap(sy);
ScalarMap shape_map = new ScalarMap(shape, Display.Shape);
disp.addMap(shape_map);
final RealTupleType coord_type = new RealTupleType(x, y, shape);
RealTuple coord_tuple =
new RealTuple(coord_type, new double[] {0.7, -0.3, 0});
RealTuple coord_tuple2 =
new RealTuple(coord_type, new double[] {-0.7, 0.3, 1});
// make some shapes..
VisADLineArray cross = new VisADLineArray();
cross.coordinates = new float[]
{0.2f, 0.2f, 0.0f, -0.2f, -0.2f, 0.0f,
0.2f, -0.2f, 0.0f, -0.2f, 0.2f, 0.0f};
cross.vertexCount = cross.coordinates.length / 3;
double[] start = {0.0, 0.0, 0.0}; // text at origin
double[] base = {0.1, 0.0, 0.0}; // text out along XAxis
double[] up = {0.0, 0.1, 0.0}; // character up along YAxis
boolean center = true; // center text
VisADLineArray tom = PlotText.render_label("Tom", start, base, up, center);
VisADGeometryArray[] shapes = new VisADGeometryArray[] {cross, tom};
ShapeControl shape_control = (ShapeControl) shape_map.getControl();
shape_control.setShapeSet(new Integer1DSet(2));
shape_control.setShapes(shapes);
// now attach to the display
DataReferenceImpl ref_coord_tuple = new DataReferenceImpl("ref_c_t");
ref_coord_tuple.setData(coord_tuple);
DataReferenceImpl ref_coord_tuple2 = new DataReferenceImpl("ref_c_t2");
ref_coord_tuple2.setData(coord_tuple2);
ConstantMap[] yellow = new ConstantMap[] {
new ConstantMap(1., Display.Red),
new ConstantMap(1., Display.Green),
new ConstantMap(0., Display.Blue),
};
ConstantMap[] cyan = new ConstantMap[] {
new ConstantMap(0., Display.Red),
new ConstantMap(1., Display.Green),
new ConstantMap(1., Display.Blue),
};
// for simple dipslay, use
//disp.addReference(ref_coord_tuple);
//disp.addReference(ref_coord_tuple2);
// ...or...for interactive display, use
disp.addReferences(new DirectManipulationRendererJ2D(), ref_coord_tuple,
cyan);
disp.addReferences(new DirectManipulationRendererJ2D(), ref_coord_tuple2,
yellow);
// to list out the values at the cursor
final DisplayRenderer dr = disp.getDisplayRenderer();
CellImpl cell = new CellImpl() {
public void doAction() throws VisADException {
double xcoord = dr.getDirectAxisValue(x);
double ycoord = dr.getDirectAxisValue(y);
System.out.println("x,y ="+xcoord+" "+ycoord);
}
};
cell.addReference(ref_coord_tuple);
cell.addReference(ref_coord_tuple2);
// end of list out values addition...
JFrame frame = new JFrame("Dot Application");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
// create JPanel in JFrame
JPanel panel = new JPanel();
frame.getContentPane().add(disp.getComponent());
// set size of JFrame and make it visible
frame.setSize(300, 300);
frame.setVisible(true);
}
}
--
Tom Whittaker (tomw@xxxxxxxxxxxxx)
University of Wisconsin-Madison
Space Science and Engineering Center
Phone/VoiceMail: 608/262-2759
Fax: 608/262-5974