Hi Sunila And Pardeep,
> 1. We have created a 2D geometry by passing x and y values in the
> Gridded2DSet constructor and setting data to DataReference as UnionSet. We
> want both the points(of greater pixel size) and lines to be visible. Suggest
> us with this.
>
> 2. Also, We want to access the points of the geometry created as above, say
> when a user clicks on points and drags them, the lines connecting them
> should move as the point moves. Please suggest us about this.
>
> 3. We want the display of the co-ordinates always visible. Is it possible?
> please advice.
To do these things, you will need to construct three different
types of Data objects all linked to your DisplayImplJ3D:
1. Lines:
Construct a UnionSet of Gridded2DSets with manifold dimension = 1
with MathType: Set(x, y). This is similar to the construction
in the visad.Delaunay.main() method for dim == 3. But that construction
is for an irregular topology (from a 3-D Delaunay), whereas you need
a gridded 2-D topology. Its not too hard: just think of the lines on
a 2-D checkerboard.
2. Coordinate labels:
Construct a FieldImpl with MathType: (t -> (x, y, text(Text))),
as again in the visad.Delaunay.main() method. Note if you run
'java visad.Delaunay 3 20 2 4' you will see an irregular 3-D
topology with labels on the vertices. Of course, you want to label
them with coordinates rather than index values.
3. Draggable vertices:
For each vertex, construct a RealTuple with MathType: (x, y)
and link to the DisplayImplJ3D and a set of CellImpls as follows:
DataReferenceImpl[] dr = new DataReferenceImpl[nvertices];
RealTuple[] real_tuple = new RealTuple[nvertices];
for (int i=0; i<nvertices; i++) {
real_tuple[i] = new RealTuple(xy, ...);
DataReferenceImpl dr[i] = new DataReferenceImpl("dr" + i);
dr[i].setData(real_tuple[i]);
DirectManipulationRendererJ3D dmr = new DirectManipulationRendererJ3D();
// greater pixel size
ConstantMap[] cm = {new ConstantMap(4.0, Display.PointSize);
display.addReferences(dmr, dr[i], cm);
CellImpl cell = new CellImpl() {
private boolean first = true;
private int index = i;
public void doAction() throws VisADException, RemoteException {
if (first) first = false;
else {
// here process the fact that vertex number 'index' has moved
RealTuple rt = (RealTuple) dr[index].getData(); // new location of
vertex
// need to reconstruct lines UnionSet, and
// set (x, y, text(Text)) range value for this vertex
// in labels FieldImpl
. . .
}
}
};
cell.addReference(dr[i]);
}
Cheers,
Bill
----------------------------------------------------------
Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI 53706
hibbard@xxxxxxxxxxxxxxxxx 608-263-4427 fax: 608-263-6738
http://www.ssec.wisc.edu/~billh/vis.html