public DragLine(
        final MultiSpectralDisplay msd,
        final String controlId,
        final ConstantMap[] color,
        float[] YRANGE)
        throws Exception {
      if (msd == null)
        throw new NullPointerException("must provide a non-null MultiSpectralDisplay");
      if (controlId == null) throw new NullPointerException("must provide a non-null control ID");
      if (color == null) throw new NullPointerException("must provide a non-null color");

      this.controlId = controlId;
      this.multiSpectralDisplay = msd;
      this.YRANGE = YRANGE;
      lastSelectedValue = multiSpectralDisplay.getWaveNumber();

      for (int i = 0; i < color.length; i++) {
        mappings[i] = (ConstantMap) color[i].clone();
      }
      mappings[4] = new ConstantMap(-0.5, Display.YAxis);

      Gridded1DSet domain = multiSpectralDisplay.getDomainSet();

      domainType = multiSpectralDisplay.getDomainType();
      rangeType = multiSpectralDisplay.getRangeType();
      tupleType = new RealTupleType(domainType, rangeType);

      selector = new DataReferenceImpl(selectorId);
      line = new DataReferenceImpl(lineId);

      display = multiSpectralDisplay.getDisplay();

      display.addReferences(
          new GrabLineRendererJ3D(domain),
          new DataReference[] {selector},
          new ConstantMap[][] {mappings});
      display.addReference(line, cloneMappedColor(color));

      addReference(selector);
    }
    public RubberBandBox(final MultiSpectralDisplay msd, final ScalarMap x, final ScalarMap y)
        throws VisADException, RemoteException {
      RealType domainType = msd.getDomainType();
      RealType rangeType = msd.getRangeType();

      LocalDisplay display = msd.getDisplay();

      rubberBand = new DataReferenceImpl(hashCode() + RBB);
      rubberBand.setData(
          new RealTuple(
              new RealTupleType(domainType, rangeType), new double[] {Double.NaN, Double.NaN}));

      display.addReferences(
          new RubberBandBoxRendererJ3D(domainType, rangeType, 1, 1),
          new DataReference[] {rubberBand},
          null);

      xmap = x;
      ymap = y;

      this.addReference(rubberBand);
    }