Files
HPPA/HPPA/MapToolSpectral.cpp
2026-05-22 16:21:41 +08:00

58 lines
1.3 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()));
auto* imageLayer = canvas()->imageLayer();
RasterLayer* rl = imageLayer ? imageLayer->layer() : nullptr;
if (rl && rl->isValidPixel(x, y))
{
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);
}
}
}