File indexing completed on 2024-04-28 15:10:48
0001 /* 0002 SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #pragma once 0007 0008 #include "skynode.h" 0009 0010 #include <QSGNode> 0011 0012 class DeepSkyObject; 0013 class EllipseNode; 0014 0015 /** 0016 * @short A base class for all symbol nodes. 0017 */ 0018 class SymbolNode : public QSGNode 0019 { 0020 public: 0021 /** 0022 * @short Update size and the symbol itself. Each SymbolNode should override this function, 0023 * and call SymbolNode::updateSymbol() in the beginning of overridden updateSymbol to 0024 * initialize values that are used across all symbols. 0025 */ 0026 virtual void updateSymbol(float x, float y, float e, float size); 0027 0028 protected: 0029 SymbolNode() {} 0030 float zoom { 0 }; 0031 int isize { 0 }; 0032 0033 float dx1 { 0 }; 0034 float dx2 { 0 }; 0035 float dy1 { 0 }; 0036 float dy2 { 0 }; 0037 float x1 { 0 }; 0038 float x2 { 0 }; 0039 float y1 { 0 }; 0040 float y2 { 0 }; 0041 0042 float dxa { 0 }; 0043 float dxb { 0 }; 0044 float dya { 0 }; 0045 float dyb { 0 }; 0046 float xa { 0 }; 0047 float xb { 0 }; 0048 float ya { 0 }; 0049 float yb { 0 }; 0050 float psize { 0 }; 0051 }; 0052 0053 class StarSymbol : public SymbolNode 0054 { 0055 public: 0056 explicit StarSymbol(const QColor &color = QColor()); 0057 0058 virtual void updateSymbol(float x, float y, float e, float size) override; 0059 0060 EllipseNode *m_ellipse { nullptr }; 0061 }; 0062 0063 class AsterismSymbol : public SymbolNode 0064 { 0065 public: 0066 explicit AsterismSymbol(const QColor &color); 0067 0068 virtual void updateSymbol(float x, float y, float e, float size) override; 0069 0070 EllipseNode *e1 { nullptr }; 0071 EllipseNode *e2 { nullptr }; 0072 EllipseNode *e3 { nullptr }; 0073 EllipseNode *e4 { nullptr }; 0074 EllipseNode *e5 { nullptr }; 0075 EllipseNode *e6 { nullptr }; 0076 EllipseNode *e7 { nullptr }; 0077 EllipseNode *e8 { nullptr }; 0078 }; 0079 0080 class GlobularClusterSymbol : public SymbolNode 0081 { 0082 public: 0083 explicit GlobularClusterSymbol(const QColor &color); 0084 0085 virtual void updateSymbol(float x, float y, float e, float size) override; 0086 0087 EllipseNode *e1 { nullptr }; 0088 QSGGeometryNode *lines { nullptr }; 0089 }; 0090 0091 class DarkNebulaSymbol : public SymbolNode 0092 { 0093 public: 0094 explicit DarkNebulaSymbol(const QColor &color); 0095 0096 virtual void updateSymbol(float x, float y, float e, float size) override; 0097 0098 QSGGeometryNode *lines { nullptr }; 0099 }; 0100 0101 class PlanetaryNebulaSymbol : public SymbolNode 0102 { 0103 public: 0104 explicit PlanetaryNebulaSymbol(const QColor &color); 0105 0106 virtual void updateSymbol(float x, float y, float e, float size) override; 0107 0108 EllipseNode *e1 { nullptr }; 0109 QSGGeometryNode *lines { nullptr }; 0110 }; 0111 0112 class SupernovaRemnantSymbol : public SymbolNode 0113 { 0114 public: 0115 explicit SupernovaRemnantSymbol(const QColor &color); 0116 0117 virtual void updateSymbol(float x, float y, float e, float size) override; 0118 0119 QSGGeometryNode *lines { nullptr }; 0120 }; 0121 0122 class GalaxySymbol : public SymbolNode 0123 { 0124 public: 0125 explicit GalaxySymbol(const QColor &color); 0126 0127 virtual void updateSymbol(float x, float y, float e, float size) override; 0128 0129 EllipseNode *e1 { nullptr }; 0130 }; 0131 0132 class GalaxyClusterSymbol : public SymbolNode 0133 { 0134 public: 0135 explicit GalaxyClusterSymbol(const QColor &color); 0136 0137 virtual void updateSymbol(float x, float y, float e, float size) override; 0138 0139 QSGGeometryNode *lines { nullptr }; 0140 }; 0141 0142 /** 0143 * @class DSOSymbolNode 0144 * @short A SkyNode derived class used for Deep Sky symbols in SkyMapLite 0145 * 0146 * @author Artem Fedoskin 0147 * @version 1.0 0148 */ 0149 class DSOSymbolNode : public SkyNode 0150 { 0151 public: 0152 /** 0153 * @short Constructor. 0154 * @param skyObject - DeepSkyObject, for which this symbol should be created 0155 * @param color of the symbol 0156 */ 0157 explicit DSOSymbolNode(DeepSkyObject *skyObject, const QColor &color = QColor()); 0158 0159 /** 0160 * @short Changes position and rotation angle of the symbol 0161 * @param pos - new position 0162 * @param positionangle - rotation angle 0163 */ 0164 void changePos(const QPointF &pos, float positionangle); 0165 0166 /** 0167 * @short Update size and position of the symbol 0168 * @param size - new size of symbol 0169 * @param pos - new position 0170 * @param positionangle - new rotation angle 0171 */ 0172 void update(float size, const QPointF &pos, float positionangle); 0173 0174 /** Create SymbolNode based on the type of m_dso */ 0175 void initSymbol(); 0176 QColor getColor() { return m_color; } 0177 0178 private: 0179 QColor m_color; 0180 //TODO deal setter for this when stars will be introduced 0181 DeepSkyObject *m_dso { nullptr }; 0182 SymbolNode *m_symbol { nullptr }; 0183 /// If the symbol needs rotation this should be set to true 0184 bool m_rotate { false }; 0185 };