File indexing completed on 2024-04-21 14:47:14
0001 /* 0002 SkyPainter: class for painting onto the sky for KStars 0003 SPDX-FileCopyrightText: 2010 Henry de Valence <hdevalence@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include "skycomponents/typedef.h" 0011 #include "config-kstars.h" 0012 0013 #include <QList> 0014 #include <QPainter> 0015 0016 class ConstellationsArt; 0017 class DeepSkyObject; 0018 class KSComet; 0019 class KSAsteroid; 0020 class KSPlanetBase; 0021 class KSEarthShadow; 0022 class LineList; 0023 class LineListLabel; 0024 class Satellite; 0025 class MosaicTiles; 0026 class SkipHashList; 0027 class SkyMap; 0028 class SkyObject; 0029 class SkyPoint; 0030 class Supernova; 0031 class CatalogObject; 0032 class ImageOverlay; 0033 0034 /** 0035 * @short Draws things on the sky, without regard to backend. 0036 * This class serves as an interface to draw objects onto the sky without 0037 * worrying about whether we are using a QPainter or OpenGL. 0038 */ 0039 class SkyPainter 0040 { 0041 public: 0042 SkyPainter(); 0043 0044 virtual ~SkyPainter() = default; 0045 0046 /** @short Set the pen of the painter **/ 0047 virtual void setPen(const QPen &pen) = 0; 0048 0049 /** @short Set the brush of the painter **/ 0050 virtual void setBrush(const QBrush &brush) = 0; 0051 0052 //FIXME: find a better way to do this. 0053 void setSizeMagLimit(float sizeMagLim); 0054 0055 /** 0056 * Begin painting. 0057 * @note this function <b>must</b> be called before painting anything. 0058 * @see end() 0059 */ 0060 virtual void begin() = 0; 0061 0062 /** 0063 * End and finalize painting. 0064 * @note this function <b>must</b> be called after painting anything. 0065 * @note it is not guaranteed that anything will actually be drawn until end() is called. 0066 * @see begin(); 0067 */ 0068 virtual void end() = 0; 0069 0070 //////////////////////////////////// 0071 // // 0072 // SKY DRAWING FUNCTIONS: // 0073 // // 0074 //////////////////////////////////// 0075 0076 /** @short Draw the sky background */ 0077 virtual void drawSkyBackground() = 0; 0078 0079 /** 0080 * @short Draw a line between points in the sky. 0081 * @param a the first point 0082 * @param b the second point 0083 * @note this function will skip lines not on screen and clip lines 0084 * that are only partially visible. 0085 */ 0086 virtual void drawSkyLine(SkyPoint *a, SkyPoint *b) = 0; 0087 0088 /** 0089 * @short Draw a polyline in the sky. 0090 * @param list a list of points in the sky 0091 * @param skipList a SkipList object used to control skipping line segments 0092 * @param label a pointer to the label for this line 0093 * @note it's more efficient to use this than repeated calls to drawSkyLine(), 0094 * because it avoids an extra points->size() -2 projections. 0095 */ 0096 virtual void drawSkyPolyline(LineList *list, SkipHashList *skipList = nullptr, 0097 LineListLabel *label = nullptr) = 0; 0098 0099 /** 0100 * @short Draw a polygon in the sky. 0101 * @param list a list of points in the sky 0102 * @param forceClip If true (default), it enforces clipping of the polygon, otherwise, it draws the 0103 * complete polygen without running any boundary checks. 0104 * @see drawSkyPolyline() 0105 */ 0106 virtual void drawSkyPolygon(LineList *list, bool forceClip = true) = 0; 0107 0108 /** 0109 * @short Draw a comet in the sky. 0110 * @param com comet to draw 0111 * @return true if a comet was drawn 0112 */ 0113 virtual bool drawComet(KSComet *com) = 0; 0114 0115 /** 0116 * @short Draw an asteroid in the sky. 0117 * @param ast asteroid to draw 0118 * @return true if a asteroid was drawn 0119 */ 0120 virtual bool drawAsteroid(KSAsteroid *ast) = 0; 0121 0122 /** 0123 * @short Draw a point source (e.g., a star). 0124 * @param loc the location of the source in the sky 0125 * @param mag the magnitude of the source 0126 * @param sp the spectral class of the source 0127 * @return true if a source was drawn 0128 */ 0129 virtual bool drawPointSource(const SkyPoint *loc, float mag, char sp = 'A') = 0; 0130 0131 /** 0132 * @short Draw a deep sky object (loaded from the new implementation) 0133 * @param obj the object to draw 0134 * @param drawImage if true, try to draw the image of the object 0135 * @return true if it was drawn 0136 */ 0137 virtual bool drawCatalogObject(const CatalogObject &obj) = 0; 0138 0139 /** 0140 * @short Draw a planet 0141 * @param planet the planet to draw 0142 * @return true if it was drawn 0143 */ 0144 virtual bool drawPlanet(KSPlanetBase *planet) = 0; 0145 0146 /** 0147 * @short Draw the earths shadow on the moon (red-ish) 0148 * @param shadow the shadow to draw 0149 * @return true if it was drawn 0150 */ 0151 virtual bool drawEarthShadow(KSEarthShadow *shadow) = 0; 0152 0153 /** 0154 * @short Draw the symbols for the observing list 0155 * @param obs the observing list 0156 */ 0157 virtual void drawObservingList(const QList<SkyObject *> &obs) = 0; 0158 0159 /** @short Draw flags */ 0160 virtual void drawFlags() = 0; 0161 0162 /** @short Draw a satellite */ 0163 virtual bool drawSatellite(Satellite *sat) = 0; 0164 0165 /** @short Draw a Supernova */ 0166 virtual bool drawSupernova(Supernova *sup) = 0; 0167 0168 virtual void drawHorizon(bool filled, SkyPoint *labelPoint = nullptr, 0169 bool *drawLabel = nullptr) = 0; 0170 0171 /** @short Get the width of a star of magnitude mag */ 0172 float starWidth(float mag) const; 0173 0174 /** 0175 * @short Draw a ConstellationsArt object 0176 * @param obj the object to draw 0177 * @return true if it was drawn 0178 */ 0179 virtual bool drawConstellationArtImage(ConstellationsArt *obj) = 0; 0180 0181 /** 0182 * @brief drawMosaicPanel Draws mosaic panel in planning or operation mode. 0183 * @return true if it was drawn 0184 */ 0185 #ifdef HAVE_INDI 0186 virtual bool drawMosaicPanel(MosaicTiles *obj) = 0; 0187 #endif 0188 /** 0189 * @brief drawHips Draw HIPS all sky catalog 0190 * @param useCache if True, try to re-use last generated image instead of rendering a new image. 0191 * @return true if it was drawn 0192 */ 0193 virtual bool drawHips(bool useCache = false) = 0; 0194 0195 /** 0196 * @brief drawTerrain Draw the Terrain 0197 * @param useCache if True, try to re-use last generated image instead of rendering a new image. 0198 * @return true if it was drawn 0199 */ 0200 virtual bool drawTerrain(bool useCache = false) = 0; 0201 0202 /** 0203 * @brief drawImageOverlay Draws a user-supplied image onto the skymap 0204 * @param useCache if True, try to re-use last generated image instead of rendering a new image. 0205 * @return true if it was drawn 0206 */ 0207 virtual bool drawImageOverlay(const QList<ImageOverlay> *imageOverlays, bool useCache = false) = 0; 0208 0209 private: 0210 float m_sizeMagLim{ 10.0f }; 0211 };