Search for usage in LXR

EquirectangularProjector Class Reference

#include <equirectangularprojector.h>

Inheritance diagram for EquirectangularProjector:

Public Member Functions

 EquirectangularProjector (const ViewParams &p)
SkyPoint fromScreen (const QPointF &p, dms *LST, const dms *lat, bool onlyAltAz=false) const override
QVector< Eigen::Vector2f > groundPoly (SkyPoint *labelpoint=nullptr, bool *drawLabel=nullptr) const override
double radius () const override
Eigen::Vector2f toScreenVec (const SkyPoint *o, bool oRefract=true, bool *onVisibleHemisphere=nullptr) const override
Projection type () const override
bool unusablePoint (const QPointF &p) const override
void updateClipPoly () override
- Public Member Functions inherited from Projector
 Projector (const ViewParams &p)
bool checkVisibility (const SkyPoint *p) const
QPointF clipLine (SkyPoint *p1, SkyPoint *p2) const
Eigen::Vector2f clipLineVec (SkyPoint *p1, SkyPoint *p2) const
virtual QPolygonF clipPoly () const
double findNorthPA (const SkyPoint *o, float x, float y) const
double findPA (const SkyObject *o, float x, float y) const
double fov () const
bool onScreen (const Eigen::Vector2f &p) const
bool onScreen (const QPointF &p) const
void setViewParams (const ViewParams &p)
QPointF toScreen (const SkyPoint *o, bool oRefract=true, bool *onVisibleHemisphere=nullptr) const
ViewParams viewParams () const

Additional Inherited Members

- Public Types inherited from Projector
enum  Projection {
  Lambert, AzimuthalEquidistant, Orthographic, Equirectangular,
  Stereographic, Gnomonic, UnknownProjection
- Protected Member Functions inherited from Projector
virtual double cosMaxFieldAngle () const
virtual double projectionK (double x) const
virtual double projectionL (double x) const
- Static Protected Member Functions inherited from Projector
static SkyPoint pointAt (double az)
- Protected Attributes inherited from Projector
QPolygonF m_clipPolygon
double m_cosY0 { 0 }
KStarsDatam_data { nullptr }
double m_fov { 0 }
double m_sinY0 { 0 }
ViewParams m_vp

Detailed Description

Implememntation of Equirectangular projection

Definition at line 18 of file equirectangularprojector.h.

Member Function Documentation

◆ fromScreen()

SkyPoint EquirectangularProjector::fromScreen ( const QPointF p,
dms LST,
const dms lat,
bool  onlyAltAz = false 
) const

Determine RA, Dec coordinates of the pixel at (dx, dy), which are the screen pixel coordinate offsets from the center of the Sky pixmap.

pthe screen pixel position to convert
LSTpointer to the local sidereal time, as a dms object.
latpointer to the current geographic laitude, as a dms object
onlyAltAzthe returned SkyPoint's RA & DEC are not computed, only Alt/Az.

N.B. We don't cache these sin/cos values in the inverse projection because it causes 'shaking' when moving the sky.

Reimplemented from Projector.

Definition at line 60 of file equirectangularprojector.cpp.

◆ groundPoly()

QVector< Eigen::Vector2f > EquirectangularProjector::groundPoly ( SkyPoint labelpoint = nullptr,
bool *  drawLabel = nullptr 
) const

Get the ground polygon.

labelpointThis point will be set to something suitable for attaching a label
drawLabelthis tells whether to draw a label.
the ground polygon

Reimplemented from Projector.

Definition at line 100 of file equirectangularprojector.cpp.

◆ radius()

double EquirectangularProjector::radius ( ) const

Get the radius of this projection's sky circle.

the radius in radians

Reimplemented from Projector.

Definition at line 23 of file equirectangularprojector.cpp.

◆ toScreenVec()

Eigen::Vector2f EquirectangularProjector::toScreenVec ( const SkyPoint o,
bool  oRefract = true,
bool *  onVisibleHemisphere = nullptr 
) const

Given the coordinates of the SkyPoint argument, determine the pixel coordinates in the SkyMap.

Since most of the projections used by KStars are very similar, if this function were to be reimplemented in each projection subclass we would end up changing maybe 5 or 6 lines out of 150. Instead, we have a default implementation that uses the projectionK and projectionL functions to take care of the differences between e.g. Orthographic and Stereographic. There is also the cosMaxFieldAngle function, which is used for testing whether a point is on the visible part of the projection, and the radius function which gives the radius of the projection in screen coordinates.

While this seems ugly, it is less ugly than duplicating 150 loc to change 5.

Eigen::Vector2f containing screen pixel x, y coordinates of SkyPoint.
opointer to the SkyPoint for which to calculate x, y coordinates.
oRefracttrue = use Options::useRefraction() value. false = do not use refraction. This argument is only needed for the Horizon, which should never be refracted.
onVisibleHemispherepointer to a bool to indicate whether the point is on the visible part of the Celestial Sphere.

Reimplemented from Projector.

Definition at line 28 of file equirectangularprojector.cpp.

◆ type()

Projector::Projection EquirectangularProjector::type ( ) const

Return the type of this projection.

Implements Projector.

Definition at line 18 of file equirectangularprojector.cpp.

◆ unusablePoint()

bool EquirectangularProjector::unusablePoint ( const QPointF p) const

Check if the current point on screen is a valid point on the sky.

This is needed to avoid a crash of the program if the user clicks on a point outside the sky (the corners of the sky map at the lowest zoom level are the invalid points).

pthe screen pixel position

Reimplemented from Projector.

Definition at line 93 of file equirectangularprojector.cpp.

◆ updateClipPoly()

void EquirectangularProjector::updateClipPoly ( )

updateClipPoly calculate the clipping polygen given the current FOV.

Reimplemented from Projector.

Definition at line 223 of file equirectangularprojector.cpp.

The documentation for this class was generated from the following files:
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Fri Aug 12 2022 04:00:59 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.