58 lines
1.2 KiB
C++
58 lines
1.2 KiB
C++
#include "stdafx.h"
|
|
#include "MapToolSpectral.h"
|
|
#include "ImageViewer.h"
|
|
#include "RasterLayer.h"
|
|
#include <QMouseEvent>
|
|
#include <QGraphicsScene>
|
|
#include <QGraphicsLineItem>
|
|
#include <QPen>
|
|
#include <cmath>
|
|
|
|
MapToolSpectral::MapToolSpectral(QObject* parent)
|
|
: MapTool(parent)
|
|
{
|
|
setCursor(Qt::CrossCursor);
|
|
}
|
|
|
|
MapToolSpectral::~MapToolSpectral()
|
|
{
|
|
}
|
|
|
|
void MapToolSpectral::activate()
|
|
{
|
|
MapTool::activate();
|
|
}
|
|
|
|
void MapToolSpectral::deactivate()
|
|
{
|
|
canvas()->removeCrosshair();
|
|
MapTool::deactivate();
|
|
}
|
|
|
|
void MapToolSpectral::canvasMousePressEvent(QMouseEvent* e)
|
|
{
|
|
if (e->button() != Qt::LeftButton)
|
|
return;
|
|
|
|
if (!canvas())
|
|
return;
|
|
|
|
const QPointF scenePt = canvas()->mapToScene(e->pos());
|
|
const int x = static_cast<int>(std::floor(scenePt.x()));
|
|
const int y = static_cast<int>(std::floor(scenePt.y()));
|
|
|
|
RasterLayer* rl = canvas()->rasterLayer();
|
|
if (rl && rl->isValidPixel(x, y))
|
|
{
|
|
// Place crosshair at pixel center
|
|
canvas()->updateCrosshair(x + 0.5, y + 0.5);
|
|
|
|
QVector<double> wavelengths;
|
|
QVector<double> spectrum;
|
|
if (rl->readPixelSpectrum(x, y, wavelengths, spectrum))
|
|
{
|
|
emit spectralClicked(x, y, wavelengths, spectrum);
|
|
}
|
|
}
|
|
}
|