File indexing completed on 2024-04-28 15:09:09

0001 /*  Ekos Dark View
0002     Child of FTISView with few additions necessary for Alignment functions
0003 
0004     SPDX-FileCopyrightText: 2021 Jasem Mutlaq <mutlaqja@ikarustech.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "darkview.h"
0010 
0011 #include "kstarsdata.h"
0012 #include "Options.h"
0013 #include "fitsviewer/fitsdata.h"
0014 #include "defectmap.h"
0015 
0016 #include <QPainter>
0017 #include <QtConcurrent>
0018 #include <QRectF>
0019 
0020 DarkView::DarkView(QWidget *parent, FITSMode mode, FITSScale filter) : FITSView(parent, mode, filter)
0021 {
0022 }
0023 
0024 void DarkView::drawOverlay(QPainter *painter, double scale)
0025 {
0026     Q_UNUSED(scale);
0027     painter->setOpacity(0.5);
0028     FITSView::drawOverlay(painter, getScale());
0029     painter->setOpacity(1);
0030 
0031     if (m_CurrentDefectMap && m_DefectMapEnabled)
0032         drawBadPixels(painter, scale);
0033 }
0034 
0035 void DarkView::reset()
0036 {
0037     m_CurrentDefectMap.clear();
0038 }
0039 
0040 void DarkView::setDefectMapEnabled(bool enabled)
0041 {
0042     if (m_DefectMapEnabled == enabled)
0043         return;
0044 
0045     m_DefectMapEnabled = enabled;
0046     updateFrame();
0047 }
0048 
0049 void DarkView::setDefectMap(const QSharedPointer<DefectMap> &defect)
0050 {
0051     m_CurrentDefectMap = defect;
0052     connect(m_CurrentDefectMap.data(), &DefectMap::pixelsUpdated, this, &DarkView::updateFrame, Qt::UniqueConnection);
0053 }
0054 
0055 void DarkView::drawBadPixels(QPainter * painter, double scale)
0056 {
0057     if (!m_CurrentDefectMap)
0058         return;
0059 
0060     if (m_CurrentDefectMap->hotCount() > 0)
0061     {
0062         painter->setPen(QPen(QColor(qRgba(255, 0, 0, 128)), scale));
0063         for (BadPixelSet::const_iterator onePixel = m_CurrentDefectMap->hotThreshold();
0064                 onePixel != m_CurrentDefectMap->hotPixels().cend(); ++onePixel)
0065         {
0066             painter->drawEllipse(QRectF(((*onePixel).x - 1) * scale, ((*onePixel).y - 1) * scale, 2 * scale, 2 * scale));
0067         }
0068     }
0069 
0070     if (m_CurrentDefectMap->coldCount() > 0)
0071     {
0072         painter->setPen(QPen(QColor(qRgba(0, 0, 255, 128)), scale));
0073         for (BadPixelSet::const_iterator onePixel = m_CurrentDefectMap->coldPixels().cbegin();
0074                 onePixel != m_CurrentDefectMap->coldThreshold(); ++onePixel)
0075         {
0076             painter->drawEllipse(QRectF(((*onePixel).x - 1) * scale, ((*onePixel).y - 1) * scale, 2 * scale, 2 * scale));
0077         }
0078     }
0079 }
0080