Kstars

skypainter.h
1 /*
2  SkyPainter: class for painting onto the sky for KStars
3  SPDX-FileCopyrightText: 2010 Henry de Valence <[email protected]>
4 
5  SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #pragma once
9 
10 #include "skycomponents/typedef.h"
11 #include "config-kstars.h"
12 
13 #include <QList>
14 #include <QPainter>
15 
16 class ConstellationsArt;
17 class DeepSkyObject;
18 class KSComet;
19 class KSAsteroid;
20 class KSPlanetBase;
21 class KSEarthShadow;
22 class LineList;
23 class LineListLabel;
24 class Satellite;
25 class MosaicTiles;
26 class SkipHashList;
27 class SkyMap;
28 class SkyObject;
29 class SkyPoint;
30 class Supernova;
31 class CatalogObject;
32 class ImageOverlay;
33 
34 /**
35  * @short Draws things on the sky, without regard to backend.
36  * This class serves as an interface to draw objects onto the sky without
37  * worrying about whether we are using a QPainter or OpenGL.
38  */
40 {
41  public:
42  SkyPainter();
43 
44  virtual ~SkyPainter() = default;
45 
46  /** @short Set the pen of the painter **/
47  virtual void setPen(const QPen &pen) = 0;
48 
49  /** @short Set the brush of the painter **/
50  virtual void setBrush(const QBrush &brush) = 0;
51 
52  //FIXME: find a better way to do this.
53  void setSizeMagLimit(float sizeMagLim);
54 
55  /**
56  * Begin painting.
57  * @note this function <b>must</b> be called before painting anything.
58  * @see end()
59  */
60  virtual void begin() = 0;
61 
62  /**
63  * End and finalize painting.
64  * @note this function <b>must</b> be called after painting anything.
65  * @note it is not guaranteed that anything will actually be drawn until end() is called.
66  * @see begin();
67  */
68  virtual void end() = 0;
69 
70  ////////////////////////////////////
71  // //
72  // SKY DRAWING FUNCTIONS: //
73  // //
74  ////////////////////////////////////
75 
76  /** @short Draw the sky background */
77  virtual void drawSkyBackground() = 0;
78 
79  /**
80  * @short Draw a line between points in the sky.
81  * @param a the first point
82  * @param b the second point
83  * @note this function will skip lines not on screen and clip lines
84  * that are only partially visible.
85  */
86  virtual void drawSkyLine(SkyPoint *a, SkyPoint *b) = 0;
87 
88  /**
89  * @short Draw a polyline in the sky.
90  * @param list a list of points in the sky
91  * @param skipList a SkipList object used to control skipping line segments
92  * @param label a pointer to the label for this line
93  * @note it's more efficient to use this than repeated calls to drawSkyLine(),
94  * because it avoids an extra points->size() -2 projections.
95  */
96  virtual void drawSkyPolyline(LineList *list, SkipHashList *skipList = nullptr,
97  LineListLabel *label = nullptr) = 0;
98 
99  /**
100  * @short Draw a polygon in the sky.
101  * @param list a list of points in the sky
102  * @param forceClip If true (default), it enforces clipping of the polygon, otherwise, it draws the
103  * complete polygen without running any boundary checks.
104  * @see drawSkyPolyline()
105  */
106  virtual void drawSkyPolygon(LineList *list, bool forceClip = true) = 0;
107 
108  /**
109  * @short Draw a comet in the sky.
110  * @param com comet to draw
111  * @return true if a comet was drawn
112  */
113  virtual bool drawComet(KSComet *com) = 0;
114 
115  /**
116  * @short Draw an asteroid in the sky.
117  * @param ast asteroid to draw
118  * @return true if a asteroid was drawn
119  */
120  virtual bool drawAsteroid(KSAsteroid *ast) = 0;
121 
122  /**
123  * @short Draw a point source (e.g., a star).
124  * @param loc the location of the source in the sky
125  * @param mag the magnitude of the source
126  * @param sp the spectral class of the source
127  * @return true if a source was drawn
128  */
129  virtual bool drawPointSource(const SkyPoint *loc, float mag, char sp = 'A') = 0;
130 
131  /**
132  * @short Draw a deep sky object (loaded from the new implementation)
133  * @param obj the object to draw
134  * @param drawImage if true, try to draw the image of the object
135  * @return true if it was drawn
136  */
137  virtual bool drawCatalogObject(const CatalogObject &obj) = 0;
138 
139  /**
140  * @short Draw a planet
141  * @param planet the planet to draw
142  * @return true if it was drawn
143  */
144  virtual bool drawPlanet(KSPlanetBase *planet) = 0;
145 
146  /**
147  * @short Draw the earths shadow on the moon (red-ish)
148  * @param shadow the shadow to draw
149  * @return true if it was drawn
150  */
151  virtual bool drawEarthShadow(KSEarthShadow *shadow) = 0;
152 
153  /**
154  * @short Draw the symbols for the observing list
155  * @param obs the observing list
156  */
157  virtual void drawObservingList(const QList<SkyObject *> &obs) = 0;
158 
159  /** @short Draw flags */
160  virtual void drawFlags() = 0;
161 
162  /** @short Draw a satellite */
163  virtual bool drawSatellite(Satellite *sat) = 0;
164 
165  /** @short Draw a Supernova */
166  virtual bool drawSupernova(Supernova *sup) = 0;
167 
168  virtual void drawHorizon(bool filled, SkyPoint *labelPoint = nullptr,
169  bool *drawLabel = nullptr) = 0;
170 
171  /** @short Get the width of a star of magnitude mag */
172  float starWidth(float mag) const;
173 
174  /**
175  * @short Draw a ConstellationsArt object
176  * @param obj the object to draw
177  * @return true if it was drawn
178  */
179  virtual bool drawConstellationArtImage(ConstellationsArt *obj) = 0;
180 
181  /**
182  * @brief drawMosaicPanel Draws mosaic panel in planning or operation mode.
183  * @return true if it was drawn
184  */
185 #ifdef HAVE_INDI
186  virtual bool drawMosaicPanel(MosaicTiles *obj) = 0;
187 #endif
188  /**
189  * @brief drawHips Draw HIPS all sky catalog
190  * @param useCache if True, try to re-use last generated image instead of rendering a new image.
191  * @return true if it was drawn
192  */
193  virtual bool drawHips(bool useCache = false) = 0;
194 
195  /**
196  * @brief drawTerrain Draw the Terrain
197  * @param useCache if True, try to re-use last generated image instead of rendering a new image.
198  * @return true if it was drawn
199  */
200  virtual bool drawTerrain(bool useCache = false) = 0;
201 
202  /**
203  * @brief drawImageOverlay Draws a user-supplied image onto the skymap
204  * @param useCache if True, try to re-use last generated image instead of rendering a new image.
205  * @return true if it was drawn
206  */
207  virtual bool drawImageOverlay(const QList<ImageOverlay> *imageOverlays, bool useCache = false) = 0;
208 
209  private:
210  float m_sizeMagLim{ 10.0f };
211 };
virtual bool drawSupernova(Supernova *sup)=0
Draw a Supernova.
virtual bool drawTerrain(bool useCache=false)=0
drawTerrain Draw the Terrain
virtual void end()=0
End and finalize painting.
Stores dms coordinates for a point in the sky. for converting between coordinate systems.
Definition: skypoint.h:44
A subclass of KSPlanetBase that implements asteroids.
Definition: ksasteroid.h:41
virtual void setPen(const QPen &pen)=0
Set the pen of the painter.
A subclass of KSPlanetBase that implements comets.
Definition: kscomet.h:43
float starWidth(float mag) const
Get the width of a star of magnitude mag.
Definition: skypainter.cpp:30
virtual bool drawImageOverlay(const QList< ImageOverlay > *imageOverlays, bool useCache=false)=0
drawImageOverlay Draws a user-supplied image onto the skymap
virtual bool drawSatellite(Satellite *sat)=0
Draw a satellite.
A class that manages the calculation of the earths shadow (in moon distance) as a 'virtual' skyobject...
Definition: ksearthshadow.h:27
virtual bool drawHips(bool useCache=false)=0
drawMosaicPanel Draws mosaic panel in planning or operation mode.
virtual bool drawEarthShadow(KSEarthShadow *shadow)=0
Draw the earths shadow on the moon (red-ish)
virtual void drawSkyLine(SkyPoint *a, SkyPoint *b)=0
Draw a line between points in the sky.
virtual bool drawPointSource(const SkyPoint *loc, float mag, char sp='A')=0
Draw a point source (e.g., a star).
virtual void setBrush(const QBrush &brush)=0
Set the brush of the painter.
Draws things on the sky, without regard to backend.
Definition: skypainter.h:39
virtual void drawSkyPolygon(LineList *list, bool forceClip=true)=0
Draw a polygon in the sky.
virtual void drawSkyBackground()=0
Draw the sky background.
Canvas widget for displaying the sky bitmap; also handles user interaction events.
Definition: skymap.h:53
virtual bool drawAsteroid(KSAsteroid *ast)=0
Draw an asteroid in the sky.
virtual bool drawComet(KSComet *com)=0
Draw a comet in the sky.
virtual void begin()=0
Begin painting.
virtual bool drawCatalogObject(const CatalogObject &obj)=0
Draw a deep sky object (loaded from the new implementation)
virtual void drawObservingList(const QList< SkyObject * > &obs)=0
Draw the symbols for the observing list.
virtual void drawFlags()=0
Draw flags.
virtual void drawSkyPolyline(LineList *list, SkipHashList *skipList=nullptr, LineListLabel *label=nullptr)=0
Draw a polyline in the sky.
Information about a ConstellationsArt object. This class represents a constellation image.
A simple container object to hold the minimum information for a Deep Sky Object to be drawn on the sk...
Definition: catalogobject.h:40
virtual bool drawConstellationArtImage(ConstellationsArt *obj)=0
Draw a ConstellationsArt object.
Information about an object in the sky.
Definition: skyobject.h:41
virtual bool drawPlanet(KSPlanetBase *planet)=0
Draw a planet.
Provides necessary information about objects in the solar system.
Definition: ksplanetbase.h:49
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sun Oct 1 2023 04:02:44 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.