Kstars

equatoritem.cpp
1/*
2 SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
3 SPDX-License-Identifier: GPL-2.0-or-later
4*/
5
6#include "equatoritem.h"
7
8#include "projections/projector.h"
9#include "../rootnode.h"
10#include "../labelsitem.h"
11#include "../skynodes/labelnode.h"
12#include "../skynodes/trixelnode.h"
13#include "../skynodes/nodes/linenode.h"
14
15#include <QSGNode>
16
18 : SkyItem(LabelsItem::label_t::EQUATOR_LABEL, rootNode), m_equatorComp(equatorComp)
19{
20 LineListHash *trixels = equatorComp->lineIndex();
21
22 auto i = trixels->cbegin();
23
24 while (i != trixels->cend())
25 {
26 std::shared_ptr<LineListList> linesList = *i;
28
29 if (linesList->size())
30 {
31 QColor schemeColor = KStarsData::Instance()->colorScheme()->colorNamed("EqColor");
32
33 for (int c = 0; c < linesList->size(); ++c)
34 {
35 std::shared_ptr<LineList> lines = linesList->at(c);
36
37 if (!addedLines.contains(lines))
38 {
39 LineNode *ln = new LineNode(linesList->at(c).get(), 0, schemeColor, 1, Qt::SolidLine);
40
42 addedLines.append(lines);
43 }
44 }
45 }
46 ++i;
47 }
48
49 //Add compass labels
50 for (int ra = 0; ra < 23; ra += 2)
51 {
52 SkyPoint *o = new SkyPoint(ra, 0.0);
53
54 QString label;
55 label.setNum(o->ra().hour());
56
57 LabelNode *compass = rootNode->labelsItem()->addLabel(label, labelType());
58 m_compassLabels.insert(o, compass);
59 }
60}
61
63{
64 if (m_equatorComp->selected())
65 {
66 show();
67 QColor schemeColor = KStarsData::Instance()->colorScheme()->colorNamed("EqColor");
68
69 UpdateID updateID = KStarsData::Instance()->updateID();
70
71 QSGNode *l = firstChild();
72 while (l != 0)
73 {
74 LineNode *lines = static_cast<LineNode *>(l);
75 lines->setColor(schemeColor);
76 l = l->nextSibling();
77
78 LineList *lineList = lines->lineList();
79 if (lineList->updateID != updateID)
80 m_equatorComp->JITupdate(lineList);
81
82 lines->updateGeometry();
83 }
84
85 const Projector *proj = SkyMapLite::Instance()->projector();
86 KStarsData *data = KStarsData::Instance();
87
89
90 while (i != m_compassLabels.end())
91 {
92 SkyPoint *c = i.key();
93 c->EquatorialToHorizontal(data->lst(), data->geo()->lat());
94
95 LabelNode *compass = (*i);
96
97 bool visible;
98 QPointF cpoint = proj->toScreen(c, false, &visible);
99 if (visible && proj->checkVisibility(c))
100 {
101 compass->setLabelPos(cpoint);
102 }
103 else
104 {
105 compass->hide();
106 }
107 ++i;
108 }
109 }
110 else
111 {
112 hide();
113 }
114}
EquatorItem(Equator *equatorComp, RootNode *rootNode)
Constructor.
virtual void update()
updates positions of lines and compass labels
Represents the equator on the sky map.
Definition equator.h:20
bool selected() override
Definition equator.cpp:47
const CachingDms * lat() const
Definition geolocation.h:70
KStarsData is the backbone of KStars.
Definition kstarsdata.h:72
CachingDms * lst()
Definition kstarsdata.h:224
GeoLocation * geo()
Definition kstarsdata.h:230
A SkyNode derived class used for displaying labels.
Definition labelnode.h:27
This class is in charge of labels in SkyMapLite.
Definition labelsitem.h:53
LabelNode * addLabel(SkyObject *skyObject, label_t labelType)
Create LabelNode with given skyObject and append it to LabelTypeNode that corresponds to type.
A simple data container used by LineListIndex.
Definition linelist.h:25
SkyOpacityNode derived class that draws lines from LineList.
Definition linenode.h:28
void updateGeometry()
Update lines based on the visibility of line segments in m_lineList.
Definition linenode.cpp:65
void JITupdate(LineList *lineList) override
@ short override JITupdate so we don't perform the precession correction, only rotation.
The Projector class is the primary class that serves as an interface to handle projections.
Definition projector.h:58
A QSGClipNode derived class used as a container for holding pointers to nodes and for clipping.
Definition rootnode.h:60
This is an interface for implementing SkyItems that represent SkyComponent derived objects on the Sky...
Definition skyitem.h:30
virtual void hide() override
hides this item and corresponding labels
Definition skyitem.cpp:37
RootNode * rootNode()
Definition skyitem.h:57
LabelsItem::label_t labelType()
Definition skyitem.h:60
virtual void show() override
makes this node visible
Definition skyitem.cpp:23
The sky coordinates of a point in the sky.
Definition skypoint.h:45
const CachingDms & ra() const
Definition skypoint.h:263
void EquatorialToHorizontal(const CachingDms *LST, const CachingDms *lat)
Determine the (Altitude, Azimuth) coordinates of the SkyPoint from its (RA, Dec) coordinates,...
Definition skypoint.cpp:77
iterator begin()
iterator end()
iterator insert(const Key &key, const T &value)
void appendChildNode(QSGNode *node)
QSGNode * firstChild() const const
QSGNode * nextSibling() const const
QString & setNum(double n, char format, int precision)
SolidLine
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:19:03 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.