2 #include "ScatterPlotWindow.h"
6 #include <qwt_color_map.h>
7 #include <qwt_double_range.h>
9 #include <qwt_plot_layout.h>
10 #include <qwt_plot_panner.h>
11 #include <qwt_plot_spectrogram.h>
12 #include <qwt_plot_zoomer.h>
13 #include <qwt_scale_draw.h>
14 #include <qwt_scale_widget.h>
19 #include "ScatterPlotAlarmConfigDialog.h"
20 #include "ScatterPlotData.h"
21 #include "ScatterPlotTool.h"
23 #include "ViewportMainWindow.h"
44 ScatterPlotWindow::ScatterPlotWindow(QString title,
45 Cube *xAxisCube,
int xAxisBand,
int xAxisBinCount,
46 Cube *yAxisCube,
int yAxisBand,
int yAxisBinCount,
47 QwtInterval sampleRange, QwtInterval lineRange,
52 ~BackgroundSwitchMenuOption &
53 ~ShowTableMenuOption &
54 ~ClearPlotMenuOption &
55 ~ShowHideMarkersMenuOption &
56 ~ShowHideCurvesMenuOption &
57 ~ConfigurePlotMenuOption)) {
72 xAxisCube, xAxisBand, xAxisBinCount,
73 yAxisCube, yAxisBand, yAxisBinCount,
74 sampleRange, lineRange);
89 QwtScaleWidget *rightAxis =
plot()->axisWidget(QwtPlot::yRight);
90 rightAxis->setTitle(
"Counts");
91 rightAxis->setColorBarEnabled(
true);
95 plot()->setAxisScale(QwtPlot::yRight,
98 plot()->enableAxis(QwtPlot::yRight);
100 plot()->setAxisTitle(QwtPlot::xBottom,
101 QFileInfo(xAxisCube->
fileName()).baseName() +
" Band " +
102 QString::number(xAxisBand) +
" " +
103 plot()->axisTitle(QwtPlot::xBottom).text());
104 plot()->setAxisTitle(QwtPlot::yLeft,
105 QFileInfo(yAxisCube->
fileName()).baseName() +
" Band " +
106 QString::number(yAxisBand) +
" " +
107 plot()->axisTitle(QwtPlot::yLeft).text());
110 QwtInterval range =
m_spectrogram->data()->interval(Qt::ZAxis);
112 for (
double level = range.minValue();
113 level < range.maxValue();
114 level += ((range.maxValue() - range.minValue()) / 6.0)) {
115 contourLevels += level;
127 m_contour->setText(
"Hide Contour Lines");
129 QPixmap(
FileName(
"$base/icons/scatterplotcontour.png").expanded()));
134 configureAlarmingAct->setText(
"Change Alarming");
135 configureAlarmingAct->setIcon(
136 QPixmap(
FileName(
"$base/icons/scatterplotalarming.png").expanded()));
137 connect(configureAlarmingAct, SIGNAL(activated()),
140 foreach (
QAction *menuAction, menuBar()->actions()) {
141 if (menuAction->text() ==
"&Options") {
142 QMenu *optsMenu = qobject_cast<QMenu *>(menuAction->parentWidget());
145 optsMenu->addAction(configureAlarmingAct);
152 plot()->canvas()->installEventFilter(
this);
153 plot()->canvas()->setMouseTracking(
true);
157 QString instanceName = windowTitle();
158 FileName config(
"$HOME/.Isis/qview/" + instanceName +
".config");
159 QSettings settings(config.expanded(),
160 QSettings::NativeFormat);
161 m_alarmPlot = settings.value(
"alarmOntoPlot",
true).toBool();
171 settings.value(
"alarmViewportScreenWidth", 5).toInt();
173 settings.value(
"alarmViewportScreenHeight", 5).toInt();
176 settings.value(
"alarmViewportXDnBoxSize", 1.0).toDouble();
178 settings.value(
"alarmViewportYDnBoxSize", 1.0).toDouble();
182 ScatterPlotWindow::~ScatterPlotWindow() {
183 QString instanceName = windowTitle();
184 FileName config(
"$HOME/.Isis/qview/" + instanceName +
".config");
185 QSettings settings(config.expanded(),
186 QSettings::NativeFormat);
285 if (o ==
plot()->canvas()) {
287 case QEvent::MouseMove: {
288 if (((QMouseEvent *)e)->buttons() == Qt::NoButton)
292 case QEvent::Leave: {
325 painter->setPen(QPen(Qt::red));
332 QScopedPointer<Portal> portal;
343 for (
int yIndex = 0; yIndex < numLines; yIndex++) {
344 const vector<double> &line = buffer->
getLine(yIndex);
346 for (
int xIndex = 0; xIndex < (int)line.size(); xIndex++) {
347 int viewportPointX = xIndex + buffer->
bufferXYRect().left();
348 int viewportPointY = yIndex + buffer->
bufferXYRect().top();
350 double cubeSample =
Null;
351 double cubeLine =
Null;
353 cubeSample, cubeLine);
369 double yDnValue = (*portal)[0];
373 painter->drawPoint(viewportPointX, viewportPointY);
382 double xDnValue = (*portal)[0];
386 painter->drawPoint(viewportPointX, viewportPointY);
414 QScopedPointer<Portal> xCubePortal(
417 QScopedPointer<Portal> yCubePortal(
421 double cubeSample =
Null;
422 double cubeLine =
Null;
424 vp->
viewportToCube(mouseLoc.x(), mouseLoc.y(), cubeSample, cubeLine);
437 ASSERT(xCubePortal->size() == yCubePortal->size());
438 for (
int i = 0; i < xCubePortal->size(); i++) {
439 double x = (*xCubePortal)[i];
440 double y = (*yCubePortal)[i];
443 scatterData->
alarm(x, y);
496 m_alarmViewportUnits = units;
552 if (
m_colorize->text().compare(
"Colorize") == 0) {
555 QwtLinearColorMap *colorMap =
new QwtLinearColorMap(Qt::darkCyan, Qt::red);
556 colorMap->addColorStop(DBL_EPSILON, Qt::cyan);
557 colorMap->addColorStop(0.3, Qt::green);
558 colorMap->addColorStop(0.50, Qt::yellow);
560 plot()->setCanvasBackground(Qt::darkCyan);
565 QwtLinearColorMap *colorMap =
new QwtLinearColorMap(Qt::black, Qt::white);
566 colorMap->addColorStop(DBL_EPSILON, Qt::darkGray);
568 plot()->setCanvasBackground(Qt::black);
586 if (
m_contour->text() ==
"Show Contour Lines") {
587 m_contour->setText(
"Hide Contour Lines");
588 m_spectrogram->setDisplayMode(QwtPlotSpectrogram::ContourMode,
true);
592 m_contour->setText(
"Show Contour Lines");
593 m_spectrogram->setDisplayMode(QwtPlotSpectrogram::ContourMode,
false);
714 connect(config, SIGNAL(finished(
int)),
715 config, SLOT(deleteLater()));