Hi Isaak,
I am not sure. Maybe your code did not make it to the list. So I am
forwarding your e-mail.
I did not use the PickManipulationRenderer myself, so I can't help you.
Desiree
oooooooooooooooooooooooooooooooooooooooooooooooo
Desiree Hilbring
Institut fuer Photogrammetrie und Fernerkundung
Universitaet Karlsruhe, Germany
email: hilbring@xxxxxxxxxxxxxxxxxxxx
# 0721 6083676
oooooooooooooooooooooooooooooooooooooooooooooooo
---------- Forwarded message ----------
Date: Sat, 10 Aug 2002 03:36:23 -0400
From: "Brobbey,Isaac" <IBBrobbey@xxxxxxxxxxxxxxx>
To: "'hilbring@xxxxxxxxxxxxxxxxxxxx'" <hilbring@xxxxxxxxxxxxxxxxxxxx>
hello:
I have a little problem with the PickManipulationRendererJ3D and the range
selection, the attached code compiles and runs fine, but the only problem is
that, at run time, when i enter a range value it doesnt work as it is
supposed to.Secondly the PickManipulationRendererJ3D cannot pick any sample
when i right click.
Is it because i try to add two data references to the display ? i am
confused here. The "spikes" in the display corresponds to the ratio values
in the file flatxx.txt, so i expect that when i right click, the
PickManipulationRendererJ3D should execute the getClosedIndex()method and
pick the corresponding sample, but it is not happening. i am not sure if i
am doing something wrong since i am "new" to visad, i dont have much
experience with visad.I have spent about three days trying to find it out,
but from the top-level, i think the doAction() method in the cellImpl()
method is not working but i dont really know what i am missing in the code,
and i will be glad to know any workaround. I appreciate your time and hope
to hear from you very soon.
Isaac
Center for Vascular Biology
code//
import javax.swing.JFrame;
import visad.*;
import visad.java3d.DisplayImplJ3D;
import visad.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.rmi.RemoteException;
import visad.bom.PickManipulationRendererJ3D;
import visad.java3d.DirectManipulationRendererJ3D;
import visad.data.text.TextAdapter;
import java.io.BufferedWriter.*;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.*;
import java.util.Vector;
import java.util.Iterator;
import java.util.StringTokenizer;
public class Spikesxx //implements ActionListener
{
// number of spikes along X axis
private static final int NUM_SPIKES_X = 5;
// number of spikes along Y axis
private static final int NUM_SPIKES_Y = 5;
// increase density value to make spikes "thinner"
// decrease density value to make spikes "thicker"
private static final int DENSITY = 5;
private static final int MAX_HEIGHT = 100;
// The RangeWidget
private static RangeWidget ranWid;
public static String Name=null;
public static double Pi;
public static double ratiox=0;
public static double massx;
public static Vector sue;
public static double bex;
public static Double lex;
public static void main(String[] args) throws Exception
{
Integer2DSet set = new Integer2DSet(
DENSITY * NUM_SPIKES_X, DENSITY * NUM_SPIKES_Y);
RealType xtype = RealType.getRealType("x");
RealType ytype = RealType.getRealType("y");
RealType ratio = RealType.getRealType("ratio");
FunctionType type = new FunctionType(
new RealTupleType(xtype, ytype), ratio);
FlatField field = new FlatField(type, set);
final FieldImpl fieldx =
(FieldImpl) new TextAdapter("flat54xe.txt").getData();
int i=-1;
double[][] samples =
new double[1][DENSITY * NUM_SPIKES_X * DENSITY * NUM_SPIKES_Y];
for (int y=0; y<DENSITY * NUM_SPIKES_Y; y++)
{
for (int x=0; x<DENSITY * NUM_SPIKES_X; x++)
{
int ndx = y * DENSITY * NUM_SPIKES_X + x;
if (x % DENSITY == 0 && y % DENSITY == 0 )
{
i+=1;
Tuple data = (Tuple)fieldx.getSample(i);
System.out.println("Ratio = " +
((Real)data.getComponent(0)).getValue()+ ", ");
samples[0][ndx] =((Real)data.getComponent(0)).getValue();
//else samples[0][ndx] =0; }
else samples[0][ndx]
=-1*Math.random();//((Double)sue.get()).doubleValue();
}
}
field.setSamples(samples);
DisplayImplJ3D display = new DisplayImplJ3D("display");
// display.getGraphicsModeControl().setTextureEnable(false);
GraphicsModeControl gmc = display.getGraphicsModeControl();
//gmc.setPointSize(5.0f);
gmc.setTextureEnable(false);
gmc.setScaleEnable(true);
//freeze the screen
ScalarMap xmap0=new ScalarMap(xtype, Display.XAxis);
xmap0.getAxisScale().setScreenBased(false);
display.addMap(xmap0);
display.addMap(new ScalarMap(ytype, Display.YAxis));
display.addMap(new ScalarMap(ratio, Display.ZAxis));
display.addMap(new ScalarMap(ratio, Display.RGB));
// This is NEW!
// Create a RangeWidget with the ScalarMap timeMap
java.util.Vector mapVector = display.getMapVector();
final int numMaps = mapVector.size();
ScalarMap map1color = (ScalarMap )mapVector.elementAt(numMaps-1);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new LabeledColorWidget(map1color));
ranWid = new RangeWidget(new ScalarMap(xtype, Display.XAxis));
DataReferenceImpl ref = new DataReferenceImpl("ref");
DataReferenceImpl refx = new DataReferenceImpl("refx");
final PickManipulationRendererJ3D pmr3d = new
PickManipulationRendererJ3D();
ref.setData(field);
refx.setData(fieldx);
display.addReference(ref);
display.addReferences(pmr3d,refx);
//cellImpl computation and data retrieval
CellImpl cellfield2d = new CellImpl()
{
private boolean nice = true;
public void doAction() throws VisADException,RemoteException
{
if (nice) nice = false;
else {
int i = pmr3d.getCloseIndex();
System.out.println("i="+i);
//System.out.println("3-D Field picked, index = " + i);
//System.out.println("value = " + field.getSample(i));
Tuple data = (Tuple)fieldx.getSample(i);
Set domainSet = fieldx.getDomainSet();
float[][] values = domainSet.indexToValue(new int[] { i });
}
}
};
cellfield2d.addReference(refx);
//create a panel and add your buttons
JFrame frame = new JFrame("Protein-Spikes,neuron(cvb) Isaac");
//frame.getContentPane().setLayout(new GridLayout(1,2) );
//frame.getContentPane().add("South",subViewOne());
//frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(display.getComponent());
// make a panel
JPanel big_panel = new JPanel();
big_panel.setLayout(new BorderLayout());
big_panel.add("Center", ranWid);
big_panel.add("South", subViewOne());
big_panel.add("North", panel);
// Add the RangeWidget to the frame
JFrame jframe2=new JFrame("Protein-Spikes Controls,neuron(cvb)
copyright*2002 Isaac");
jframe2.setContentPane(big_panel);
jframe2.pack();
jframe2.setVisible(true);
//frame.getContentPane().add(ranWid );
frame.setSize(600, 500);
Util.centerWindow(frame);
frame.setVisible(true);
}
private static JPanel subViewOne()
{
JButton A;
JPanel main = new JPanel();
main.setLayout(new FlowLayout(FlowLayout.LEFT,5,5));
ImageIcon buttonx;
buttonx = new ImageIcon("screen.JPEG");
A=new JButton("select range",buttonx);
// A.addActionListener(this);
//main.addButtons("Images/");
//homeButton.addActionListener(this);
main.add(A);
//main.add(widgetPanel);
return main;
}
public static void actionPerformed (java.awt.event.ActionEvent e)
{
String aix = e.getActionCommand();
if(aix.equals(""))
{
;
}
}
}
//data file flatxx.txt
(isotopicMass, pi) -> (Ratio,name(Text))
Ratio, isotopicMass, pi,name(Text)
69 22100 2 "ACTIN23w_HUMAN"
20 22100 1.5 "ACTIN_HUMAN"
90 22100 2.5 "ACTIN_HUMAN"
79 12100 1.5 "ACTIN2xf_HUMAN"
50 12100 1 "ACTIN_HUMAN"
10 12100 3 "ACTIN_HUMAN"