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 }