File indexing completed on 2024-04-28 03:44:25
0001 /* 0002 SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "../fovitem.h" 0010 0011 #include <QSGSimpleRectNode> 0012 #include <QSGTransformNode> 0013 0014 class EllipseNode; 0015 class RectNode; 0016 0017 /** 0018 * @class FOVSymbolBase 0019 * 0020 * FOVSymbolBase is a virtual class that should be subclassed by every type of FOV symbol. It is derived 0021 * from QSGTransformNode to provide transform matrix for updating coordinates of FOV symbol. 0022 * 0023 * @short A QSGTransformNode derived base class of every type of FOV symbol 0024 * @author Artem Fedoskin 0025 * @version 1.0 0026 */ 0027 class FOVSymbolBase : public QSGTransformNode 0028 { 0029 public: 0030 /** @short updates geometry (position, size) of elements of this FOV symbol */ 0031 virtual void updateSymbol(QColor color, float pixelSizeX, float pixelSizeY) = 0; 0032 0033 /** @short return type of this FOV symbol **/ 0034 FOVItem::Shape type() { return m_shape; } 0035 0036 protected: 0037 /** @param shape of the symbol. Each subclass sets its own type. Returned in type() */ 0038 FOVSymbolBase(FOVItem::Shape shape); 0039 /* QImage m_image; //Not supported yet 0040 bool m_imageDisplay;*/ 0041 FOVItem::Shape m_shape; 0042 }; 0043 0044 class SquareFOV : public FOVSymbolBase 0045 { 0046 public: 0047 SquareFOV(); 0048 virtual void updateSymbol(QColor color, float pixelSizeX, float pixelSizeY); 0049 0050 private: 0051 RectNode *rect1 { nullptr }; 0052 RectNode *rect2 { nullptr }; 0053 QSGGeometryNode *lines { nullptr }; 0054 }; 0055 class CircleFOV : public FOVSymbolBase 0056 { 0057 public: 0058 CircleFOV(); 0059 virtual void updateSymbol(QColor color, float pixelSizeX, float pixelSizeY); 0060 0061 private: 0062 EllipseNode *el { nullptr }; 0063 }; 0064 0065 class CrosshairFOV : public FOVSymbolBase 0066 { 0067 public: 0068 CrosshairFOV(); 0069 virtual void updateSymbol(QColor color, float pixelSizeX, float pixelSizeY); 0070 0071 private: 0072 QSGGeometryNode *lines { nullptr }; 0073 EllipseNode *el1 { nullptr }; 0074 EllipseNode *el2 { nullptr }; 0075 }; 0076 0077 class BullsEyeFOV : public FOVSymbolBase 0078 { 0079 public: 0080 BullsEyeFOV(); 0081 virtual void updateSymbol(QColor color, float pixelSizeX, float pixelSizeY); 0082 0083 private: 0084 EllipseNode *el1 { nullptr }; 0085 EllipseNode *el2 { nullptr }; 0086 EllipseNode *el3 { nullptr }; 0087 }; 0088 0089 class SolidCircleFOV : public FOVSymbolBase 0090 { 0091 public: 0092 SolidCircleFOV(); 0093 virtual void updateSymbol(QColor color, float pixelSizeX, float pixelSizeY); 0094 0095 private: 0096 EllipseNode *el { nullptr }; 0097 }; 0098 0099 /** 0100 * @class FOVSymbolNode 0101 * 0102 * A SkyNode derived class used for displaying FOV symbol. FOVSymbolNade handles creation of FOVSymbolBase 0103 * and its update. 0104 * 0105 * @short A SkyNode derived class that is used for displaying FOV symbol 0106 * @author Artem Fedoskin 0107 * @version 1.0 0108 */ 0109 class FOVSymbolNode : public SkyNode 0110 { 0111 public: 0112 /** 0113 * @short Constructor. Initialize m_symbol according to shape 0114 * @param name - name of the FOV symbol (used to switch it on/off through SkyMapLite from QML) 0115 * @param a - width 0116 * @param b - height 0117 * @param xoffset - x offset 0118 * @param yoffset - y offset 0119 * @param rot - rotation 0120 * @param shape - shape 0121 * @param color - RGB color 0122 */ 0123 FOVSymbolNode(const QString &name, float a, float b, float xoffset, float yoffset, float rot, 0124 FOVItem::Shape shape = FOVItem::SQUARE, const QString &color = "#FFFFFF"); 0125 /** @short Update this FOV symbol according to the zoomFactor */ 0126 void update(float zoomFactor); 0127 0128 QString getName() { return m_name; } 0129 0130 private: 0131 QString m_name; 0132 QString m_color; 0133 float m_sizeX { 0 }; 0134 float m_sizeY { 0 }; 0135 float m_offsetX { 0 }; 0136 float m_offsetY { 0 }; 0137 float m_rotation { 0 }; 0138 float m_northPA { 0 }; 0139 SkyPoint m_center; 0140 FOVSymbolBase *m_symbol { nullptr }; 0141 };