USGS

Isis 3.0 Object Programmers' Reference

Home

SpectralPlotWindow.cpp
1 #include "IsisDebug.h"
2 
3 #include "SpectralPlotWindow.h"
4 
5 #include <QString>
6 
7 #include "Cube.h"
8 #include "MdiCubeViewport.h"
9 #include "Pvl.h"
10 #include "PvlGroup.h"
11 #include "PvlObject.h"
12 
13 
14 using namespace std;
15 
16 namespace Isis {
24  SpectralPlotWindow::SpectralPlotWindow(PlotCurve::Units xUnits,
25  QWidget *parent) : PlotWindow("Spectral Plot", xUnits,
26  PlotCurve::CubeDN, parent) {
27  nullify();
28 
29  m_showHideBandMarkers = new QAction("Show Band Markers", this);
30  m_showHideBandMarkers->setCheckable(true);
31  m_showHideBandMarkers->setChecked(true);
32  connect(m_showHideBandMarkers, SIGNAL(toggled(bool)),
33  this, SLOT(setBandMarkersVisible(bool)));
34 
35  m_grayBandLine = createMarker(Qt::white);
36  m_redBandLine = createMarker(Qt::red);
37  m_greenBandLine = createMarker(Qt::green);
38  m_blueBandLine = createMarker(Qt::blue);
39 
41 
42  foreach (QAction *menuAction, menuBar()->actions()) {
43  if (menuAction->text() == "&Options") {
44  QMenu *optsMenu = qobject_cast<QMenu *>(menuAction->parentWidget());
45 
46  optsMenu->addAction(m_showHideBandMarkers);
47  }
48  }
49  }
50 
51 
52  SpectralPlotWindow::~SpectralPlotWindow() {
53  nullify();
54  }
55 
56 
61  m_cvp = NULL;
62  m_grayBandLine = NULL;
63  m_redBandLine = NULL;
64  m_greenBandLine = NULL;
65  m_blueBandLine = NULL;
66  m_showHideBandMarkers = NULL;
67  }
68 
69 
77  QwtPlotMarker *SpectralPlotWindow::createMarker(QColor color) {
78  QPen markerPen(color);
79  markerPen.setWidth(1);
80 
81  QwtPlotMarker *newMarker = new QwtPlotMarker;
82  newMarker->setLineStyle(QwtPlotMarker::LineStyle(2));
83  newMarker->setLinePen(markerPen);
84  newMarker->attach(plot());
85  newMarker->setVisible(false);
86 
87  return newMarker;
88  }
89 
90 
97  if (m_cvp) {
98  int redBand = 0, greenBand = 0, blueBand = 0, grayBand = 0;
99 
100  Cube *cube = m_cvp->cube();
101  Pvl &pvl = *cube->label();
102  PvlKeyword wavelengths;
103 
104  if (pvl.findObject("IsisCube").hasGroup("BandBin")) {
105  PvlGroup &bandBin = pvl.findObject("IsisCube").findGroup("BandBin");
106  if (bandBin.hasKeyword("Center")) {
107  wavelengths = bandBin.findKeyword("Center");
108  }
109  }
110 
111  if (m_cvp->isColor()) {
112  redBand = m_cvp->redBand();
113  greenBand = m_cvp->greenBand();
114  blueBand = m_cvp->blueBand();
115  }
116  else {
117  grayBand = m_cvp->grayBand();
118  }
119 
120  /*This is were we need to set the x value to the band number.*/
121  if (grayBand > 0) {
123  m_grayBandLine->setXValue(toDouble(wavelengths[grayBand-1]));
124  }
125  else {
126  m_grayBandLine->setXValue(grayBand);
127  }
128 
129  if (m_markersVisible)
130  m_grayBandLine->show();
131  }
132  else {
133  m_grayBandLine->hide();
134  }
135 
136  if (redBand > 0) {
138  m_redBandLine->setXValue(toDouble(wavelengths[redBand-1]));
139  }
140  else {
141  m_redBandLine->setXValue(redBand);
142  }
143 
144  if (m_markersVisible)
145  m_redBandLine->show();
146  }
147  else {
148  m_redBandLine->hide();
149  }
150  if (greenBand > 0) {
152  m_greenBandLine->setXValue(toDouble(wavelengths[greenBand-1]));
153  }
154  else {
155  m_greenBandLine->setXValue(greenBand);
156  }
157 
158  if (m_markersVisible)
159  m_greenBandLine->show();
160  }
161  else {
162  m_greenBandLine->hide();
163  }
164 
165  if (blueBand > 0) {
167  m_blueBandLine->setXValue(toDouble(wavelengths[blueBand-1]));
168  }
169  else {
170  m_blueBandLine->setXValue(blueBand);
171  }
172 
173  if (m_markersVisible)
174  m_blueBandLine->show();
175  }
176  else {
177  m_blueBandLine->hide();
178  }
179 
180  plot()->replot();
181  }
182  }
183 
184 
192  if (cvp == NULL) return;
193  m_cvp = cvp;
194 
195  }
196 
197 
204  m_markersVisible = visible;
205 
206  m_blueBandLine->setVisible(m_markersVisible);
207  m_redBandLine->setVisible(m_markersVisible);
208  m_greenBandLine->setVisible(m_markersVisible);
209  m_grayBandLine->setVisible(m_markersVisible);
210 
211  replot();
212  }
213 
214 
222  setViewport(activeViewport);
223  drawBandMarkers();
224  }
225 
226 
234  return m_markersVisible;
235  }
236 }
237