Hi Folks,
I am trying to display McIdas map outlines within a 3D bounding box
using VisAD and the BaseMapAdapter class.  I am running into
difficulties when I try to select a longitude range that extends beyond
+/-180 degrees (for example, a map outline over the Pacific Ocean
between -240 and -60 degrees longitude).
I can successfully select this range and display the desired map
outlines using the ScalarMap setRange methods.  However, this results
in a display with the correct map outlines within the 3D bounding box,
but the rest of the entire world map also extends outside the 3D
bounding box.
I then added code to generate a rangeControl so that the map outlines
outside of the bounding box would be eliminated.  However, when this
code is added, the map outlines that extend beyond +/-180 degrees
longitude no longer display inside the 3D bounding box.  This approach
works fine as long as I stay withing +/-180 degrees longitude, but, if
I want a map outline over the Pacific Ocean, for example, I am unable
to display the outlines beyond -180 degrees longitude.
I am appending some sample code that demonstrates this problem. 
Any suggestions for a way around this or a better approach to take for
displaying map outlines?
Thanks!
Tim Scheitlin
National Center For Atmospheric Research
scheitln@xxxxxxxx
/* CCLI MapTest Class */
/* 
   This class is responsible for reading a McIdas Map database and
   drawing a map.
*/
// Import needed classes
import visad.*;
import java.rmi.RemoteException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.*;
import visad.ColorControl;
import visad.CoordinateSystem;
import visad.ConstantMap;
import visad.Data;
import visad.DataReference;
import visad.DataReferenceImpl;
import visad.Display;
import visad.DisplayImpl;
import visad.RealTupleType;
import visad.RealType;
import visad.ScalarMap;
import visad.data.mcidas.BaseMapAdapter;
import visad.java3d.DisplayImplJ3D;
import visad.RangeControl;
public class MapTest
{
   public static ScalarMap latMap;     // latitude  -> YAxis
   public static ScalarMap lonMap;     // longitude -> XAxis
   public static ScalarMap lonRangeMap;
   public static ScalarMap latRangeMap;
   public static DataReference maplinesRef;
   public static ConstantMap[] maplinesConstantMap = new ConstantMap[4];
   public static DisplayImplJ3D display;
    public MapTest(String mapFile)
    {
        try
        {
            //  Read in the map file
            BaseMapAdapter baseMapAdapter;
            baseMapAdapter = new BaseMapAdapter(mapFile);
            // Set ScalarMaps for X and Y axes
            latMap = new ScalarMap(RealType.Latitude, Display.YAxis);
            lonMap = new ScalarMap(RealType.Longitude, Display.XAxis);
            // Remove any prior data references
            display.removeAllReferences();
            // Add the lat/lon maps
            display.addMap(latMap);
            display.addMap(lonMap);
            // Set the lat/lon range within the 3D bounding box
            latMap.setRange(-30.0, 30.0);
            lonMap.setRange(-240.0, -60.0);
// In this next code section I am trying to create a RangeControl so that
// only the desired world map outlines between longitude -240 to -60 and 
// latitude -30 to 30 are displayed in the 3D bounding box.
// However, when this code is added, the map outlines between -240 and -180
// degrees Longitude do not display.  If the code is commented out, as below,
// all the correct map outlines appear within the 3D bounding box.  However,
// the rest of the world map also appears outside of the bounding box.
// How do I get all the desired map outlines within the 3D bounding box 
// without having the rest of the world map appear outside the bounding box?
//      lonRangeMap = new ScalarMap(RealType.Longitude,Display.SelectRange);
//      display.addMap(lonRangeMap);
//      RangeControl lonRangeControl = (RangeControl) lonRangeMap.getControl();
//      latRangeMap = new ScalarMap(RealType.Latitude,Display.SelectRange);
//      display.addMap(latRangeMap);
//      RangeControl latRangeControl = (RangeControl) latRangeMap.getControl();
//      float[] nlonRange = { -240.0f, -60.0f };
//      float[] nlatRange = { -30.0f, 30.0f };
//      lonRangeControl.setRange ( nlonRange );
//      latRangeControl.setRange ( nlatRange );
            // create a reference for the map lines
            maplinesRef = new DataReferenceImpl("MapTest");
            maplinesRef.setData(baseMapAdapter.getData());
            // set the attributes of the map lines (color, location)
            maplinesConstantMap[0] = new ConstantMap(0., Display.Blue);
            maplinesConstantMap[1] = new ConstantMap(1., Display.Red);
            maplinesConstantMap[2] = new ConstantMap(0., Display.Green);
            maplinesConstantMap[3] = new ConstantMap(1.001, Display.Radius); 
            display.addReference (maplinesRef, maplinesConstantMap);
        }
        catch (Exception ne)
        {
            ne.printStackTrace(); System.exit(1);
        }
    }
  public static void main(String[] args)
        throws RemoteException, VisADException
  {
    display = new DisplayImplJ3D("display1");
    MapTest mapLines = new MapTest("../OUTLSUPW");
    JFrame jframe = new JFrame();
    jframe.setContentPane( (JPanel) display.getComponent() );
    jframe.setSize(400,400);
    jframe.setVisible(true);
    
  }
}