File indexing completed on 2024-04-28 03:44:26

0001 /*
0002     SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "supernovanode.h"
0007 
0008 #include "ksutils.h"
0009 #include "linelist.h"
0010 #include "Options.h"
0011 #include "supernova.h"
0012 #include "nodes/pointnode.h"
0013 #include "nodes/polynode.h"
0014 
0015 #include <QSGFlatColorMaterial>
0016 
0017 SupernovaNode::SupernovaNode(Supernova *snova) : m_snova(snova)
0018 {
0019 }
0020 
0021 void SupernovaNode::update()
0022 {
0023     KStarsData *data        = KStarsData::Instance();
0024     const Projector *m_proj = SkyMapLite::Instance()->projector();
0025     if (!m_proj->checkVisibility(m_snova))
0026     {
0027         hide();
0028         return;
0029     }
0030 
0031     bool visible = false;
0032     QPointF pos  = m_proj->toScreen(m_snova, true, &visible);
0033     //qDebug()<<"sup->ra() = "<<(sup->ra()).toHMSString()<<"sup->dec() = "<<sup->dec().toDMSString();
0034     //qDebug()<<"pos = "<<pos<<"m_proj->onScreen(pos) = "<<m_proj->onScreen(pos);
0035     if (!visible || !m_proj->onScreen(pos))
0036     {
0037         hide();
0038         return;
0039     }
0040 
0041     QColor color = data->colorScheme()->colorNamed("SupernovaColor");
0042 
0043     //Initialize m_lines if not already done
0044     if (!m_lines)
0045     {
0046         m_lines    = new QSGGeometryNode;
0047         m_geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 0);
0048         m_lines->setGeometry(m_geometry);
0049         m_lines->setFlag(QSGNode::OwnsGeometry);
0050 
0051         m_material = new QSGFlatColorMaterial;
0052         m_lines->setOpaqueMaterial(m_material);
0053         m_lines->setFlag(QSGNode::OwnsMaterial);
0054         addChildNode(m_lines);
0055 
0056         m_geometry->allocate(4);
0057         QSGGeometry::Point2D *vertex = m_geometry->vertexDataAsPoint2D();
0058 
0059         vertex[0].set(-2.0, 0.0);
0060         vertex[1].set(2.0, 0.0);
0061         vertex[2].set(0.0, -2.0);
0062         vertex[3].set(0.0, 2.0);
0063     }
0064     show();
0065     if (m_material->color() != color)
0066     {
0067         m_material->setColor(color);
0068         m_lines->markDirty(QSGNode::DirtyMaterial);
0069     }
0070 
0071     changePos(pos);
0072 
0073     return;
0074 }
0075 
0076 void SupernovaNode::changePos(QPointF pos)
0077 {
0078     //QSizeF size = m_point->size();
0079     QMatrix4x4 m(1, 0, 0, pos.x(), 0, 1, 0, pos.y(), 0, 0, 1, 0, 0, 0, 0, 1);
0080     //m.translate(-0.5*size.width(), -0.5*size.height());
0081 
0082     setMatrix(m);
0083     markDirty(QSGNode::DirtyMatrix);
0084 }