001/*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2024
005 * Space Science and Engineering Center (SSEC)
006 * University of Wisconsin - Madison
007 * 1225 W. Dayton Street, Madison, WI 53706, USA
008 * https://www.ssec.wisc.edu/mcidas/
009 * 
010 * All Rights Reserved
011 * 
012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013 * some McIDAS-V source code is based on IDV and VisAD source code.  
014 * 
015 * McIDAS-V is free software; you can redistribute it and/or modify
016 * it under the terms of the GNU Lesser Public License as published by
017 * the Free Software Foundation; either version 3 of the License, or
018 * (at your option) any later version.
019 * 
020 * McIDAS-V is distributed in the hope that it will be useful,
021 * but WITHOUT ANY WARRANTY; without even the implied warranty of
022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
023 * GNU Lesser Public License for more details.
024 * 
025 * You should have received a copy of the GNU Lesser Public License
026 * along with this program.  If not, see https://www.gnu.org/licenses/.
027 */
028
029package edu.wisc.ssec.mcidasv.control;
030
031
032import ucar.unidata.data.DataChoice;
033import ucar.unidata.data.grid.GridUtil;
034
035import ucar.unidata.idv.DisplayConventions;
036import ucar.unidata.idv.control.ImagePlanViewControl;
037
038import ucar.unidata.ui.colortable.ColorTableManager;
039import ucar.unidata.util.GuiUtils;
040import ucar.unidata.util.Misc;
041import ucar.unidata.util.Range;
042import ucar.unidata.util.ColorTable;
043
044import ucar.visad.display.DisplayableData;
045import ucar.visad.display.Grid2DDisplayable;
046
047import visad.*;
048import visad.VisADException;
049
050import java.rmi.RemoteException;
051
052import java.util.List;
053
054/**
055 * Class for controlling the display of images.
056 * @author IDV Development Group
057 * @version $Revision$
058 */
059public class HydraPlanViewControl extends ImagePlanViewControl {
060
061    /**
062     * Default constructor.  Sets the attribute flags used by
063     * this particular {@code PlanViewControl}
064     */
065    public HydraPlanViewControl() {
066        super();
067        setAttributeFlags(FLAG_COLORTABLE | FLAG_DISPLAYUNIT
068                          | FLAG_ZPOSITION | FLAG_SKIPFACTOR);
069    }
070
071    /**
072     * Method to create the particular {@code DisplayableData} that
073     * this this instance uses for data depictions.
074     * @return Contour2DDisplayable for this instance.
075     *
076     * @throws VisADException   VisAD error
077     * @throws RemoteException   RMI error
078     */
079    protected DisplayableData createPlanDisplay()
080            throws VisADException, RemoteException {
081        Grid2DDisplayable gridDisplay = 
082            new Grid2DDisplayable("ImagePlanViewControl_" + ((datachoice != null)
083                ? datachoice.toString()
084                : ""), true);
085        gridDisplay.setTextureEnable(true);
086        /* TODO: Find out why this causes redisplays
087        if (BaseImageControl.EMPTY_IMAGE != null) {
088            gridDisplay.loadData(BaseImageControl.EMPTY_IMAGE);
089        }
090        */
091        //gridDisplay.setUseRGBTypeForSelect(true);
092        addAttributedDisplayable(gridDisplay);
093        return gridDisplay;
094    }
095
096    /**
097     * Get the initial color table for the data
098     *
099     * @return  intitial color table
100     */
101    protected ColorTable getInitialColorTable() {
102/*
103        DisplayConventions dc = getDisplayConventions();
104        List colorNames = dc.getColorNameList();
105        ColorTable colorTable = super.getInitialColorTable();
106        if (colorTable.getName().equalsIgnoreCase("default")) {
107            colorTable = dc.getParamColorTable("image");
108        }
109*/
110        ColorTableManager ctm = getControlContext().getColorTableManager();
111        ColorTable colorTable = ctm.getColorTable("ColorTable_AOD");
112        return colorTable;
113    }
114
115
116    /**
117     * Get whether this display should allow smoothing
118     * @return true if allows smoothing.
119     */
120    public boolean getAllowSmoothing() {
121        return false;
122    }
123
124
125    /**
126     * Get the initial range for the data and color table.
127     * @return  initial range
128     *
129     * @throws RemoteException  Java RMI error
130     * @throws VisADException   VisAD Error
131     */
132    protected Range getInitialRange() throws RemoteException, VisADException {
133        Range range = getDisplayConventions().getParamRange(paramName,
134                          getDisplayUnit());
135        System.out.println(paramName);
136        System.out.println(range);
137        //Don't do this for now
138        /**
139        if (range == null) {
140            range = getRangeFromColorTable();
141            if ((range != null) && (range.getMin() == range.getMax())) {
142                range = null;
143            }
144        }
145
146        if (range == null) {
147            range = getDisplayConventions().getParamRange("image",
148                    getDisplayUnit());
149        }
150        if (range == null) {
151            return new Range(0, 255);
152        }
153        **/
154        range = new Range((double)0.0, (double)0.99);
155        return range;
156    }
157
158    /**
159     * Get the slice for the display
160     *
161     * @param slice  slice to use
162     *
163     * @return slice with skip value applied
164     *
165     * @throws VisADException  problem subsetting the slice
166     */
167    protected FieldImpl getSliceForDisplay(FieldImpl slice)
168            throws VisADException {
169        checkImageSize(slice);
170        if (getSkipValue() <= 0) {
171            return slice;
172        }
173        return GridUtil.subset(slice, getSkipValue() + 1);
174    }
175
176    /**
177     * Return the label that is to be used for the skip widget
178     * This allows derived classes to override this and provide their
179     * own name,
180     *
181     * @return Label used for the line width widget
182     */
183    public String getSkipWidgetLabel() {
184        return "Pixel Sampling";
185    }
186
187}