>1) Using PickManipulationRendererJ3D, I'd like to be able to have some way of
>telling what I've picked. Currently, I'm doing this by having a separate field
>and DataReferenceImpl for each thing that I might want to pick, and passing
>the Java object in to an appropriately designed subclass of CellImpl. Since
>there's a separate CellImpl for each object, I can then tell which object i've
>This works, but seems a bit clunky. Is there a cleaner way to do it?
I'm no expert on PickManipulationRenderer, so I'll have to pass this one off to
>2) Having clicked on something, I'd like to remap its appearance, which is
>currently determined by a reference to a ConstantMap which defines colors and
>point sizes. What's the best way to go about redefining the constant map?
Instead of using ConstantMaps to color, you could use ScalarMaps, and have the
color values be range values of a field. Then it's easy to change the colors
with FieldImpl or FlatField's setSamples method. Changing PointSize dynamically
is trickier, since you can't use a ScalarMap to PointSize. Maybe someone else
knows an easier way to do it than to remove and re-add your data reference.
Personally, I recommend against using a variable PointSize to represent some
aspect of the data, since the point size is fixed with respect to zoom. (That's
why I suggested using Display.Shape instead when we talked before. Speaking of
which, I notice you haven't mentioned it. Did you get it figured out?)
>3) How would I go about changing the initial view (zoom and camera position)
>of a DisplayImplJ3D?
DisplayImpl.getProjectionControl().setMatrix(double) lets you set the
display's orientation and aspect ratio however you want. Just construct an
appropriate matrix before showing the display onscreen. These matrices are
standard 4x4 3D projection matrices.
>4) I'd like to revise the rotation behavior for the DisplayImpleJ3D.
>Specifically, I'd like to support (at the user's discretion) rotation that is
>constrained along one axis at a time. What would be the best way to do this?
I think the cleanest way to do this would be to create a subclass of
visad.java3d.MouseBehaviorJ3D and visad.MouseHelper. If you take a look at
MouseBehaviorJ3D.processStimulus, you'll see that the actual processing for
mouse events is done in MouseHelper.processEvent, which would be the core
method for handling your custom logic.