• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Stellarium / stellarium / 4177503453

pending completion
4177503453

push

github

Georg Zotti
tweak minimum angle at top edge

2 of 2 new or added lines in 1 file covered. (100.0%)

14669 of 124590 relevant lines covered (11.77%)

20744.95 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/core/modules/GridLinesMgr.cpp
1
/*
2
 * Stellarium
3
 * Copyright (C) 2007 Fabien Chereau
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA  02110-1335, USA.
18
 */
19

20
#include "GridLinesMgr.hpp"
21
#include "StelApp.hpp"
22
#include "StelUtils.hpp"
23
#include "StelTranslator.hpp"
24
#include "StelProjector.hpp"
25
#include "StelFader.hpp"
26
#include "Planet.hpp"
27
#include "SolarSystem.hpp"
28
#include "StelModuleMgr.hpp"
29
#include "StelCore.hpp"
30
#include "StelObserver.hpp"
31
#include "StelPainter.hpp"
32
#include "StelTextureMgr.hpp"
33
#include "StelFileMgr.hpp"
34
#include "StelMovementMgr.hpp"
35
#include "precession.h"
36

37
#include <set>
38
#include <QSettings>
39
#include <QDebug>
40
#include <QFontMetrics>
41

42
//! @class SkyGrid
43
//! Class which manages a grid to display in the sky.
44
class SkyGrid
45
{
46
public:
47
        // Create and precompute positions of a SkyGrid
48
        SkyGrid(StelCore::FrameType frame);
49
        virtual ~SkyGrid();
50
        void draw(const StelCore* prj) const;
51
        void setFontSize(int newFontSize);
52
        void setColor(const Vec3f& c) {color = c;}
×
53
        const Vec3f& getColor() const {return color;}
×
54
        void update(double deltaTime) {fader.update(static_cast<int>(deltaTime*1000));}
×
55
        void setFadeDuration(float duration) {fader.setDuration(static_cast<int>(duration*1000.f));}
56
        void setDisplayed(const bool displayed){fader = displayed;}
×
57
        bool isDisplayed() const {return fader;}
×
58
        void setLineThickness(const float thickness) {lineThickness = thickness;}
×
59
        float getLineThickness() const {return lineThickness;}
×
60
private:
61
        Vec3f color;
62
        StelCore::FrameType frameType;
63
        QFont font;
64
        LinearFader fader;
65
        float lineThickness;
66
};
67

68
//! @class SkyPoint
69
//! Class which manages a point to display around the sky like the North Celestial Pole.
70
class SkyPoint
71
{
72
public:
73
        enum SKY_POINT_TYPE
74
        {
75
                CELESTIALPOLES_J2000,
76
                CELESTIALPOLES_OF_DATE,
77
                ZENITH_NADIR,
78
                ECLIPTICPOLES_J2000,
79
                ECLIPTICPOLES_OF_DATE,
80
                GALACTICPOLES,
81
                GALACTICCENTER,
82
                SUPERGALACTICPOLES,
83
                EQUINOXES_J2000,
84
                EQUINOXES_OF_DATE,
85
                SOLSTICES_J2000,
86
                SOLSTICES_OF_DATE,
87
                ANTISOLAR,
88
                EARTH_UMBRA_CENTER,
89
                APEX
90
        };
91
        // Create and precompute positions of a SkyGrid
92
        SkyPoint(SKY_POINT_TYPE _point_type = CELESTIALPOLES_J2000);
93
        virtual ~SkyPoint();
94
        void draw(StelCore* core) const;
95
        void setColor(const Vec3f& c) {color = c;}
×
96
        const Vec3f& getColor() const {return color;}
×
97
        void update(double deltaTime) {fader.update(static_cast<int>(deltaTime*1000));}
×
98
        void setFadeDuration(float duration) {fader.setDuration(static_cast<int>(duration*1000.f));}
99
        void setDisplayed(const bool displayed){fader = displayed;}
×
100
        bool isDisplayed() const {return fader;}
×
101
        void setFontSize(int newSize);
102
        //! Re-translates the label.
103
        void updateLabel();
104
private:
105
        QSharedPointer<Planet> earth, sun;
106
        SKY_POINT_TYPE point_type;
107
        Vec3f color;
108
        StelCore::FrameType frameType;
109
        LinearFader fader;
110
        QFont font;
111
        QString northernLabel, southernLabel;
112
        StelTextureSP texCross;
113
};
114

115

116
//! @class SkyLine
117
//! Class which manages a line to display around the sky like the ecliptic line.
118
class SkyLine
119
{
120
public:
121
        enum SKY_LINE_TYPE
122
        {
123
                EQUATOR_J2000,
124
                EQUATOR_OF_DATE,
125
                FIXED_EQUATOR,
126
                ECLIPTIC_J2000,
127
                ECLIPTIC_OF_DATE,
128
                PRECESSIONCIRCLE_N,
129
                PRECESSIONCIRCLE_S,
130
                MERIDIAN,
131
                HORIZON,
132
                GALACTICEQUATOR,
133
                SUPERGALACTICEQUATOR,
134
                LONGITUDE,
135
                QUADRATURE,
136
                PRIME_VERTICAL,
137
                CURRENT_VERTICAL,
138
                COLURE_1,
139
                COLURE_2,
140
                CIRCUMPOLARCIRCLE_N,
141
                CIRCUMPOLARCIRCLE_S,
142
                INVARIABLEPLANE,
143
                SOLAR_EQUATOR,
144
                EARTH_UMBRA,
145
                EARTH_PENUMBRA
146
        };
147
        // Create and precompute positions of a SkyGrid
148
        SkyLine(SKY_LINE_TYPE _line_type = EQUATOR_J2000);
149
        virtual ~SkyLine();
150
        static void init(); //! call once before creating the first line.
151
        static void deinit(); //! call once after deleting all lines.
152
        void draw(StelCore* core) const;
153
        void setColor(const Vec3f& c) {color = c;}
×
154
        void setPartitions(bool visible) {showPartitions = visible;}
×
155
        bool showsPartitions() const {return showPartitions;}
×
156
        const Vec3f& getColor() const {return color;}
×
157
        void update(double deltaTime) {fader.update(static_cast<int>(deltaTime*1000));}
×
158
        void setFadeDuration(float duration) {fader.setDuration(static_cast<int>(duration*1000.f));}
159
        void setDisplayed(const bool displayed){fader = displayed;}
×
160
        bool isDisplayed() const {return fader;}
×
161
        void setLabeled(const bool displayed){showLabel = displayed;}
×
162
        bool isLabeled() const {return showLabel;}
×
163
        void setFontSize(int newSize);
164
        void setLineThickness(const float thickness) {lineThickness = thickness;}
×
165
        float getLineThickness() const {return lineThickness;}
166
        void setPartThickness(const float thickness) {partThickness = thickness;}
×
167
        float getPartThickness() const {return partThickness;}
×
168
        //! Re-translates the label and sets the frameType. Must be called in the constructor!
169
        void updateLabel();
170
        static void setSolarSystem(SolarSystem* ss);
171
private:
172
        static QSharedPointer<Planet> earth, sun, moon;
173
        SKY_LINE_TYPE line_type;
174
        Vec3f color;
175
        StelCore::FrameType frameType;
176
        LinearFader fader;
177
        QFont font;
178
        QString label;
179
        float lineThickness;
180
        float partThickness;
181
        bool showPartitions;
182
        bool showLabel;
183
        static QMap<int, double> precessionPartitions;
184
};
185

186
// rms added color as parameter
187
SkyGrid::SkyGrid(StelCore::FrameType frame) : color(0.2f,0.2f,0.2f), frameType(frame), lineThickness(1)
×
188
{
189
        // Font size is 12
190
        font.setPixelSize(StelApp::getInstance().getScreenFontSize()-1);
×
191
}
×
192

193
SkyGrid::~SkyGrid()
×
194
{
195
}
×
196

197
void SkyGrid::setFontSize(int newFontSize)
×
198
{
199
        font.setPixelSize(newFontSize);
×
200
}
×
201

202
// Step sizes in arcsec
203
static const double STEP_SIZES_DMS[] = {0.05, 0.2, 1., 5., 10., 60., 300., 600., 1200., 3600., 3600.*5., 3600.*10.};
204
static const double STEP_SIZES_HMS[] = {0.05, 0.2, 1.5, 7.5, 15., 15.*5., 15.*10., 15.*60., 15.*60.*5., 15.*60*10., 15.*60*60};
205

206
//! Return the angular grid step in degree which best fits the given scale
207
static double getClosestResolutionDMS(double pixelPerRad)
×
208
{
209
        double minResolution = 80.;
×
210
        double minSizeArcsec = minResolution/pixelPerRad*M_180_PI*3600;
×
211
        for (unsigned int i=0;i<12;++i)
×
212
        {
213
                if (STEP_SIZES_DMS[i]>minSizeArcsec)
×
214
                        return STEP_SIZES_DMS[i]/3600.;
×
215
        }
216
        return 10.;
×
217
}
218

219
//! Return the angular grid step in degree which best fits the given scale
220
static double getClosestResolutionHMS(double pixelPerRad)
×
221
{
222
        double minResolution = 80.;
×
223
        double minSizeArcsec = minResolution/pixelPerRad*M_180_PI*3600;
×
224
        for (unsigned int i=0;i<11;++i)
×
225
        {
226
                if (STEP_SIZES_HMS[i]>minSizeArcsec)
×
227
                        return STEP_SIZES_HMS[i]/3600.;
×
228
        }
229
        return 15.;
×
230
}
231

232
struct ViewportEdgeIntersectCallbackData
233
{
234
        ViewportEdgeIntersectCallbackData(StelPainter* p)
×
235
                : sPainter(p)
×
236
                , raAngle(0.0)
×
237
                , frameType(StelCore::FrameUninitialized) {}
×
238
        StelPainter* sPainter;
239
        Vec4f textColor;
240
        QString text;                // Label to display at the intersection of the lines and screen side
241
        double raAngle;                // Used for meridians
242
        StelCore::FrameType frameType;
243
};
244

245
// Callback which draws the label of the grid
246
void viewportEdgeIntersectCallback(const Vec3d& screenPos, const Vec3d& direction, void* userData)
×
247
{
248
        ViewportEdgeIntersectCallbackData* d = static_cast<ViewportEdgeIntersectCallbackData*>(userData);
×
249
        const Vec4f tmpColor = d->sPainter->getColor();
×
250
        d->sPainter->setColor(d->textColor);
×
251
        const bool withDecimalDegree = StelApp::getInstance().getFlagShowDecimalDegrees();
×
252
        const bool useOldAzimuth = StelApp::getInstance().getFlagSouthAzimuthUsage();
×
253
        const float ppx = static_cast<float>(d->sPainter->getProjector()->getDevicePixelsPerPixel());
×
254

255
        const int viewportWidth  = d->sPainter->getProjector()->getViewportWidth();
×
256
        const int viewportHeight = d->sPainter->getProjector()->getViewportHeight();
×
257

258
        QString text;
×
259
        if (d->text.isEmpty())
×
260
        {
261
                // We are in the case of meridians, we need to determine which of the 2 labels (3h or 15h) to use
262
                Vec3d tmpV;
×
263
                d->sPainter->getProjector()->unProject(screenPos, tmpV);
×
264
                double lon, lat, textAngle, raAngle;
265
                StelUtils::rectToSphe(&lon, &lat, tmpV);
×
266
                switch (d->frameType)
×
267
                {
268
                        case StelCore::FrameAltAz:
×
269
                        {
270
                                raAngle = ::fmod(M_PI-d->raAngle,2.*M_PI);
×
271
                                lon = ::fmod(M_PI-lon,2.*M_PI);
×
272

273
                                if (std::fabs(2.*M_PI-lon)<0.001) // We are at meridian 0
×
274
                                        lon = 0.;
×
275

276
                                const double delta = raAngle<M_PI ? M_PI : -M_PI;                                
×
277
                                if (std::fabs(lon-raAngle) < 0.01 || (lon==0. && !qFuzzyCompare(raAngle, M_PI)))
×
278
                                        textAngle = raAngle;
×
279
                                else
280
                                        textAngle = raAngle+delta;
×
281

282
                                if (qFuzzyCompare(raAngle, 2*M_PI) && qFuzzyCompare(delta, -M_PI))
×
283
                                        textAngle = 0;
×
284

285
                                if (useOldAzimuth)
×
286
                                        textAngle += M_PI;
×
287

288
                                if (withDecimalDegree)
×
289
                                        text = StelUtils::radToDecDegStr(textAngle, 4, false, true);
×
290
                                else
291
                                        text = StelUtils::radToDmsStrAdapt(textAngle);
×
292

293
                                break;                        
×
294
                        }
295
                        case StelCore::FrameObservercentricEclipticJ2000:
×
296
                        case StelCore::FrameObservercentricEclipticOfDate:
297
                        case StelCore::FrameGalactic:
298
                        case StelCore::FrameSupergalactic:
299
                        {
300
                                raAngle = d->raAngle;
×
301
                                if (raAngle<0.)
×
302
                                        raAngle += 2.*M_PI;
×
303

304
                                if (lon<0.)
×
305
                                        lon += 2*M_PI;
×
306

307
                                if (std::fabs(2.*M_PI-lon)<0.001) // We are at meridian 0
×
308
                                        lon = 0.;
×
309

310
                                const double delta = raAngle<M_PI ? M_PI : -M_PI;
×
311
                                if (std::fabs(lon-raAngle) < 1. || lon==0.)
×
312
                                        textAngle = raAngle;
×
313
                                else
314
                                        textAngle = raAngle+delta;
×
315

316
                                if (qFuzzyCompare(raAngle, 2*M_PI) && qFuzzyCompare(delta, -M_PI))
×
317
                                        textAngle = 0;
×
318

319
                                if (withDecimalDegree)
×
320
                                        text = StelUtils::radToDecDegStr(textAngle, 4, false, true);
×
321
                                else
322
                                        text = StelUtils::radToDmsStrAdapt(textAngle);
×
323

324
                                break;                        
×
325
                        }                        
326
                        default:                        
×
327
                        {
328
                                raAngle = M_PI-d->raAngle;
×
329
                                lon = M_PI-lon;
×
330

331
                                if (raAngle<0)
×
332
                                        raAngle+=2.*M_PI;
×
333

334
                                if (lon<0)
×
335
                                        lon+=2.*M_PI;
×
336

337
                                if (std::fabs(2.*M_PI-lon)<0.01) // We are at meridian 0
×
338
                                        lon = 0.;
×
339

340
                                if (std::fabs(lon-raAngle) < 0.01)
×
341
                                        textAngle = -raAngle+M_PI;
×
342
                                else
343
                                {
344
                                        const double delta = raAngle<M_PI ? M_PI : -M_PI;
×
345
                                        textAngle = -raAngle-delta+M_PI;
×
346
                                }
347

348
                                if (d->frameType==StelCore::FrameFixedEquatorial)
×
349
                                        textAngle=2.*M_PI-textAngle;
×
350

351
                                if (withDecimalDegree)
×
352
                                        text = StelUtils::radToDecDegStr(textAngle, 4, false, true);
×
353
                                else
354
                                        text = StelUtils::radToHmsStrAdapt(textAngle);
×
355
                        }
356
                }
357
        }
358
        else
359
                text = d->text;
×
360

361
        Vec3f direc=direction.toVec3f();        
×
362
        direc.normalize();        
×
363
        float angleDeg = std::atan2(-direc[1], -direc[0])*M_180_PIf;
×
364
        float xshift=6.f;
×
365
        float yshift=6.f;
×
366
        if (angleDeg>90.f || angleDeg<-90.f)
×
367
        {
368
                angleDeg+=180.f;
×
369
                xshift=-(static_cast<float>(d->sPainter->getFontMetrics().boundingRect(text).width()) + xshift*ppx);
×
370
        }
371
        // DEBUG INFO ONLY!
372
        //text=QString(" <:%1°").arg(QString::number(angleDeg, 'f', 2));
373
        //text.append(QString(" <:%1° %2/%3 (%4x%5)").arg(QString::number(angleDeg, 'f', 2), QString::number(screenPos[0], 'f', 2), QString::number(screenPos[1], 'f', 2),
374
        //                QString::number(viewportWidth),        QString::number(viewportHeight)));
375
        // Tweak edges with two ideas:
376
        // xshift is a left-right-shift after text rotation, i.e. along text direction --> SEEMS ENOUGH!
377
        if ((fabs(screenPos[0])<1.) && (angleDeg>0.f )) // LEFT
×
378
        {
379
                //text.append(" - LeftEdge"); // DEBUG ONLY!
380
                xshift+=0.5f*tan(angleDeg*M_PI_180f)*d->sPainter->getFontMetrics().boundingRect(text).height();
×
381
        }
382
        else if ((fabs(screenPos[0]-viewportWidth)<1.) && (angleDeg>180.f )) // RIGHT
×
383
        {
384
                //text.append("-RightEdge"); // DEBUG ONLY!
385
                //xshift*=(1.+1.f/tan(angleDeg*M_PI_180f));
386
                xshift += 0.5 * tan(angleDeg*M_PI_180f)*d->sPainter->getFontMetrics().boundingRect(text).height();
×
387
        }
388
        else if ((fabs(screenPos[1]-viewportHeight)<1.) && fabs(angleDeg)>5.f) // TOP
×
389
        {
390
                const float sign = angleDeg<-90.f ? 0.5f : -0.5f;
×
391
                //text.append(" - TopEdge"); // DEBUG ONLY!
392
                //xshift*=(1.+1.f/tan(angleDeg*M_PI_180f));
393
                xshift += sign * (1./tan(angleDeg*M_PI_180f))*d->sPainter->getFontMetrics().boundingRect(text).height();
×
394
        }
395
        // It seems bottom edge is always OK!
396

397
        d->sPainter->drawText(static_cast<float>(screenPos[0]), static_cast<float>(screenPos[1]), text, angleDeg, xshift*ppx, yshift*ppx);
×
398
        d->sPainter->setColor(tmpColor);
×
399
        //d->sPainter->setBlending(true); // This should have been true on entry, and we don't change it, why set it here?
400
}
×
401

402
//! Draw the sky grid in the current frame
403
void SkyGrid::draw(const StelCore* core) const
×
404
{
405
        const StelProjectorP prj = core->getProjection(frameType, (frameType!=StelCore::FrameAltAz && frameType!=StelCore::FrameFixedEquatorial) ? StelCore::RefractionAuto : StelCore::RefractionOff);
×
406
        if (fader.getInterstate() <= 0.f)
×
407
                return;
×
408

409
        const bool withDecimalDegree = StelApp::getInstance().getFlagShowDecimalDegrees();
×
410

411
        // Look for all meridians and parallels intersecting with the disk bounding the viewport
412
        // Check whether the pole are in the viewport
413
        bool northPoleInViewport = false;
×
414
        bool southPoleInViewport = false;
×
415
        Vec3f win;
×
416
        if (prj->project(Vec3f(0,0,1), win) && prj->checkInViewport(win))
×
417
                northPoleInViewport = true;
×
418
        if (prj->project(Vec3f(0,0,-1), win) && prj->checkInViewport(win))
×
419
                southPoleInViewport = true;
×
420
        // Get the longitude and latitude resolution at the center of the viewport
421
        Vec3d centerV;
×
422
        prj->unProject(prj->getViewportPosX()+prj->getViewportWidth()/2., prj->getViewportPosY()+prj->getViewportHeight()/2.+1., centerV);
×
423
        double lon2, lat2;
424
        StelUtils::rectToSphe(&lon2, &lat2, centerV);
×
425

426
        const double gridStepParallelRad = M_PI_180*getClosestResolutionDMS(static_cast<double>(prj->getPixelPerRadAtCenter()));
×
427
        double gridStepMeridianRad;
428
        if (northPoleInViewport || southPoleInViewport)
×
429
                gridStepMeridianRad = (frameType==StelCore::FrameAltAz) ? M_PI_180 * 10. : M_PI_180 * 15.;
×
430
        else
431
        {
432
                const double closestResLon = (frameType==StelCore::FrameAltAz) ?
×
433
                                        getClosestResolutionDMS(static_cast<double>(prj->getPixelPerRadAtCenter())*std::cos(lat2)) :
×
434
                                        getClosestResolutionHMS(static_cast<double>(prj->getPixelPerRadAtCenter())*std::cos(lat2));
×
435
                gridStepMeridianRad = M_PI_180 * closestResLon;
×
436
        }
437

438
        // Get the bounding halfspace
439
        const SphericalCap& viewPortSphericalCap = prj->getBoundingCap();
×
440

441
        // Compute the first grid starting point. This point is close to the center of the screen
442
        // and lies at the intersection of a meridian and a parallel
443
        lon2 = gridStepMeridianRad*(static_cast<int>(lon2/gridStepMeridianRad+0.5));
×
444
        lat2 = gridStepParallelRad*(static_cast<int>(lat2/gridStepParallelRad+0.5));
×
445
        Vec3d firstPoint;
×
446
        StelUtils::spheToRect(lon2, lat2, firstPoint);
×
447
        firstPoint.normalize();
×
448

449
        // Q_ASSERT(viewPortSphericalCap.contains(firstPoint));
450

451
        // Initialize a painter and set OpenGL state
452
        StelPainter sPainter(prj);
×
453
        sPainter.setBlending(true);
×
454
        if (lineThickness>1.f)
×
455
                sPainter.setLineWidth(lineThickness); // set line thickness
×
456
        sPainter.setLineSmooth(true);
×
457

458
        // make text colors just a bit brighter. (But if >1, QColor::setRgb fails and makes text invisible.)
459
        Vec4f textColor(qMin(1.0f, 1.25f*color[0]), qMin(1.0f, 1.25f*color[1]), qMin(1.0f, 1.25f*color[2]), fader.getInterstate());
×
460
        sPainter.setColor(color, fader.getInterstate());
×
461

462
        sPainter.setFont(font);
×
463
        ViewportEdgeIntersectCallbackData userData(&sPainter);
×
464
        userData.textColor = textColor;
×
465
        userData.frameType = frameType;
×
466

467
        /////////////////////////////////////////////////
468
        // Draw all the meridians (great circles)
469
        SphericalCap meridianSphericalCap(Vec3d(1,0,0), 0);
×
470
        Mat4d rotLon = Mat4d::zrotation(gridStepMeridianRad);
×
471
        Vec3d fpt = firstPoint;
×
472
        Vec3d p1, p2;
×
473
        int maxNbIter = static_cast<int>(M_PI/gridStepMeridianRad);
×
474
        int i;
475
        for (i=0; i<maxNbIter; ++i)
×
476
        {
477
                StelUtils::rectToSphe(&lon2, &lat2, fpt);
×
478
                userData.raAngle = lon2;
×
479

480
                meridianSphericalCap.n = fpt^Vec3d(0,0,1);
×
481
                meridianSphericalCap.n.normalize();
×
482
                if (!SphericalCap::intersectionPoints(viewPortSphericalCap, meridianSphericalCap, p1, p2))
×
483
                {
484
                        if (viewPortSphericalCap.d<meridianSphericalCap.d && viewPortSphericalCap.contains(meridianSphericalCap.n))
×
485
                        {
486
                                // The meridian is fully included in the viewport, draw it in 3 sub-arcs to avoid length > 180.
487
                                const Mat4d& rotLon120 = Mat4d::rotation(meridianSphericalCap.n, 120.*M_PI/180.);
×
488
                                Vec3d rotFpt=fpt;
×
489
                                rotFpt.transfo4d(rotLon120);
×
490
                                Vec3d rotFpt2=rotFpt;
×
491
                                rotFpt2.transfo4d(rotLon120);
×
492
                                sPainter.drawGreatCircleArc(fpt, rotFpt, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
493
                                sPainter.drawGreatCircleArc(rotFpt, rotFpt2, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
494
                                sPainter.drawGreatCircleArc(rotFpt2, fpt, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
495
                                fpt.transfo4d(rotLon);
×
496
                                continue;
×
497
                        }
×
498
                        else
499
                                break;
×
500
                }
501

502
                Vec3d middlePoint = p1+p2;
×
503
                middlePoint.normalize();
×
504
                if (!viewPortSphericalCap.contains(middlePoint))
×
505
                        middlePoint*=-1.;
×
506

507
                // Draw the arc in 2 sub-arcs to avoid lengths > 180 deg
508
                sPainter.drawGreatCircleArc(p1, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
509
                sPainter.drawGreatCircleArc(p2, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
510

511
                fpt.transfo4d(rotLon);
×
512
        }
513

514
        if (i!=maxNbIter)
×
515
        {
516
                rotLon = Mat4d::zrotation(-gridStepMeridianRad);
×
517
                fpt = firstPoint;
×
518
                fpt.transfo4d(rotLon);
×
519
                for (int j=0; j<maxNbIter-i; ++j)
×
520
                {
521
                        StelUtils::rectToSphe(&lon2, &lat2, fpt);
×
522
                        userData.raAngle = lon2;
×
523

524
                        meridianSphericalCap.n = fpt^Vec3d(0,0,1);
×
525
                        meridianSphericalCap.n.normalize();
×
526
                        if (!SphericalCap::intersectionPoints(viewPortSphericalCap, meridianSphericalCap, p1, p2))
×
527
                                break;
×
528

529
                        Vec3d middlePoint = p1+p2;
×
530
                        middlePoint.normalize();
×
531
                        if (!viewPortSphericalCap.contains(middlePoint))
×
532
                                middlePoint*=-1;
×
533

534
                        sPainter.drawGreatCircleArc(p1, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
535
                        sPainter.drawGreatCircleArc(p2, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
536

537
                        fpt.transfo4d(rotLon);
×
538
                }
539
        }
540

541
        /////////////////////////////////////////////////
542
        // Draw all the parallels (small circles)
543
        SphericalCap parallelSphericalCap(Vec3d(0,0,1), 0);
×
544
        rotLon = Mat4d::rotation(firstPoint^Vec3d(0,0,1), gridStepParallelRad);
×
545
        fpt = firstPoint;
×
546
        maxNbIter = static_cast<int>(M_PI/gridStepParallelRad)-1;
×
547
        for (i=0; i<maxNbIter; ++i)
×
548
        {
549
                StelUtils::rectToSphe(&lon2, &lat2, fpt);
×
550
                if (withDecimalDegree)
×
551
                        userData.text = StelUtils::radToDecDegStr(lat2);
×
552
                else
553
                        userData.text = StelUtils::radToDmsStrAdapt(lat2);
×
554

555
                parallelSphericalCap.d = fpt[2];
×
556
                if (parallelSphericalCap.d>0.9999999)
×
557
                        break;
×
558

559
                const Vec3d rotCenter(0,0,parallelSphericalCap.d);
×
560
                if (!SphericalCap::intersectionPoints(viewPortSphericalCap, parallelSphericalCap, p1, p2))
×
561
                {
562
                        if ((viewPortSphericalCap.d<parallelSphericalCap.d && viewPortSphericalCap.contains(parallelSphericalCap.n))
×
563
                                || (viewPortSphericalCap.d<-parallelSphericalCap.d && viewPortSphericalCap.contains(-parallelSphericalCap.n)))
×
564
                        {
565
                                // The parallel is fully included in the viewport, draw it in 3 sub-arcs to avoid lengths >= 180 deg
566
                                static const Mat4d rotLon120 = Mat4d::zrotation(120.*M_PI/180.);
×
567
                                Vec3d rotFpt=fpt;
×
568
                                rotFpt.transfo4d(rotLon120);
×
569
                                Vec3d rotFpt2=rotFpt;
×
570
                                rotFpt2.transfo4d(rotLon120);
×
571
                                sPainter.drawSmallCircleArc(fpt, rotFpt, rotCenter, viewportEdgeIntersectCallback, &userData);
×
572
                                sPainter.drawSmallCircleArc(rotFpt, rotFpt2, rotCenter, viewportEdgeIntersectCallback, &userData);
×
573
                                sPainter.drawSmallCircleArc(rotFpt2, fpt, rotCenter, viewportEdgeIntersectCallback, &userData);
×
574
                                fpt.transfo4d(rotLon);
×
575
                                continue;
×
576
                        }
×
577
                        else
578
                                break;
×
579
                }
580

581
                // Draw the arc in 2 sub-arcs to avoid lengths > 180 deg
582
                Vec3d middlePoint = p1-rotCenter+p2-rotCenter;
×
583
                middlePoint.normalize();
×
584
                middlePoint*=(p1-rotCenter).norm();
×
585
                middlePoint+=rotCenter;
×
586
                if (!viewPortSphericalCap.contains(middlePoint))
×
587
                {
588
                        middlePoint-=rotCenter;
×
589
                        middlePoint*=-1.;
×
590
                        middlePoint+=rotCenter;
×
591
                }
592

593
                sPainter.drawSmallCircleArc(p1, middlePoint, rotCenter, viewportEdgeIntersectCallback, &userData);
×
594
                sPainter.drawSmallCircleArc(p2, middlePoint, rotCenter, viewportEdgeIntersectCallback, &userData);
×
595

596
                fpt.transfo4d(rotLon);
×
597
        }
598

599
        if (i!=maxNbIter)
×
600
        {
601
                rotLon = Mat4d::rotation(firstPoint^Vec3d(0,0,1), -gridStepParallelRad);
×
602
                fpt = firstPoint;
×
603
                fpt.transfo4d(rotLon);
×
604
                for (int j=0; j<maxNbIter-i; ++j)
×
605
                {
606
                        StelUtils::rectToSphe(&lon2, &lat2, fpt);
×
607
                        if (withDecimalDegree)
×
608
                                userData.text = StelUtils::radToDecDegStr(lat2);
×
609
                        else
610
                                userData.text = StelUtils::radToDmsStrAdapt(lat2);
×
611

612
                        parallelSphericalCap.d = fpt[2];
×
613
                        const Vec3d rotCenter(0,0,parallelSphericalCap.d);
×
614
                        if (!SphericalCap::intersectionPoints(viewPortSphericalCap, parallelSphericalCap, p1, p2))
×
615
                        {
616
                                if ((viewPortSphericalCap.d<parallelSphericalCap.d && viewPortSphericalCap.contains(parallelSphericalCap.n))
×
617
                                         || (viewPortSphericalCap.d<-parallelSphericalCap.d && viewPortSphericalCap.contains(-parallelSphericalCap.n)))
×
618
                                {
619
                                        // The parallel is fully included in the viewport, draw it in 3 sub-arcs to avoid lengths >= 180 deg
620
                                        static const Mat4d rotLon120 = Mat4d::zrotation(120.*M_PI/180.);
×
621
                                        Vec3d rotFpt=fpt;
×
622
                                        rotFpt.transfo4d(rotLon120);
×
623
                                        Vec3d rotFpt2=rotFpt;
×
624
                                        rotFpt2.transfo4d(rotLon120);
×
625
                                        sPainter.drawSmallCircleArc(fpt, rotFpt, rotCenter, viewportEdgeIntersectCallback, &userData);
×
626
                                        sPainter.drawSmallCircleArc(rotFpt, rotFpt2, rotCenter, viewportEdgeIntersectCallback, &userData);
×
627
                                        sPainter.drawSmallCircleArc(rotFpt2, fpt, rotCenter, viewportEdgeIntersectCallback, &userData);
×
628
                                        fpt.transfo4d(rotLon);
×
629
                                        continue;
×
630
                                }
×
631
                                else
632
                                        break;
×
633
                        }
634

635
                        // Draw the arc in 2 sub-arcs to avoid lengths > 180 deg
636
                        Vec3d middlePoint = p1-rotCenter+p2-rotCenter;
×
637
                        middlePoint.normalize();
×
638
                        middlePoint*=(p1-rotCenter).norm();
×
639
                        middlePoint+=rotCenter;
×
640
                        if (!viewPortSphericalCap.contains(middlePoint))
×
641
                        {
642
                                middlePoint-=rotCenter;
×
643
                                middlePoint*=-1.;
×
644
                                middlePoint+=rotCenter;
×
645
                        }
646

647
                        sPainter.drawSmallCircleArc(p1, middlePoint, rotCenter, viewportEdgeIntersectCallback, &userData);
×
648
                        sPainter.drawSmallCircleArc(p2, middlePoint, rotCenter, viewportEdgeIntersectCallback, &userData);
×
649

650
                        fpt.transfo4d(rotLon);
×
651
                }
652
        }
653

654
        if (lineThickness>1)
×
655
                sPainter.setLineWidth(1); // reset thickness of line
×
656
        sPainter.setLineSmooth(false);
×
657
}
×
658

659
SkyLine::SkyLine(SKY_LINE_TYPE _line_type) : line_type(_line_type), color(0.f, 0.f, 1.f), lineThickness(1), partThickness(1), showPartitions(true), showLabel(true)
×
660
{
661
        // Font size is 14
662
        font.setPixelSize(StelApp::getInstance().getScreenFontSize()+1);
×
663
        updateLabel();
×
664
}
×
665

666
// Contains ecliptic rotations from -13000, -12900, ... , +13000
667
QMap<int, double> SkyLine::precessionPartitions;
668
QSharedPointer<Planet> SkyLine::earth, SkyLine::sun, SkyLine::moon;
669

670
//! call once before creating the first line.
671
void SkyLine::init()
×
672
{
673
        setSolarSystem(GETSTELMODULE(SolarSystem));
×
674
        // The years for the precession circles start in -13000, this is 15000 before J2000.
675
        for (int y=-13000; y<=17000; y+=100) // Range of DE431. Maybe extend to -50000..+50000?
×
676
        {
677
                double jdY0, epsilonA, chiA, omegaA, psiA;
678
                StelUtils::getJDFromDate(&jdY0, y, 1, 0, 0, 0, 0); // JD of Jan.0.
×
679
                getPrecessionAnglesVondrak(jdY0, &epsilonA, &chiA, &omegaA, &psiA);
×
680
                precessionPartitions.insert(y, psiA); // Store only the value of shift along the ecliptic.
×
681
        }
682
}
×
683

684
void SkyLine::setSolarSystem(SolarSystem* ss)
×
685
{
686
        earth = ss->getEarth();
×
687
        sun   = ss->getSun();
×
688
        moon  = ss->getMoon();
×
689
}
×
690

691
void SkyLine::deinit()
×
692
{
693
        earth = Q_NULLPTR;
×
694
        sun   = Q_NULLPTR;
×
695
        moon  = Q_NULLPTR;
×
696
}
×
697

698
SkyLine::~SkyLine()
×
699
{
700
}
×
701

702
void SkyLine::setFontSize(int newFontSize)
×
703
{
704
        font.setPixelSize(newFontSize);
×
705
}
×
706

707
void SkyLine::updateLabel()
×
708
{
709
        switch (line_type)
×
710
        {
711
                case MERIDIAN:
×
712
                        frameType = StelCore::FrameAltAz;
×
713
                        label = q_("Meridian");
×
714
                        break;
×
715
                case ECLIPTIC_J2000:
×
716
                        frameType = StelCore::FrameObservercentricEclipticJ2000;
×
717
                        label = q_("Ecliptic of J2000.0");
×
718
                        break;
×
719
                case ECLIPTIC_OF_DATE:
×
720
                        frameType = StelCore::FrameObservercentricEclipticOfDate;
×
721
                        label = q_("Ecliptic of Date");
×
722
                        break;
×
723
                case EQUATOR_J2000:
×
724
                        frameType = StelCore::FrameJ2000;
×
725
                        label = q_("Equator of J2000.0");
×
726
                        break;
×
727
                case EQUATOR_OF_DATE:
×
728
                        frameType = StelCore::FrameEquinoxEqu;
×
729
                        label = q_("Equator");
×
730
                        break;
×
731
                case FIXED_EQUATOR:
×
732
                        frameType = StelCore::FrameFixedEquatorial; // Apparent Hour Angle is a non-refraction frame.
×
733
                        label = q_("Hour Angle");
×
734
                        break;
×
735
                case PRECESSIONCIRCLE_N:
×
736
                case PRECESSIONCIRCLE_S:
737
                        frameType = StelCore::FrameObservercentricEclipticOfDate;
×
738
                        label = q_("Precession Circle");
×
739
                        break;
×
740
                case HORIZON:
×
741
                        frameType = StelCore::FrameAltAz;
×
742
                        label = q_("Horizon");
×
743
                        break;
×
744
                case GALACTICEQUATOR:
×
745
                        frameType = StelCore::FrameGalactic;
×
746
                        label = q_("Galactic Equator");
×
747
                        break;
×
748
                case SUPERGALACTICEQUATOR:
×
749
                        frameType = StelCore::FrameSupergalactic;
×
750
                        label = q_("Supergalactic Equator");
×
751
                        break;
×
752
                case LONGITUDE:
×
753
                        frameType = StelCore::FrameObservercentricEclipticOfDate;
×
754
                        // TRANSLATORS: Full term is "opposition/conjunction longitude"
755
                        label = q_("O./C. longitude");
×
756
                        break;
×
757
                case QUADRATURE:
×
758
                        frameType = StelCore::FrameObservercentricEclipticOfDate;
×
759
                        label = q_("Quadrature");
×
760
                        break;
×
761
                case PRIME_VERTICAL:
×
762
                        frameType=StelCore::FrameAltAz;
×
763
                        label = q_("Prime Vertical");
×
764
                        break;
×
765
                case CURRENT_VERTICAL:
×
766
                        frameType=StelCore::FrameAltAz;
×
767
                        label = q_("Altitude");
×
768
                        break;
×
769
                case COLURE_1:
×
770
                        frameType=StelCore::FrameEquinoxEqu;
×
771
                        label = q_("Equinoctial Colure");
×
772
                        break;
×
773
                case COLURE_2:
×
774
                        frameType=StelCore::FrameEquinoxEqu;
×
775
                        label = q_("Solstitial Colure");
×
776
                        break;
×
777
                case CIRCUMPOLARCIRCLE_N:
×
778
                case CIRCUMPOLARCIRCLE_S:
779
                        frameType = StelCore::FrameEquinoxEqu;
×
780
                        label = q_("Circumpolar Circle");
×
781
                        break;
×
782
                case EARTH_UMBRA:
×
783
                        frameType = StelCore::FrameHeliocentricEclipticJ2000;
×
784
                        label = q_("Umbra");
×
785
                        break;
×
786
                case EARTH_PENUMBRA:
×
787
                        frameType = StelCore::FrameHeliocentricEclipticJ2000;
×
788
                        label = q_("Penumbra");
×
789
                        break;
×
790
                case INVARIABLEPLANE:
×
791
                        frameType = StelCore::FrameJ2000;
×
792
                        label = q_("Invariable Plane");
×
793
                        break;
×
794
                case SOLAR_EQUATOR:
×
795
                        frameType = StelCore::FrameJ2000;
×
796
                        label = q_("Projected Solar Equator");
×
797
                        break;
×
798
        }
799
}
×
800

801
void SkyLine::draw(StelCore *core) const
×
802
{
803
        if (fader.getInterstate() <= 0.f)
×
804
                return;
×
805

806
        StelProjectorP prj = core->getProjection(frameType, (frameType!=StelCore::FrameAltAz && frameType!=StelCore::FrameFixedEquatorial) ? StelCore::RefractionAuto : StelCore::RefractionOff);
×
807

808
        // Get the bounding halfspace
809
        const SphericalCap& viewPortSphericalCap = prj->getBoundingCap();
×
810

811
        // Initialize a painter and set openGL state
812
        StelPainter sPainter(prj);
×
813
        sPainter.setColor(color, fader.getInterstate());
×
814
        sPainter.setBlending(true);
×
815
        const float oldLineWidth=sPainter.getLineWidth();
×
816
        sPainter.setLineWidth(lineThickness); // set line thickness
×
817
        sPainter.setLineSmooth(true);
×
818

819
        ViewportEdgeIntersectCallbackData userData(&sPainter);        
×
820
        sPainter.setFont(font);
×
821
        userData.textColor = Vec4f(color, fader.getInterstate());
×
822
        userData.text = label;
×
823
        double alt=0, az=0; // Required only for CURRENT_VERTICAL line. Will contain alt/az of view.
×
824
        /////////////////////////////////////////////////
825
        // Draw the line
826

827
        // Precession and Circumpolar circles are Small Circles, all others are Great Circles.
828
        if (QList<SKY_LINE_TYPE>({PRECESSIONCIRCLE_N, PRECESSIONCIRCLE_S, CIRCUMPOLARCIRCLE_N, CIRCUMPOLARCIRCLE_S, EARTH_UMBRA, EARTH_PENUMBRA}).contains(line_type))
×
829
        {
830
                // partitions for precession. (mark millennia!)
831
                double lat=0.;
×
832
                if (line_type==PRECESSIONCIRCLE_N || line_type==PRECESSIONCIRCLE_S)
×
833
                {
834
                        lat=(line_type==PRECESSIONCIRCLE_S ? -1.0 : 1.0) * (M_PI_2-getPrecessionAngleVondrakCurrentEpsilonA());
×
835
                }
836
                else if (line_type==CIRCUMPOLARCIRCLE_N || line_type==CIRCUMPOLARCIRCLE_S)
×
837
                {
838
                        const double obsLatRad=core->getCurrentLocation().getLatitude() * (M_PI_180);
×
839
                        if (obsLatRad == 0.)
×
840
                        {
841
                                sPainter.setLineWidth(oldLineWidth); // restore painter state
×
842
                                sPainter.setLineSmooth(false);
×
843
                                sPainter.setBlending(false);
×
844
                                return;
×
845
                        }
846
                        if (line_type==CIRCUMPOLARCIRCLE_N)
×
847
                                lat=(obsLatRad>0 ? -1.0 : +1.0) * obsLatRad + (M_PI_2);
×
848
                        else // southern circle
849
                                lat=(obsLatRad>0 ? +1.0 : -1.0) * obsLatRad - (M_PI_2);
×
850
                }
851

852
                if ((line_type==EARTH_UMBRA) || (line_type==EARTH_PENUMBRA))
×
853
                {
854
                        // resizing the shadow together with the Moon would require considerable trickery.
855
                        // It seems better to just switch it off.
856
                        if (GETSTELMODULE(SolarSystem)->getFlagMoonScale()) return;
×
857

858
                        // We compute the shadow circle attached to the geocenter, but must point it in the opposite direction of the sun's aberrated position.
859
                        const Vec3d pos=earth->getEclipticPos();
×
860
                        const Vec3d dir= - sun->getAberrationPush() + pos;
×
861
                        double lambda, beta;
862
                        StelUtils::rectToSphe(&lambda, &beta, dir);
×
863
                        const QPair<Vec3d, Vec3d> radii=GETSTELMODULE(SolarSystem)->getEarthShadowRadiiAtLunarDistance();
×
864
                        const double radius=(line_type==EARTH_UMBRA ? radii.first[1] : radii.second[1]);
×
865
                        const double dist=moon->getEclipticPos().norm();  // geocentric Lunar distance [AU]
×
866
                        const Mat4d rot=Mat4d::zrotation(lambda)*Mat4d::yrotation(-beta);
×
867

868
                        StelVertexArray circle(StelVertexArray::LineLoop);
×
869
                        for (int i=0; i<360; ++i)
×
870
                        {
871
                                Vec3d point(dist, cos(i*M_PI_180)*radius, sin(i*M_PI_180)*radius); // disk towards First Point of Aries
×
872
                                rot.transfo(point);                                                // rotate towards earth position
×
873
                                circle.vertex.append(pos+point);                                   // attach to earth centre
×
874
                        }
875
                        sPainter.drawStelVertexArray(circle, false); // setting true does not paint for cylindrical&friends :-(
×
876

877
                        // Special case for Umbra and Penumbra labels
878
                        Vec3d point(dist, 0.0, 0.0);
×
879
                        rot.transfo(point);
×
880
                        const float shift=static_cast<float>(sPainter.getProjector()->getPixelPerRadAtCenter()*(line_type==EARTH_UMBRA ? radii.first[0] : radii.second[0]))*0.0000112f/M_PIf;
×
881
                        sPainter.drawText(pos+point, (line_type==EARTH_UMBRA ? q_("Umbra") : q_("Penumbra")), 0.f, shift, shift, false);
×
882
                        return;
×
883
                }
×
884
                else
885
                {
886
                        SphericalCap declinationCap(Vec3d(0,0,1), std::sin(lat));
×
887
                        const Vec3d rotCenter(0,0,declinationCap.d);
×
888

889
                        Vec3d p1, p2;
×
890
                        if (!SphericalCap::intersectionPoints(viewPortSphericalCap, declinationCap, p1, p2))
×
891
                        {
892
                                if ((viewPortSphericalCap.d<declinationCap.d && viewPortSphericalCap.contains(declinationCap.n))
×
893
                                                || (viewPortSphericalCap.d<-declinationCap.d && viewPortSphericalCap.contains(-declinationCap.n)))
×
894
                                {
895
                                        // The line is fully included in the viewport, draw it in 3 sub-arcs to avoid length > 180.
896
                                        Vec3d pt1;
×
897
                                        Vec3d pt2;
×
898
                                        Vec3d pt3;
×
899
                                        const double lon1=0.0;
×
900
                                        const double lon2=120.0*M_PI_180;
×
901
                                        const double lon3=240.0*M_PI_180;
×
902
                                        StelUtils::spheToRect(lon1, lat, pt1); pt1.normalize();
×
903
                                        StelUtils::spheToRect(lon2, lat, pt2); pt2.normalize();
×
904
                                        StelUtils::spheToRect(lon3, lat, pt3); pt3.normalize();
×
905

906
                                        sPainter.drawSmallCircleArc(pt1, pt2, rotCenter, viewportEdgeIntersectCallback, &userData);
×
907
                                        sPainter.drawSmallCircleArc(pt2, pt3, rotCenter, viewportEdgeIntersectCallback, &userData);
×
908
                                        sPainter.drawSmallCircleArc(pt3, pt1, rotCenter, viewportEdgeIntersectCallback, &userData);
×
909
                                }
910
                        }
911
                        else
912
                        {
913
                                // Draw the arc in 2 sub-arcs to avoid lengths > 180 deg
914
                                Vec3d middlePoint = p1-rotCenter+p2-rotCenter;
×
915
                                middlePoint.normalize();
×
916
                                middlePoint*=(p1-rotCenter).norm();
×
917
                                middlePoint+=rotCenter;
×
918
                                if (!viewPortSphericalCap.contains(middlePoint))
×
919
                                {
920
                                        middlePoint-=rotCenter;
×
921
                                        middlePoint*=-1.;
×
922
                                        middlePoint+=rotCenter;
×
923
                                }
924

925
                                sPainter.drawSmallCircleArc(p1, middlePoint, rotCenter,viewportEdgeIntersectCallback, &userData);
×
926
                                sPainter.drawSmallCircleArc(p2, middlePoint, rotCenter, viewportEdgeIntersectCallback, &userData);
×
927
                        }
928

929
                        if (showPartitions && (line_type==PRECESSIONCIRCLE_N))
×
930
                        {
931
                                const float lineThickness=sPainter.getLineWidth();
×
932
                                sPainter.setLineWidth(partThickness);
×
933

934
                                // Find current value of node rotation.
935
                                double epsilonA, chiA, omegaA, psiA;
936
                                getPrecessionAnglesVondrak(core->getJDE(), &epsilonA, &chiA, &omegaA, &psiA);
×
937
                                // psiA is the current angle, counted from J2000. Other century years have been precomputed in precessionPartitions.
938
                                // We cannot simply sum up the rotations, but must find the century locations one-by-one.
939

940
                                Vec3d part0; // current pole point on the northern precession circle.
×
941
                                StelUtils::spheToRect(0., M_PI/2.-core->getCurrentPlanet().data()->getRotObliquity(core->getJDE()), part0);
×
942
                                Vec3d partAxis(0,1,0);
×
943
                                Vec3d partZAxis = Vec3d(0,0,1); // rotation axis for the year partitions
×
944
                                Vec3d part100=part0;  part100.transfo4d(Mat4d::rotation(partAxis, 0.10*M_PI/180)); // part1 should point to 0.05deg south of "equator"
×
945
                                Vec3d part500=part0;  part500.transfo4d(Mat4d::rotation(partAxis, 0.25*M_PI/180));
×
946
                                Vec3d part1000=part0; part1000.transfo4d(Mat4d::rotation(partAxis, 0.45*M_PI/180));
×
947
                                Vec3d part1000l=part0; part1000l.transfo4d(Mat4d::rotation(partAxis, 0.475*M_PI/180)); // label
×
948

949
                                Vec3d pt0, ptTgt;
×
950
                                for (int y=-13000; y<13000; y+=100)
×
951
                                {
952
                                        const double tickAngle=M_PI_2+psiA-precessionPartitions.value(y, 0.);
×
953
                                        pt0=part0; pt0.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
954
                                        if (y%1000 == 0)
×
955
                                        {
956
                                                ptTgt=part1000; ptTgt.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
957
                                                if (viewPortSphericalCap.contains(pt0) || viewPortSphericalCap.contains(ptTgt))
×
958
                                                        sPainter.drawGreatCircleArc(pt0, ptTgt, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
959
                                                if (showLabel)
×
960
                                                {
961
                                                        Vec3d ptTgtL=part1000l; ptTgtL.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
962
                                                        QString label(QString::number(y));
×
963
                                                        Vec3d screenPosTgt, screenPosTgtL;
×
964
                                                        prj->project(ptTgt, screenPosTgt);
×
965
                                                        prj->project(ptTgtL, screenPosTgtL);
×
966
                                                        double dx=screenPosTgtL[0]-screenPosTgt[0];
×
967
                                                        double dy=screenPosTgtL[1]-screenPosTgt[1];
×
968
                                                        float textAngle=static_cast<float>(atan2(dy,dx));
×
969

970
                                                        const float shiftx = 2.f;
×
971
                                                        const float shifty = - static_cast<float>(sPainter.getFontMetrics().height()) / 4.f;
×
972
                                                        sPainter.drawText(ptTgt, label, textAngle*M_180_PIf, shiftx, shifty, true);
×
973
                                                }
×
974
                                        }
975
                                        else
976
                                        {
977
                                                ptTgt=(y%500 == 0 ? part500 : part100);
×
978
                                                ptTgt.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
979
                                                if (viewPortSphericalCap.contains(pt0) || viewPortSphericalCap.contains(ptTgt))
×
980
                                                        sPainter.drawGreatCircleArc(pt0, ptTgt, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
981
                                        }
982
                                }
983

984
                                sPainter.setLineWidth(lineThickness);
×
985
                        }
986
                        if (showPartitions && (line_type==PRECESSIONCIRCLE_S))
×
987
                        {
988
                                const float lineThickness=sPainter.getLineWidth();
×
989
                                sPainter.setLineWidth(partThickness);
×
990

991
                                // Find current value of node rotation.
992
                                double epsilonA, chiA, omegaA, psiA;
993
                                getPrecessionAnglesVondrak(core->getJDE(), &epsilonA, &chiA, &omegaA, &psiA);
×
994
                                // psiA is the current angle, counted from J2000. Other century years have been precomputed in precessionPartitions.
995
                                // We cannot simply sum up the rotations, but must find the century locations one-by-one.
996

997
                                Vec3d part0; // current pole point on the northern precession circle.
×
998
                                StelUtils::spheToRect(0., -M_PI/2.+core->getCurrentPlanet().data()->getRotObliquity(core->getJDE()), part0);
×
999
                                Vec3d partAxis(0,1,0);
×
1000
                                Vec3d partZAxis = Vec3d(0,0,1); // rotation axis for the year partitions
×
1001
                                Vec3d part100=part0;  part100.transfo4d(Mat4d::rotation(partAxis, -0.10*M_PI/180)); // part1 should point to 0.05deg south of "equator"
×
1002
                                Vec3d part500=part0;  part500.transfo4d(Mat4d::rotation(partAxis, -0.25*M_PI/180));
×
1003
                                Vec3d part1000=part0; part1000.transfo4d(Mat4d::rotation(partAxis, -0.45*M_PI/180));
×
1004
                                Vec3d part1000l=part0; part1000.transfo4d(Mat4d::rotation(partAxis, -0.475*M_PI/180)); // label
×
1005

1006
                                Vec3d pt0, ptTgt;
×
1007
                                for (int y=-13000; y<13000; y+=100)
×
1008
                                {
1009
                                        const double tickAngle=-M_PI_2+psiA-precessionPartitions.value(y, 0.);
×
1010
                                        pt0=part0; pt0.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
1011
                                        if (y%1000 == 0)
×
1012
                                        {
1013
                                                ptTgt=part1000; ptTgt.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
1014
                                                if (viewPortSphericalCap.contains(pt0) || viewPortSphericalCap.contains(ptTgt))
×
1015
                                                        sPainter.drawGreatCircleArc(pt0, ptTgt, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
1016
                                                if (showLabel)
×
1017
                                                {
1018
                                                        Vec3d ptTgtL=part1000l; ptTgtL.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
1019
                                                        QString label(QString::number(y));
×
1020
                                                        Vec3d screenPosTgt, screenPosTgtL;
×
1021
                                                        prj->project(ptTgt, screenPosTgt);
×
1022
                                                        prj->project(ptTgtL, screenPosTgtL);
×
1023
                                                        double dx=screenPosTgtL[0]-screenPosTgt[0];
×
1024
                                                        double dy=screenPosTgtL[1]-screenPosTgt[1];
×
1025
                                                        float textAngle=static_cast<float>(atan2(dy,dx));
×
1026

1027
                                                        const float shiftx = -5.f - static_cast<float>(sPainter.getFontMetrics().boundingRect(label).width());
×
1028
                                                        const float shifty = - static_cast<float>(sPainter.getFontMetrics().height()) / 4.f;
×
1029
                                                        sPainter.drawText(ptTgt, label, textAngle*M_180_PIf, shiftx, shifty, true);
×
1030
                                                }
×
1031
                                        }
1032
                                        else
1033
                                        {
1034
                                                ptTgt=(y%500 == 0 ? part500 : part100);
×
1035
                                                ptTgt.transfo4d(Mat4d::rotation(partZAxis, tickAngle));
×
1036
                                                if (viewPortSphericalCap.contains(pt0) || viewPortSphericalCap.contains(ptTgt))
×
1037
                                                        sPainter.drawGreatCircleArc(pt0, ptTgt, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
1038
                                        }
1039
                                }
1040

1041
                                sPainter.setLineWidth(lineThickness);
×
1042
                        }
1043
                }
×
1044
                sPainter.setLineWidth(oldLineWidth); // restore line thickness
×
1045
                sPainter.setLineSmooth(false);
×
1046
                sPainter.setBlending(false);
×
1047

1048
                return;
×
1049
        }
1050

1051
        // All the other "lines" are Great Circles
1052
        SphericalCap sphericalCap(Vec3d(0,0,1), 0);
×
1053
        Vec3d fpt(1,0,0); // First Point
×
1054

1055
        if ((line_type==MERIDIAN) || (line_type==COLURE_1))
×
1056
        {
1057
                sphericalCap.n.set(0,1,0);
×
1058
        }
1059
        else if ((line_type==PRIME_VERTICAL) || (line_type==COLURE_2))
×
1060
        {
1061
                sphericalCap.n.set(1,0,0);
×
1062
                fpt.set(0,0,1);
×
1063
        }
1064
        else if (line_type==CURRENT_VERTICAL)
×
1065
        {
1066
                Vec3d coordJ2000=GETSTELMODULE(StelMovementMgr)->getViewDirectionJ2000();
×
1067
                Vec3d coordAltAz=core->j2000ToAltAz(coordJ2000, StelCore::RefractionAuto);
×
1068
                StelUtils::rectToSphe(&az, &alt, coordAltAz);
×
1069
                sphericalCap.n.set(sin(-az), cos(-az), 0.);
×
1070
                fpt.set(0,0,1);
×
1071
        }
1072
        else if (line_type==LONGITUDE)
×
1073
        {
1074
                Vec3d coord;                
×
1075
                const double eclJDE = earth->getRotObliquity(core->getJDE());
×
1076
                double ra_equ, dec_equ, lambdaJDE, betaJDE;
1077

1078
                StelUtils::rectToSphe(&ra_equ,&dec_equ, sun->getEquinoxEquatorialPos(core));
×
1079
                StelUtils::equToEcl(ra_equ, dec_equ, eclJDE, &lambdaJDE, &betaJDE);
×
1080
                if (lambdaJDE<0) lambdaJDE+=2.0*M_PI;
×
1081

1082
                StelUtils::spheToRect(lambdaJDE + M_PI_2, 0., coord);
×
1083
                sphericalCap.n=coord;
×
1084
                fpt.set(0,0,1);
×
1085
        }
1086
        else if (line_type==QUADRATURE)
×
1087
        {
1088
                Vec3d coord;
×
1089
                const double eclJDE = earth->getRotObliquity(core->getJDE());
×
1090
                double ra_equ, dec_equ, lambdaJDE, betaJDE;
1091

1092
                StelUtils::rectToSphe(&ra_equ,&dec_equ, sun->getEquinoxEquatorialPos(core));
×
1093
                StelUtils::equToEcl(ra_equ, dec_equ, eclJDE, &lambdaJDE, &betaJDE);
×
1094
                if (lambdaJDE<0) lambdaJDE+=2.0*M_PI;
×
1095

1096
                StelUtils::spheToRect(lambdaJDE + M_PI, 0., coord);
×
1097
                sphericalCap.n=coord;
×
1098
                fpt.set(0,0,1);
×
1099
        }
1100
        else if (line_type==INVARIABLEPLANE)
×
1101
        {
1102
                // RA, DEC of the Invariable Plane given in WGCCRE2015 report
1103
                static const Mat4d mat=Mat4d::zrotation(M_PI_180*(273.85+90.))*Mat4d::xrotation(M_PI_180*(90.-66.99));
×
1104
                static const Vec3d axis=mat*Vec3d(0, 0, 1);
×
1105
                static const Vec3d ivFpt=mat*Vec3d(1, 0, 0);
×
1106
                sphericalCap.n=axis;
×
1107
                fpt=ivFpt;
×
1108
        }
1109
        else if (line_type==SOLAR_EQUATOR)
×
1110
        {
1111
                // Split out the const part of rotation: rotate along ICRS equator to ascending node
1112
                static const Mat4d solarFrame = Mat4d::zrotation((286.13+90)*M_PI_180) * Mat4d::xrotation((90-63.87)*M_PI_180);
×
1113
                // Axis rotation. N.B. By this formulation, we ignore any light time correction.
1114
                Mat4d solarRot=solarFrame * Mat4d::zrotation((sun->getSiderealTime(core->getJD(), core->getJDE())*M_PI_180));
×
1115

1116
                sphericalCap.n=solarRot*sphericalCap.n;
×
1117
                fpt=solarRot*fpt;
×
1118
        }
1119

1120
        if (showPartitions && !(QList<SKY_LINE_TYPE>({INVARIABLEPLANE, EARTH_UMBRA, EARTH_PENUMBRA, QUADRATURE}).contains(line_type)))
×
1121
        {
1122
                const float lineThickness=sPainter.getLineWidth();
×
1123
                sPainter.setLineWidth(partThickness);
×
1124

1125
                // Before drawing the lines themselves (and returning), draw the short partition lines
1126
                // Define short lines from "equator" a bit "southwards"
1127
                Vec3d part0 = fpt;
×
1128
                Vec3d partAxis(0,1,0);
×
1129
                Vec3d partZAxis = sphericalCap.n; // rotation axis for the 360 partitions
×
1130
                if ((line_type==MERIDIAN) || (line_type==COLURE_1))
×
1131
                {
1132
                        partAxis.set(0,0,1);
×
1133
                }
1134
                else if ((line_type==PRIME_VERTICAL) || (line_type==COLURE_2))
×
1135
                {
1136
                        part0.set(0,1,0);
×
1137
                        partAxis.set(0,0,1);
×
1138
                }
1139
                else if ((line_type==LONGITUDE) || (line_type==CURRENT_VERTICAL) || (line_type==SOLAR_EQUATOR))
×
1140
                {
1141
                        partAxis=sphericalCap.n ^ part0;
×
1142
                }
1143

1144
                Vec3d part1=part0;  part1.transfo4d(Mat4d::rotation(partAxis, 0.10*M_PI/180)); // part1 should point to 0.05deg south of "equator"
×
1145
                Vec3d part5=part0;  part5.transfo4d(Mat4d::rotation(partAxis, 0.25*M_PI/180));
×
1146
                Vec3d part10=part0; part10.transfo4d(Mat4d::rotation(partAxis, 0.45*M_PI/180));
×
1147
                Vec3d part30=part0; part30.transfo4d(Mat4d::rotation(partAxis, 0.75*M_PI/180));
×
1148
                Vec3d part30l=part0; part30l.transfo4d(Mat4d::rotation(partAxis, 0.775*M_PI/180));
×
1149
                const Mat4d& rotZ1 = Mat4d::rotation(partZAxis, 1.0*M_PI/180.);
×
1150
                // Limit altitude marks to the displayed range
1151
                int i_min= 0;
×
1152
                int i_max=(line_type==CURRENT_VERTICAL ? 181 : 360);
×
1153
                if ((line_type==CURRENT_VERTICAL) && (GETSTELMODULE(StelMovementMgr)->getMountMode()==StelMovementMgr::MountAltAzimuthal) &&
×
1154
                    (core->getCurrentProjectionType()!=StelCore::ProjectionEqualArea) && (core->getCurrentProjectionType()!=StelCore::ProjectionStereographic) && (core->getCurrentProjectionType()!=StelCore::ProjectionFisheye))
×
1155
                {
1156
                        // Avoid marks creeping sideways
1157
                        if (alt<= 2*M_PI_180) i_min =static_cast<int>(-alt*M_180_PI)+2;
×
1158
                        if (alt>=-2*M_PI_180) i_max-=static_cast<int>( alt*M_180_PI)+2;
×
1159
                }
1160

1161
                for (int i=0; i<i_max; ++i)
×
1162
                {
1163
                        if ((line_type==CURRENT_VERTICAL && i>=i_min) || (line_type!=CURRENT_VERTICAL))
×
1164
                        {
1165
                                if (i%30 == 0 && (viewPortSphericalCap.contains(part0) || viewPortSphericalCap.contains(part30)))
×
1166
                                {
1167
                                        sPainter.drawGreatCircleArc(part0, part30, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
1168

1169
                                        if (showLabel)
×
1170
                                        {
1171
                                                // we must adapt (rotate) some labels to observers on the southern hemisphere.
1172
                                                const bool southernHemi = core->getCurrentLocation().getLatitude() < 0.f;
×
1173
                                                int value=i;
×
1174
                                                float extraTextAngle=0.f;
×
1175
                                                // shiftx/y is OK for equator, horizon, ecliptic.
1176
                                                float shiftx = - static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) * 0.5f;
×
1177
                                                float shifty = - static_cast<float>(sPainter.getFontMetrics().height());
×
1178
                                                QString unit("°");
×
1179
                                                QString label;
×
1180
                                                switch (line_type)
×
1181
                                                {
1182
                                                        case EQUATOR_J2000:
×
1183
                                                        case EQUATOR_OF_DATE:
1184
                                                        case FIXED_EQUATOR:
1185
                                                                if (line_type==FIXED_EQUATOR) value=(360-i) % 360;
×
1186
                                                                if (!StelApp::getInstance().getFlagShowDecimalDegrees())
×
1187
                                                                {
1188
                                                                        value /= 15;
×
1189
                                                                        unit="h";
×
1190
                                                                }
1191
                                                                extraTextAngle = southernHemi ? -90.f : 90.f;
×
1192
                                                                if (southernHemi) shifty*=-0.25f;
×
1193
                                                                break;
×
1194
                                                        case HORIZON:
×
1195
                                                                value=(360-i+(StelApp::getInstance().getFlagSouthAzimuthUsage() ? 0 : 180)) % 360;
×
1196
                                                                extraTextAngle=90.f;
×
1197
                                                                break;
×
1198
                                                        case MERIDIAN:
×
1199
                                                        case COLURE_1: // Equinoctial Colure
1200
                                                                shifty = - static_cast<float>(sPainter.getFontMetrics().height()) * 0.25f;
×
1201
                                                                if (i<90) // South..Nadir | ARI0..CSP
×
1202
                                                                {
1203
                                                                        value=-i;
×
1204
                                                                        extraTextAngle = (line_type==COLURE_1 && southernHemi) ? 0.f : 180.f;
×
1205
                                                                        shiftx = (line_type==COLURE_1 && southernHemi) ? 3.f : - static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) - 3.f;
×
1206
                                                                }
1207
                                                                else if (i>270) // Zenith..South | CNP..ARI0
×
1208
                                                                {
1209
                                                                        value=360-i;
×
1210
                                                                        extraTextAngle = (line_type==COLURE_1 && southernHemi) ? 0.f : 180.f;
×
1211
                                                                        shiftx = (line_type==COLURE_1 && southernHemi) ? 3.f : - static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) - 3.f;
×
1212
                                                                }
1213
                                                                else // Nadir..North..Zenith | CSP..Equator:12h..CNP
1214
                                                                {
1215
                                                                        value=i-180;
×
1216
                                                                        extraTextAngle = (line_type==COLURE_1 && southernHemi) ? 180.f : 0.f;
×
1217
                                                                        shiftx = (line_type==COLURE_1 && southernHemi) ? - static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) - 3.f : 3.f;
×
1218
                                                                }
1219
                                                                break;
×
1220
                                                        case PRIME_VERTICAL:
×
1221
                                                        case COLURE_2: // Solstitial Colure
1222
                                                                shifty = - static_cast<float>(sPainter.getFontMetrics().height()) * 0.25f;
×
1223
                                                                if (i<90) // East..Zenith | Equator:6h..SummerSolstice..CNP
×
1224
                                                                {
1225
                                                                        value=i;
×
1226
                                                                        extraTextAngle = (line_type==COLURE_2 && southernHemi) ? 0.f : 180.f;
×
1227
                                                                        shiftx = (line_type==COLURE_2 && southernHemi) ? 3.f : - static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) - 3.f;
×
1228
                                                                }
1229
                                                                else if (i<270) // Zenith..West..Nadir | CNP..WinterSolstice..CSP
×
1230
                                                                {
1231
                                                                        value=180-i;
×
1232
                                                                        extraTextAngle = (line_type==COLURE_2 && southernHemi) ? 180.f : 0.f;
×
1233
                                                                        shiftx = (line_type==COLURE_2 && southernHemi) ? - static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) - 3.f : 3.f;
×
1234
                                                                }
1235
                                                                else // Nadir..East | CSP..Equator:6h
1236
                                                                {
1237
                                                                        value=i-360;
×
1238
                                                                        extraTextAngle = (line_type==COLURE_2 && southernHemi) ? 0.f : 180.f;
×
1239
                                                                        shiftx = (line_type==COLURE_2 && southernHemi) ? 3.f : - static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) - 3.f;
×
1240
                                                                }
1241
                                                                break;
×
1242
                                                        case CURRENT_VERTICAL:
×
1243
                                                                shifty = - static_cast<float>(sPainter.getFontMetrics().height()) * 0.25f;
×
1244
                                                                value=90-i;
×
1245
                                                                shiftx = 3.0f;
×
1246
                                                                break;
×
1247
                                                        case LONGITUDE:
×
1248
                                                                value=( i<180 ? 90-i : i-270 );
×
1249
                                                                shifty = - static_cast<float>(sPainter.getFontMetrics().height()) * 0.25f;
×
1250
                                                                shiftx = (i<180) ^ southernHemi ? 3.f : -static_cast<float>(sPainter.getFontMetrics().boundingRect(QString("%1°").arg(value)).width()) - 3.f;
×
1251
                                                                extraTextAngle = (i<180) ^ southernHemi ? 0.f : 180.f;
×
1252
                                                                break;
×
1253
                                                        case GALACTICEQUATOR:
×
1254
                                                        case SUPERGALACTICEQUATOR:
1255
                                                                extraTextAngle = 90.f;
×
1256
                                                                break;
×
1257
                                                        default:
×
1258
                                                                extraTextAngle = southernHemi ? -90.f : 90.f;
×
1259
                                                                if (southernHemi) shifty*=-0.25f;
×
1260
                                                                break;
×
1261
                                                }
1262
                                                label = QString("%1%2").arg(value).arg(unit);
×
1263
                                                Vec3d screenPosTgt, screenPosTgtL;
×
1264
                                                prj->project(part30, screenPosTgt);
×
1265
                                                prj->project(part30l, screenPosTgtL);
×
1266
                                                double dx=screenPosTgtL[0]-screenPosTgt[0];
×
1267
                                                double dy=screenPosTgtL[1]-screenPosTgt[1];
×
1268
                                                float textAngle=static_cast<float>(atan2(dy,dx));
×
1269
                                                // Gravity labels look outright terrible here! Disable them.
1270
                                                sPainter.drawText(part30l, label, textAngle*M_180_PIf + extraTextAngle, shiftx, shifty, true);
×
1271
                                        }
×
1272
                                }
1273

1274
                                else if (i%10 == 0 && (viewPortSphericalCap.contains(part0) || viewPortSphericalCap.contains(part10)))
×
1275
                                        sPainter.drawGreatCircleArc(part0, part10, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
1276
                                else if (i%5 == 0 && (viewPortSphericalCap.contains(part0) || viewPortSphericalCap.contains(part5)))
×
1277
                                        sPainter.drawGreatCircleArc(part0, part5, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
1278
                                else if( viewPortSphericalCap.contains(part0) || viewPortSphericalCap.contains(part1))
×
1279
                                        sPainter.drawGreatCircleArc(part0, part1, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
×
1280
                        }
1281
                        part0.transfo4d(rotZ1);
×
1282
                        part1.transfo4d(rotZ1);
×
1283
                        part5.transfo4d(rotZ1);
×
1284
                        part10.transfo4d(rotZ1);
×
1285
                        part30.transfo4d(rotZ1);
×
1286
                        part30l.transfo4d(rotZ1);
×
1287
                }
1288
                sPainter.setLineWidth(lineThickness);
×
1289
        }
1290

1291
        Vec3d p1, p2;
×
1292
        if (line_type==CURRENT_VERTICAL)
×
1293
        {
1294
                // The usual handling should always project this circle into a straight line. However, with some projections we see ugly artifacts. Better handle this line specially.
1295
                p1.set(0.,0.,1.);
×
1296
                p2.set(0.,0.,-1.);
×
1297
                Vec3d pHori;
×
1298
                StelUtils::spheToRect(az, 0., pHori);
×
1299
                if (GETSTELMODULE(StelMovementMgr)->getMountMode()==StelMovementMgr::MountAltAzimuthal)
×
1300
                {
1301
                        switch (core->getCurrentProjectionType())
×
1302
                        {
1303
                                case StelCore::ProjectionOrthographic:
×
1304
                                        StelUtils::spheToRect(az, qMin(M_PI_2, alt+M_PI_2), p1);
×
1305
                                        StelUtils::spheToRect(az, qMax(-M_PI_2, alt-M_PI_2), p2);
×
1306
                                        break;
×
1307
                                case StelCore::ProjectionEqualArea:
×
1308
                                        if (alt*M_180_PI<-89.0) StelUtils::spheToRect(az,  89.5*M_PI_180, p1);
×
1309
                                        if (alt*M_180_PI> 89.0) StelUtils::spheToRect(az, -89.5*M_PI_180, p2);
×
1310
                                        break;
×
1311
                                case StelCore::ProjectionHammer:
×
1312
                                case StelCore::ProjectionSinusoidal:
1313
                                case StelCore::ProjectionMercator:
1314
                                case StelCore::ProjectionMiller:
1315
                                case StelCore::ProjectionCylinder:
1316
                                        StelUtils::spheToRect(az, qMin(M_PI_2, alt+M_PI_2)-0.05*M_PI_180, p1);
×
1317
                                        StelUtils::spheToRect(az, qMax(-M_PI_2, alt-M_PI_2)+0.05*M_PI_180, p2);
×
1318
                                        break;
×
1319
                                default:
×
1320
                                        break;
×
1321
                        }
1322
                }
1323
                // Now draw through a middle point.
1324
                sPainter.drawGreatCircleArc(p1, pHori, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
1325
                sPainter.drawGreatCircleArc(p2, pHori, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
1326
        }
1327
        else
1328
        {
1329
                if (!SphericalCap::intersectionPoints(viewPortSphericalCap, sphericalCap, p1, p2))
×
1330
                {
1331
                        if ((viewPortSphericalCap.d< sphericalCap.d && viewPortSphericalCap.contains( sphericalCap.n))
×
1332
                         || (viewPortSphericalCap.d<-sphericalCap.d && viewPortSphericalCap.contains(-sphericalCap.n)))
×
1333
                        {
1334
                                // The meridian is fully included in the viewport, draw it in 3 sub-arcs to avoid length > 180.
1335
                                const Mat4d& rotLon120 = Mat4d::rotation(sphericalCap.n, 120.*M_PI_180);
×
1336
                                Vec3d rotFpt=fpt;
×
1337
                                rotFpt.transfo4d(rotLon120);
×
1338
                                Vec3d rotFpt2=rotFpt;
×
1339
                                rotFpt2.transfo4d(rotLon120);
×
1340
                                sPainter.drawGreatCircleArc(fpt, rotFpt, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
1341
                                sPainter.drawGreatCircleArc(rotFpt, rotFpt2, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
1342
                                sPainter.drawGreatCircleArc(rotFpt2, fpt, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
1343
                        }
1344
                }
1345
                else
1346
                {
1347
                        Vec3d middlePoint = p1+p2;
×
1348
                        middlePoint.normalize();
×
1349
                        if (!viewPortSphericalCap.contains(middlePoint))
×
1350
                                middlePoint*=-1.;
×
1351

1352
                        // Draw the arc in 2 sub-arcs to avoid lengths > 180 deg
1353
                        sPainter.drawGreatCircleArc(p1, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
1354
                        sPainter.drawGreatCircleArc(p2, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData);
×
1355
                }
1356
        }
1357

1358
        sPainter.setLineWidth(oldLineWidth); // restore line thickness
×
1359
        sPainter.setLineSmooth(false);
×
1360
        sPainter.setBlending(false);
×
1361
}
×
1362

1363
SkyPoint::SkyPoint(SKY_POINT_TYPE _point_type) : point_type(_point_type), color(0.f, 0.f, 1.f)
×
1364
{
1365
        // Font size is 14
1366
        font.setPixelSize(StelApp::getInstance().getScreenFontSize()+1);
×
1367
        texCross = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/cross.png");
×
1368

1369
        earth = GETSTELMODULE(SolarSystem)->getEarth();
×
1370
        sun = GETSTELMODULE(SolarSystem)->getSun();
×
1371

1372
        updateLabel();
×
1373
}
×
1374

1375
SkyPoint::~SkyPoint()
×
1376
{
1377
        texCross.clear();
×
1378
}
×
1379

1380
void SkyPoint::setFontSize(int newFontSize)
×
1381
{
1382
        font.setPixelSize(newFontSize);
×
1383
}
×
1384

1385
void SkyPoint::updateLabel()
×
1386
{
1387
        switch (point_type)
×
1388
        {
1389
                case CELESTIALPOLES_J2000:
×
1390
                {
1391
                        frameType = StelCore::FrameJ2000;
×
1392
                        // TRANSLATORS: North Celestial Pole
1393
                        northernLabel = q_("NCP");
×
1394
                        // TRANSLATORS: South Celestial Pole
1395
                        southernLabel = q_("SCP");
×
1396
                        break;
×
1397
                }
1398
                case CELESTIALPOLES_OF_DATE:
×
1399
                {
1400
                        frameType = StelCore::FrameEquinoxEqu;
×
1401
                        // TRANSLATORS: North Celestial Pole
1402
                        northernLabel = q_("NCP");
×
1403
                        // TRANSLATORS: South Celestial Pole
1404
                        southernLabel = q_("SCP");
×
1405
                        break;
×
1406
                }
1407
                case ZENITH_NADIR:
×
1408
                {
1409
                        frameType = StelCore::FrameAltAz;
×
1410
                        // TRANSLATORS: Zenith
1411
                        northernLabel = qc_("Z", "zenith");
×
1412
                        // TRANSLATORS: Nadir
1413
                        southernLabel = qc_("Z'", "nadir");
×
1414
                        break;
×
1415
                }
1416
                case ECLIPTICPOLES_J2000:
×
1417
                {
1418
                        frameType = StelCore::FrameObservercentricEclipticJ2000;
×
1419
                        // TRANSLATORS: North Ecliptic Pole
1420
                        northernLabel = q_("NEP");
×
1421
                        // TRANSLATORS: South Ecliptic Pole
1422
                        southernLabel = q_("SEP");
×
1423
                        break;
×
1424
                }
1425
                case ECLIPTICPOLES_OF_DATE:
×
1426
                {
1427
                        frameType = StelCore::FrameObservercentricEclipticOfDate;
×
1428
                        // TRANSLATORS: North Ecliptic Pole
1429
                        northernLabel = q_("NEP");
×
1430
                        // TRANSLATORS: South Ecliptic Pole
1431
                        southernLabel = q_("SEP");
×
1432
                        break;
×
1433
                }
1434
                case GALACTICPOLES:
×
1435
                {
1436
                        frameType = StelCore::FrameGalactic;
×
1437
                        // TRANSLATORS: North Galactic Pole
1438
                        northernLabel = q_("NGP");
×
1439
                        // TRANSLATORS: South Galactic Pole
1440
                        southernLabel = q_("SGP");
×
1441
                        break;
×
1442
                }
1443
                case GALACTICCENTER:
×
1444
                {
1445
                        frameType = StelCore::FrameGalactic;
×
1446
                        // TRANSLATORS: Galactic Center point
1447
                        northernLabel = q_("GC");
×
1448
                        // TRANSLATORS: Galactic Anticenter point
1449
                        southernLabel = q_("GA");
×
1450
                        break;
×
1451
                }
1452
                case SUPERGALACTICPOLES:
×
1453
                {
1454
                        frameType = StelCore::FrameSupergalactic;
×
1455
                        // TRANSLATORS: North Supergalactic Pole
1456
                        northernLabel = q_("NSGP");
×
1457
                        // TRANSLATORS: South Supergalactic Pole
1458
                        southernLabel = q_("SSGP");
×
1459
                        break;
×
1460
                }
1461
                case EQUINOXES_J2000:
×
1462
                {
1463
                        frameType = StelCore::FrameJ2000;
×
1464
                        northernLabel = QChar(0x2648); // Vernal equinox
×
1465
                        southernLabel = QChar(0x264E); // Autumnal equinox
×
1466
                        break;
×
1467
                }
1468
                case EQUINOXES_OF_DATE:
×
1469
                {
1470
                        frameType = StelCore::FrameEquinoxEqu;
×
1471
                        northernLabel = QChar(0x2648); // Vernal equinox
×
1472
                        southernLabel = QChar(0x264E); // Autumnal equinox
×
1473
                        break;
×
1474
                }
1475
                case SOLSTICES_J2000:
×
1476
                {
1477
                        frameType = StelCore::FrameObservercentricEclipticJ2000;
×
1478
                        northernLabel = QChar(0x264B); // Summer solstice
×
1479
                        southernLabel = QChar(0x2651); // Winter solstice
×
1480
                        break;
×
1481
                }
1482
                case SOLSTICES_OF_DATE:
×
1483
                {
1484
                        frameType = StelCore::FrameObservercentricEclipticOfDate;
×
1485
                        northernLabel = QChar(0x264B); // Summer solstice
×
1486
                        southernLabel = QChar(0x2651); // Winter solstice
×
1487
                        break;
×
1488
                }
1489
                case ANTISOLAR:
×
1490
                {
1491
                        frameType = StelCore::FrameObservercentricEclipticJ2000;
×
1492
                        // TRANSLATORS: Antisolar Point
1493
                        northernLabel = q_("ASP");
×
1494
                        break;
×
1495
                }
1496
                case EARTH_UMBRA_CENTER:
×
1497
                {
1498
                        frameType = StelCore::FrameHeliocentricEclipticJ2000;
×
1499
                        // TRANSLATORS: Center of the umbra
1500
                        northernLabel = q_("C.U.");
×
1501
                        break;
×
1502
                }
1503
                case APEX:
×
1504
                {
1505
                        frameType = StelCore::FrameObservercentricEclipticJ2000;
×
1506
                        // TRANSLATORS: Apex Point, where the observer planet is heading to
1507
                        northernLabel = q_("Apex");
×
1508
                        // TRANSLATORS: Antapex Point, where the observer planet is receding from
1509
                        southernLabel = q_("Antapex");
×
1510
                        // add heliocentric speed
1511
                        StelCore *core=StelApp::getInstance().getCore();
×
1512
                        QSharedPointer<Planet> planet=core->getCurrentObserver()->getHomePlanet();
×
1513
                        Q_ASSERT(planet);
×
1514
                        const Vec3d dir=planet->getHeliocentricEclipticVelocity();
×
1515
                        const double speed=dir.norm()*(AU/86400.0);
×
1516
                        // In some cases we don't have a valid speed vector
1517
                        if (speed>0.)
×
1518
                        {
1519
                                const QString kms = qc_("km/s", "speed");
×
1520
                                QString speedStr = QString(" (%1 %2)").arg(QString::number(speed, 'f', 2), kms);
×
1521
                                northernLabel += speedStr;
×
1522
                                speedStr = QString(" (-%1 %2)").arg(QString::number(speed, 'f', 2), kms);
×
1523
                                southernLabel += speedStr;
×
1524
                        }
×
1525
                        break;
×
1526
                }                
×
1527
                default:
×
1528
                        Q_ASSERT(0);
×
1529
        }
1530
}
×
1531

1532
void SkyPoint::draw(StelCore *core) const
×
1533
{
1534
        if (!fader.getInterstate())
×
1535
                return;
×
1536

1537
        StelProjectorP prj = core->getProjection(frameType, frameType!=StelCore::FrameAltAz ? StelCore::RefractionAuto : StelCore::RefractionOff);
×
1538

1539
        // Initialize a painter and set openGL state
1540
        StelPainter sPainter(prj);
×
1541
        sPainter.setColor(color, fader.getInterstate());
×
1542
        Vec4f textColor(color, fader.getInterstate());
×
1543

1544
        sPainter.setFont(font);
×
1545
        /////////////////////////////////////////////////
1546
        // Draw the point
1547

1548
        texCross->bind();
×
1549
        const float size = 0.00001f*M_PI_180f*sPainter.getProjector()->getPixelPerRadAtCenter();
×
1550
        const float shift = 4.f + size/1.8f;
×
1551

1552
        sPainter.setBlending(true, GL_ONE, GL_ONE);
×
1553

1554
        switch (point_type)
×
1555
        {
1556
                case CELESTIALPOLES_J2000:
×
1557
                case CELESTIALPOLES_OF_DATE:
1558
                case ZENITH_NADIR:
1559
                case ECLIPTICPOLES_J2000:
1560
                case ECLIPTICPOLES_OF_DATE:
1561
                case GALACTICPOLES:                
1562
                case SUPERGALACTICPOLES:
1563
                {
1564
                        // North Pole
1565
                        sPainter.drawSprite2dMode(Vec3d(0,0,1), 5.f);
×
1566
                        sPainter.drawText(Vec3d(0,0,1), northernLabel, 0, shift, shift, false);
×
1567

1568
                        // South Pole
1569
                        sPainter.drawSprite2dMode(Vec3d(0,0,-1), 5.f);
×
1570
                        sPainter.drawText(Vec3d(0,0,-1), southernLabel, 0, shift, shift, false);
×
1571
                        break;
×
1572
                }
1573
                case EQUINOXES_J2000:
×
1574
                case EQUINOXES_OF_DATE:
1575
                {
1576
                        // Vernal equinox
1577
                        sPainter.drawSprite2dMode(Vec3d(1,0,0), 5.f);
×
1578
                        sPainter.drawText(Vec3d(1,0,0), northernLabel, 0, shift, shift, false);
×
1579

1580
                        // Autumnal equinox
1581
                        sPainter.drawSprite2dMode(Vec3d(-1,0,0), 5.f);
×
1582
                        sPainter.drawText(Vec3d(-1,0,0), southernLabel, 0, shift, shift, false);
×
1583
                        break;
×
1584
                }
1585
                case SOLSTICES_J2000:
×
1586
                case SOLSTICES_OF_DATE:
1587
                {
1588
                        // Summer solstice
1589
                        sPainter.drawSprite2dMode(Vec3d(0,1,0), 5.f);
×
1590
                        sPainter.drawText(Vec3d(0,1,0), northernLabel, 0, shift, shift, false);
×
1591

1592
                        // Winter solstice
1593
                        sPainter.drawSprite2dMode(Vec3d(0,-1,0), 5.f);
×
1594
                        sPainter.drawText(Vec3d(0,-1,0), southernLabel, 0, shift, shift, false);
×
1595
                        break;
×
1596
                }
1597
                case GALACTICCENTER:
×
1598
                {
1599
                        // Galactic Center point
1600
                        sPainter.drawSprite2dMode(Vec3d(1,0,0), 5.f);
×
1601
                        sPainter.drawText(Vec3d(1,0,0), northernLabel, 0, shift, shift, false);
×
1602

1603
                        // Galactic Anticenter point
1604
                        sPainter.drawSprite2dMode(Vec3d(-1,0,0), 5.f);
×
1605
                        sPainter.drawText(Vec3d(-1,0,0), southernLabel, 0, shift, shift, false);
×
1606
                        break;
×
1607
                }
1608
                case ANTISOLAR:
×
1609
                {
1610
                        // Antisolar Point
1611
                        Vec3d coord=core->getCurrentObserver()->getHomePlanet()->getHeliocentricEclipticPos();
×
1612
                        sPainter.drawSprite2dMode(coord, 5.f);
×
1613
                        sPainter.drawText(coord, northernLabel, 0, shift, shift, false);
×
1614
                        break;
×
1615
                }
1616
                case EARTH_UMBRA_CENTER:
×
1617
                {
1618
                        // We compute the shadow center attached to the geocenter, but must point it in the opposite direction of the sun's aberrated position.
1619
                        const Vec3d pos=earth->getEclipticPos();
×
1620
                        const Vec3d dir= - sun->getAberrationPush() + pos;
×
1621
                        double lambda, beta;
1622
                        StelUtils::rectToSphe(&lambda, &beta, dir);
×
1623
                        const double dist=GETSTELMODULE(SolarSystem)->getMoon()->getEclipticPos().norm();
×
1624
                        const Mat4d rot=Mat4d::zrotation(lambda)*Mat4d::yrotation(-beta);
×
1625

1626
                        Vec3d point(dist, 0.0, 0.0);
×
1627
                        rot.transfo(point);
×
1628
                        Vec3d coord = pos+point;
×
1629
                        sPainter.drawSprite2dMode(coord, 5.f);
×
1630
                        sPainter.drawText(coord, northernLabel, 0, shift, shift, false);
×
1631
                        break;
×
1632
                }
1633
                case APEX:
×
1634
                {
1635
                        // Observer planet apex (heading point)
1636
                        QSharedPointer<Planet> planet=core->getCurrentObserver()->getHomePlanet();
×
1637
                        Q_ASSERT(planet);
×
1638
                        const Vec3d dir=planet->getHeliocentricEclipticVelocity();
×
1639
                        // In some cases we don't have a valid speed vector
1640
                        if (dir.normSquared()>0.)
×
1641
                        {
1642
                                sPainter.drawSprite2dMode(dir, 5.f);
×
1643
                                sPainter.drawText(dir, northernLabel, 0, shift, shift, false);
×
1644
                                sPainter.drawSprite2dMode(-dir, 5.f);
×
1645
                                sPainter.drawText(-dir, southernLabel, 0, shift, shift, false);
×
1646
                        }
1647
                        break;
×
1648
                }                
×
1649
                default:
×
1650
                        Q_ASSERT(0);
×
1651
        }
1652
}
×
1653

1654

1655
GridLinesMgr::GridLinesMgr()
×
1656
        : gridlinesDisplayed(true)
×
1657
{
1658
        setObjectName("GridLinesMgr");
×
1659
        SkyLine::init();
×
1660

1661
        equGrid = new SkyGrid(StelCore::FrameEquinoxEqu);
×
1662
        fixedEquatorialGrid = new SkyGrid(StelCore::FrameFixedEquatorial);
×
1663
        equJ2000Grid = new SkyGrid(StelCore::FrameJ2000);
×
1664
        eclJ2000Grid = new SkyGrid(StelCore::FrameObservercentricEclipticJ2000);
×
1665
        eclGrid = new SkyGrid(StelCore::FrameObservercentricEclipticOfDate);
×
1666
        galacticGrid = new SkyGrid(StelCore::FrameGalactic);
×
1667
        supergalacticGrid = new SkyGrid(StelCore::FrameSupergalactic);
×
1668
        aziGrid = new SkyGrid(StelCore::FrameAltAz);
×
1669
        equatorLine = new SkyLine(SkyLine::EQUATOR_OF_DATE);
×
1670
        equatorJ2000Line = new SkyLine(SkyLine::EQUATOR_J2000);
×
1671
        fixedEquatorLine = new SkyLine(SkyLine::FIXED_EQUATOR);
×
1672
        eclipticJ2000Line = new SkyLine(SkyLine::ECLIPTIC_J2000);
×
1673
        eclipticLine = new SkyLine(SkyLine::ECLIPTIC_OF_DATE);
×
1674
        invariablePlaneLine = new SkyLine(SkyLine::INVARIABLEPLANE);
×
1675
        solarEquatorLine = new SkyLine(SkyLine::SOLAR_EQUATOR);
×
1676
        precessionCircleN = new SkyLine(SkyLine::PRECESSIONCIRCLE_N);
×
1677
        precessionCircleS = new SkyLine(SkyLine::PRECESSIONCIRCLE_S);
×
1678
        meridianLine = new SkyLine(SkyLine::MERIDIAN);
×
1679
        horizonLine = new SkyLine(SkyLine::HORIZON);
×
1680
        galacticEquatorLine = new SkyLine(SkyLine::GALACTICEQUATOR);
×
1681
        supergalacticEquatorLine = new SkyLine(SkyLine::SUPERGALACTICEQUATOR);
×
1682
        longitudeLine = new SkyLine(SkyLine::LONGITUDE);
×
1683
        quadratureLine = new SkyLine(SkyLine::QUADRATURE);
×
1684
        primeVerticalLine = new SkyLine(SkyLine::PRIME_VERTICAL);
×
1685
        currentVerticalLine = new SkyLine(SkyLine::CURRENT_VERTICAL);
×
1686
        colureLine_1 = new SkyLine(SkyLine::COLURE_1);
×
1687
        colureLine_2 = new SkyLine(SkyLine::COLURE_2);
×
1688
        circumpolarCircleN = new SkyLine(SkyLine::CIRCUMPOLARCIRCLE_N);
×
1689
        circumpolarCircleS = new SkyLine(SkyLine::CIRCUMPOLARCIRCLE_S);
×
1690
        umbraCircle = new SkyLine(SkyLine::EARTH_UMBRA);
×
1691
        penumbraCircle = new SkyLine(SkyLine::EARTH_PENUMBRA);
×
1692
        celestialJ2000Poles = new SkyPoint(SkyPoint::CELESTIALPOLES_J2000);
×
1693
        celestialPoles = new SkyPoint(SkyPoint::CELESTIALPOLES_OF_DATE);
×
1694
        zenithNadir = new SkyPoint(SkyPoint::ZENITH_NADIR);
×
1695
        eclipticJ2000Poles = new SkyPoint(SkyPoint::ECLIPTICPOLES_J2000);
×
1696
        eclipticPoles = new SkyPoint(SkyPoint::ECLIPTICPOLES_OF_DATE);
×
1697
        galacticPoles = new SkyPoint(SkyPoint::GALACTICPOLES);
×
1698
        galacticCenter = new SkyPoint(SkyPoint::GALACTICCENTER);
×
1699
        supergalacticPoles = new SkyPoint(SkyPoint::SUPERGALACTICPOLES);
×
1700
        equinoxJ2000Points = new SkyPoint(SkyPoint::EQUINOXES_J2000);
×
1701
        equinoxPoints = new SkyPoint(SkyPoint::EQUINOXES_OF_DATE);
×
1702
        solsticeJ2000Points = new SkyPoint(SkyPoint::SOLSTICES_J2000);
×
1703
        solsticePoints = new SkyPoint(SkyPoint::SOLSTICES_OF_DATE);
×
1704
        antisolarPoint = new SkyPoint(SkyPoint::ANTISOLAR);
×
1705
        umbraCenterPoint = new SkyPoint(SkyPoint::EARTH_UMBRA_CENTER);
×
1706
        apexPoints = new SkyPoint(SkyPoint::APEX);        
×
1707

1708
        earth = GETSTELMODULE(SolarSystem)->getEarth();
×
1709
        connect(GETSTELMODULE(SolarSystem), SIGNAL(solarSystemDataReloaded()), this, SLOT(connectSolarSystem()));
×
1710
}
×
1711

1712
GridLinesMgr::~GridLinesMgr()
×
1713
{
1714
        delete equGrid;
×
1715
        delete fixedEquatorialGrid;
×
1716
        delete equJ2000Grid;
×
1717
        delete eclJ2000Grid;
×
1718
        delete eclGrid;
×
1719
        delete galacticGrid;
×
1720
        delete supergalacticGrid;
×
1721
        delete aziGrid;
×
1722
        delete equatorLine;
×
1723
        delete equatorJ2000Line;
×
1724
        delete fixedEquatorLine;
×
1725
        delete eclipticLine;
×
1726
        delete eclipticJ2000Line;
×
1727
        delete invariablePlaneLine;
×
1728
        delete solarEquatorLine;
×
1729
        delete precessionCircleN;
×
1730
        delete precessionCircleS;
×
1731
        delete meridianLine;
×
1732
        delete horizonLine;
×
1733
        delete galacticEquatorLine;
×
1734
        delete supergalacticEquatorLine;
×
1735
        delete longitudeLine;
×
1736
        delete quadratureLine;
×
1737
        delete primeVerticalLine;
×
1738
        delete currentVerticalLine;
×
1739
        delete colureLine_1;
×
1740
        delete colureLine_2;
×
1741
        delete circumpolarCircleN;
×
1742
        delete circumpolarCircleS;
×
1743
        delete umbraCircle;
×
1744
        delete penumbraCircle;
×
1745
        delete celestialJ2000Poles;
×
1746
        delete celestialPoles;
×
1747
        delete zenithNadir;
×
1748
        delete eclipticJ2000Poles;
×
1749
        delete eclipticPoles;
×
1750
        delete galacticPoles;
×
1751
        delete galacticCenter;
×
1752
        delete supergalacticPoles;
×
1753
        delete equinoxJ2000Points;
×
1754
        delete equinoxPoints;
×
1755
        delete solsticeJ2000Points;
×
1756
        delete solsticePoints;
×
1757
        delete antisolarPoint;
×
1758
        delete umbraCenterPoint;
×
1759
        delete apexPoints;        
×
1760
        SkyLine::deinit();
×
1761
}
×
1762

1763
/*************************************************************************
1764
 Reimplementation of the getCallOrder method
1765
*************************************************************************/
1766
double GridLinesMgr::getCallOrder(StelModuleActionName actionName) const
×
1767
{
1768
        if (actionName==StelModule::ActionDraw)
×
1769
                return StelApp::getInstance().getModuleMgr().getModule("NebulaMgr")->getCallOrder(actionName)+10.;
×
1770
        return 0.;
×
1771
}
1772

1773
void GridLinesMgr::init()
×
1774
{
1775
        QSettings* conf = StelApp::getInstance().getSettings();
×
1776
        Q_ASSERT(conf);
×
1777

1778
        // Upgrade config keys
1779
        if (conf->contains("color/longitude_color"))
×
1780
        {
1781
                conf->setValue("color/oc_longitude_color", conf->value("color/longitude_color", "0.2,0.4,0.4").toString());
×
1782
                conf->remove("color/longitude_color");
×
1783
        }
1784

1785
        setFlagGridlines(conf->value("viewing/flag_gridlines", true).toBool());
×
1786
        setFlagAzimuthalGrid(conf->value("viewing/flag_azimuthal_grid").toBool());
×
1787
        setFlagEquatorGrid(conf->value("viewing/flag_equatorial_grid").toBool());
×
1788
        setFlagFixedEquatorGrid(conf->value("viewing/flag_fixed_equatorial_grid").toBool());
×
1789
        setFlagEquatorJ2000Grid(conf->value("viewing/flag_equatorial_J2000_grid").toBool());
×
1790
        setFlagEclipticJ2000Grid(conf->value("viewing/flag_ecliptic_J2000_grid").toBool());
×
1791
        setFlagEclipticGrid(conf->value("viewing/flag_ecliptic_grid").toBool());
×
1792
        setFlagGalacticGrid(conf->value("viewing/flag_galactic_grid").toBool());
×
1793
        setFlagSupergalacticGrid(conf->value("viewing/flag_supergalactic_grid").toBool());
×
1794
        setFlagEquatorLine(conf->value("viewing/flag_equator_line").toBool());
×
1795
        setFlagEquatorParts(conf->value("viewing/flag_equator_parts").toBool());
×
1796
        setFlagEquatorLabeled(conf->value("viewing/flag_equator_labels").toBool());
×
1797
        setFlagEquatorJ2000Line(conf->value("viewing/flag_equator_J2000_line").toBool());
×
1798
        setFlagEquatorJ2000Parts(conf->value("viewing/flag_equator_J2000_parts").toBool());
×
1799
        setFlagEquatorJ2000Labeled(conf->value("viewing/flag_equator_J2000_labels").toBool());
×
1800
        setFlagFixedEquatorLine(conf->value("viewing/flag_fixed_equator_line").toBool());
×
1801
        setFlagFixedEquatorParts(conf->value("viewing/flag_fixed_equator_parts").toBool());
×
1802
        setFlagFixedEquatorLabeled(conf->value("viewing/flag_fixed_equator_labels").toBool());
×
1803
        setFlagEclipticLine(conf->value("viewing/flag_ecliptic_line").toBool());
×
1804
        setFlagEclipticParts(conf->value("viewing/flag_ecliptic_parts").toBool());
×
1805
        setFlagEclipticLabeled(conf->value("viewing/flag_ecliptic_labels").toBool());
×
1806
        setFlagEclipticJ2000Line(conf->value("viewing/flag_ecliptic_J2000_line").toBool());
×
1807
        setFlagEclipticJ2000Parts(conf->value("viewing/flag_ecliptic_J2000_parts").toBool());
×
1808
        setFlagEclipticJ2000Labeled(conf->value("viewing/flag_ecliptic_J2000_labels").toBool());        
×
1809
        setFlagInvariablePlaneLine(conf->value("viewing/flag_invariable_plane_line").toBool());
×
1810
        setFlagSolarEquatorLine(conf->value("viewing/flag_solar_equator_line").toBool());
×
1811
        setFlagSolarEquatorParts(conf->value("viewing/flag_solar_equator_parts").toBool());
×
1812
        setFlagSolarEquatorLabeled(conf->value("viewing/flag_solar_equator_labels").toBool());
×
1813
        setFlagPrecessionCircles(conf->value("viewing/flag_precession_circles").toBool());
×
1814
        setFlagPrecessionParts(conf->value("viewing/flag_precession_parts").toBool());
×
1815
        setFlagPrecessionLabeled(conf->value("viewing/flag_precession_labels").toBool());
×
1816
        setFlagMeridianLine(conf->value("viewing/flag_meridian_line").toBool());
×
1817
        setFlagMeridianParts(conf->value("viewing/flag_meridian_parts").toBool());
×
1818
        setFlagMeridianLabeled(conf->value("viewing/flag_meridian_labels").toBool());
×
1819
        setFlagHorizonLine(conf->value("viewing/flag_horizon_line").toBool());
×
1820
        setFlagHorizonParts(conf->value("viewing/flag_horizon_parts").toBool());
×
1821
        setFlagHorizonLabeled(conf->value("viewing/flag_horizon_labels").toBool());
×
1822
        setFlagGalacticEquatorLine(conf->value("viewing/flag_galactic_equator_line").toBool());
×
1823
        setFlagGalacticEquatorParts(conf->value("viewing/flag_galactic_equator_parts").toBool());
×
1824
        setFlagGalacticEquatorLabeled(conf->value("viewing/flag_galactic_equator_labels").toBool());
×
1825
        setFlagSupergalacticEquatorLine(conf->value("viewing/flag_supergalactic_equator_line").toBool());
×
1826
        setFlagSupergalacticEquatorParts(conf->value("viewing/flag_supergalactic_equator_parts").toBool());
×
1827
        setFlagSupergalacticEquatorLabeled(conf->value("viewing/flag_supergalactic_equator_labels").toBool());
×
1828
        setFlagLongitudeLine(conf->value("viewing/flag_longitude_line").toBool());
×
1829
        setFlagLongitudeParts(conf->value("viewing/flag_longitude_parts").toBool());
×
1830
        setFlagLongitudeLabeled(conf->value("viewing/flag_longitude_labels").toBool());
×
1831
        setFlagQuadratureLine(conf->value("viewing/flag_quadrature_line").toBool());
×
1832
        setFlagPrimeVerticalLine(conf->value("viewing/flag_prime_vertical_line").toBool());
×
1833
        setFlagPrimeVerticalParts(conf->value("viewing/flag_prime_vertical_parts").toBool());
×
1834
        setFlagPrimeVerticalLabeled(conf->value("viewing/flag_prime_vertical_labels").toBool());
×
1835
        setFlagCurrentVerticalLine(conf->value("viewing/flag_current_vertical_line").toBool());
×
1836
        setFlagCurrentVerticalParts(conf->value("viewing/flag_current_vertical_parts").toBool());
×
1837
        setFlagCurrentVerticalLabeled(conf->value("viewing/flag_current_vertical_labels").toBool());
×
1838
        setFlagColureLines(conf->value("viewing/flag_colure_lines").toBool());
×
1839
        setFlagColureParts(conf->value("viewing/flag_colure_parts").toBool());
×
1840
        setFlagColureLabeled(conf->value("viewing/flag_colure_labels").toBool());
×
1841
        setFlagCircumpolarCircles(conf->value("viewing/flag_circumpolar_circles").toBool());
×
1842
        setFlagUmbraCircle(conf->value("viewing/flag_umbra_circle").toBool());
×
1843
        setFlagPenumbraCircle(conf->value("viewing/flag_penumbra_circle").toBool());
×
1844
        setFlagCelestialJ2000Poles(conf->value("viewing/flag_celestial_J2000_poles").toBool());
×
1845
        setFlagCelestialPoles(conf->value("viewing/flag_celestial_poles").toBool());
×
1846
        setFlagZenithNadir(conf->value("viewing/flag_zenith_nadir").toBool());
×
1847
        setFlagEclipticJ2000Poles(conf->value("viewing/flag_ecliptic_J2000_poles").toBool());
×
1848
        setFlagEclipticPoles(conf->value("viewing/flag_ecliptic_poles").toBool());
×
1849
        setFlagGalacticPoles(conf->value("viewing/flag_galactic_poles").toBool());
×
1850
        setFlagGalacticCenter(conf->value("viewing/flag_galactic_center").toBool());
×
1851
        setFlagSupergalacticPoles(conf->value("viewing/flag_supergalactic_poles").toBool());
×
1852
        setFlagEquinoxJ2000Points(conf->value("viewing/flag_equinox_J2000_points").toBool());
×
1853
        setFlagEquinoxPoints(conf->value("viewing/flag_equinox_points").toBool());
×
1854
        setFlagSolsticeJ2000Points(conf->value("viewing/flag_solstice_J2000_points").toBool());
×
1855
        setFlagSolsticePoints(conf->value("viewing/flag_solstice_points").toBool());
×
1856
        setFlagAntisolarPoint(conf->value("viewing/flag_antisolar_point").toBool());
×
1857
        setFlagUmbraCenterPoint(conf->value("viewing/flag_umbra_center_point").toBool());
×
1858
        setFlagApexPoints(conf->value("viewing/flag_apex_points").toBool());
×
1859

1860
        // Set the line thickness for grids and lines
1861
        setLineThickness(conf->value("viewing/line_thickness", 1.f).toFloat());
×
1862
        setPartThickness(conf->value("viewing/part_thickness", 1.f).toFloat());
×
1863

1864
        // Load colors from config file
1865
        QString defaultColor = conf->value("color/default_color", "0.5,0.5,0.7").toString();
×
1866
        setColorEquatorGrid(             Vec3f(conf->value("color/equatorial_color", defaultColor).toString()));
×
1867
        setColorFixedEquatorGrid(        Vec3f(conf->value("color/fixed_equatorial_color", defaultColor).toString()));
×
1868
        setColorEquatorJ2000Grid(        Vec3f(conf->value("color/equatorial_J2000_color", defaultColor).toString()));
×
1869
        setColorEclipticJ2000Grid(       Vec3f(conf->value("color/ecliptical_J2000_color", defaultColor).toString()));
×
1870
        setColorEclipticGrid(            Vec3f(conf->value("color/ecliptical_color", defaultColor).toString()));
×
1871
        setColorGalacticGrid(            Vec3f(conf->value("color/galactic_color", defaultColor).toString()));
×
1872
        setColorSupergalacticGrid(       Vec3f(conf->value("color/supergalactic_color", defaultColor).toString()));
×
1873
        setColorAzimuthalGrid(           Vec3f(conf->value("color/azimuthal_color", defaultColor).toString()));
×
1874
        setColorEquatorLine(             Vec3f(conf->value("color/equator_color", defaultColor).toString()));
×
1875
        setColorEquatorJ2000Line(        Vec3f(conf->value("color/equator_J2000_color", defaultColor).toString()));
×
1876
        setColorFixedEquatorLine(        Vec3f(conf->value("color/fixed_equator_color", defaultColor).toString()));
×
1877
        setColorEclipticLine(            Vec3f(conf->value("color/ecliptic_color", defaultColor).toString()));
×
1878
        setColorEclipticJ2000Line(       Vec3f(conf->value("color/ecliptic_J2000_color", defaultColor).toString()));
×
1879
        setColorInvariablePlaneLine(     Vec3f(conf->value("color/invariable_plane_color", defaultColor).toString()));
×
1880
        setColorSolarEquatorLine(        Vec3f(conf->value("color/solar_equator_color", defaultColor).toString()));
×
1881
        setColorPrecessionCircles(       Vec3f(conf->value("color/precession_circles_color", defaultColor).toString()));
×
1882
        setColorMeridianLine(            Vec3f(conf->value("color/meridian_color", defaultColor).toString()));
×
1883
        setColorHorizonLine(             Vec3f(conf->value("color/horizon_color", defaultColor).toString()));
×
1884
        setColorGalacticEquatorLine(     Vec3f(conf->value("color/galactic_equator_color", defaultColor).toString()));
×
1885
        setColorSupergalacticEquatorLine(Vec3f(conf->value("color/supergalactic_equator_color", defaultColor).toString()));
×
1886
        setColorLongitudeLine(                 Vec3f(conf->value("color/oc_longitude_color", defaultColor).toString()));
×
1887
        setColorQuadratureLine(                 Vec3f(conf->value("color/quadrature_color", defaultColor).toString()));
×
1888
        setColorPrimeVerticalLine(       Vec3f(conf->value("color/prime_vertical_color", defaultColor).toString()));
×
1889
        setColorCurrentVerticalLine(     Vec3f(conf->value("color/current_vertical_color", defaultColor).toString()));
×
1890
        setColorColureLines(             Vec3f(conf->value("color/colures_color", defaultColor).toString()));
×
1891
        setColorCircumpolarCircles(      Vec3f(conf->value("color/circumpolar_circles_color", defaultColor).toString()));
×
1892
        setColorUmbraCircle(                 Vec3f(conf->value("color/umbra_circle_color", defaultColor).toString()));
×
1893
        setColorPenumbraCircle(                 Vec3f(conf->value("color/penumbra_circle_color", defaultColor).toString()));
×
1894
        setColorCelestialJ2000Poles(     Vec3f(conf->value("color/celestial_J2000_poles_color", defaultColor).toString()));
×
1895
        setColorCelestialPoles(          Vec3f(conf->value("color/celestial_poles_color", defaultColor).toString()));
×
1896
        setColorZenithNadir(             Vec3f(conf->value("color/zenith_nadir_color", defaultColor).toString()));
×
1897
        setColorEclipticJ2000Poles(      Vec3f(conf->value("color/ecliptic_J2000_poles_color", defaultColor).toString()));
×
1898
        setColorEclipticPoles(           Vec3f(conf->value("color/ecliptic_poles_color", defaultColor).toString()));
×
1899
        setColorGalacticPoles(           Vec3f(conf->value("color/galactic_poles_color", defaultColor).toString()));
×
1900
        setColorGalacticCenter(          Vec3f(conf->value("color/galactic_center_color", defaultColor).toString()));
×
1901
        setColorSupergalacticPoles(      Vec3f(conf->value("color/supergalactic_poles_color", defaultColor).toString()));
×
1902
        setColorEquinoxJ2000Points(      Vec3f(conf->value("color/equinox_J2000_points_color", defaultColor).toString()));
×
1903
        setColorEquinoxPoints(           Vec3f(conf->value("color/equinox_points_color", defaultColor).toString()));
×
1904
        setColorSolsticeJ2000Points(     Vec3f(conf->value("color/solstice_J2000_points_color", defaultColor).toString()));
×
1905
        setColorSolsticePoints(          Vec3f(conf->value("color/solstice_points_color", defaultColor).toString()));
×
1906
        setColorAntisolarPoint(          Vec3f(conf->value("color/antisolar_point_color", defaultColor).toString()));
×
1907
        setColorApexPoints(              Vec3f(conf->value("color/apex_points_color", defaultColor).toString()));
×
1908

1909
        StelApp& app = StelApp::getInstance();
×
1910
        connect(&app, SIGNAL(languageChanged()), this, SLOT(updateLabels()));
×
1911
        connect(&app, SIGNAL(screenFontSizeChanged(int)), this, SLOT(setFontSizeFromApp(int)));
×
1912
        
1913
        QString displayGroup = N_("Display Options");
×
1914
        addAction("actionShow_Gridlines",                  displayGroup, N_("Grids and lines"), "gridlinesDisplayed");
×
1915
        addAction("actionShow_Equatorial_Grid",            displayGroup, N_("Equatorial grid"), "equatorGridDisplayed", "E");
×
1916
        addAction("actionShow_Fixed_Equatorial_Grid",      displayGroup, N_("Fixed Equatorial grid"), "fixedEquatorGridDisplayed");
×
1917
        addAction("actionShow_Azimuthal_Grid",             displayGroup, N_("Azimuthal grid"), "azimuthalGridDisplayed", "Z");
×
1918
        addAction("actionShow_Ecliptic_Line",              displayGroup, N_("Ecliptic line"), "eclipticLineDisplayed", ",");
×
1919
        addAction("actionShow_Ecliptic_J2000_Line",        displayGroup, N_("Ecliptic J2000 line"), "eclipticJ2000LineDisplayed");
×
1920
        addAction("actionShow_Invariable_Plane_Line",      displayGroup, N_("Invariable Plane line"), "invariablePlaneLineDisplayed");
×
1921
        addAction("actionShow_Solar_Equator_Line",         displayGroup, N_("Solar Equator Plane line"), "solarEquatorLineDisplayed");
×
1922
        addAction("actionShow_Equator_Line",               displayGroup, N_("Equator line"), "equatorLineDisplayed", ".");
×
1923
        addAction("actionShow_Equator_J2000_Line",         displayGroup, N_("Equator J2000 line"), "equatorJ2000LineDisplayed"); // or with Hotkey??
×
1924
        addAction("actionShow_Fixed_Equator_Line",         displayGroup, N_("Fixed Equator line"), "fixedEquatorLineDisplayed");
×
1925
        addAction("actionShow_Meridian_Line",              displayGroup, N_("Meridian line"), "meridianLineDisplayed", ";");
×
1926
        addAction("actionShow_Horizon_Line",               displayGroup, N_("Horizon line"), "horizonLineDisplayed", "H");
×
1927
        addAction("actionShow_Equatorial_J2000_Grid",      displayGroup, N_("Equatorial J2000 grid"), "equatorJ2000GridDisplayed");
×
1928
        addAction("actionShow_Ecliptic_J2000_Grid",        displayGroup, N_("Ecliptic J2000 grid"), "eclipticJ2000GridDisplayed");
×
1929
        addAction("actionShow_Ecliptic_Grid",              displayGroup, N_("Ecliptic grid"), "eclipticGridDisplayed");
×
1930
        addAction("actionShow_Galactic_Grid",              displayGroup, N_("Galactic grid"), "galacticGridDisplayed");
×
1931
        addAction("actionShow_Galactic_Equator_Line",      displayGroup, N_("Galactic equator"), "galacticEquatorLineDisplayed");
×
1932
        addAction("actionShow_Supergalactic_Grid",         displayGroup, N_("Supergalactic grid"), "supergalacticGridDisplayed");
×
1933
        addAction("actionShow_Supergalactic_Equator_Line", displayGroup, N_("Supergalactic equator"), "supergalacticEquatorLineDisplayed");
×
1934
        addAction("actionShow_Longitude_Line",             displayGroup, N_("Opposition/conjunction longitude line"), "longitudeLineDisplayed");
×
1935
        addAction("actionShow_Quadrature_Line",            displayGroup, N_("Quadrature line"), "quadratureLineDisplayed");
×
1936
        addAction("actionShow_Precession_Circles",         displayGroup, N_("Precession Circles"), "precessionCirclesDisplayed");
×
1937
        addAction("actionShow_Prime_Vertical_Line",        displayGroup, N_("Prime Vertical"), "primeVerticalLineDisplayed");
×
1938
        addAction("actionShow_Current_Vertical_Line",      displayGroup, N_("Current Vertical"), "currentVerticalLineDisplayed");
×
1939
        addAction("actionShow_Colure_Lines",               displayGroup, N_("Colure Lines"), "colureLinesDisplayed");
×
1940
        addAction("actionShow_Circumpolar_Circles",        displayGroup, N_("Circumpolar Circles"), "circumpolarCirclesDisplayed");
×
1941
        addAction("actionShow_Umbra_Circle",               displayGroup, N_("Umbra Circle"), "umbraCircleDisplayed");
×
1942
        addAction("actionShow_Penumbra_Circle",            displayGroup, N_("Penumbra Circle"), "penumbraCircleDisplayed");
×
1943
        addAction("actionShow_Celestial_J2000_Poles",      displayGroup, N_("Celestial J2000 poles"), "celestialJ2000PolesDisplayed");
×
1944
        addAction("actionShow_Celestial_Poles",            displayGroup, N_("Celestial poles"), "celestialPolesDisplayed");
×
1945
        addAction("actionShow_Zenith_Nadir",               displayGroup, N_("Zenith and nadir"), "zenithNadirDisplayed");
×
1946
        addAction("actionShow_Ecliptic_J2000_Poles",       displayGroup, N_("Ecliptic J2000 poles"), "eclipticJ2000PolesDisplayed");
×
1947
        addAction("actionShow_Ecliptic_Poles",             displayGroup, N_("Ecliptic poles"), "eclipticPolesDisplayed");
×
1948
        addAction("actionShow_Galactic_Poles",             displayGroup, N_("Galactic poles"), "galacticPolesDisplayed");
×
1949
        addAction("actionShow_Galactic_Center",            displayGroup, N_("Galactic center and anticenter"), "galacticCenterDisplayed");
×
1950
        addAction("actionShow_Supergalactic_Poles",        displayGroup, N_("Supergalactic poles"), "supergalacticPolesDisplayed");
×
1951
        addAction("actionShow_Equinox_J2000_Points",       displayGroup, N_("Equinox J2000 points"), "equinoxJ2000PointsDisplayed");
×
1952
        addAction("actionShow_Equinox_Points",             displayGroup, N_("Equinox points"), "equinoxPointsDisplayed");
×
1953
        addAction("actionShow_Solstice_J2000_Points",      displayGroup, N_("Solstice J2000 points"), "solsticeJ2000PointsDisplayed");
×
1954
        addAction("actionShow_Solstice_Points",            displayGroup, N_("Solstice points"), "solsticePointsDisplayed");
×
1955
        addAction("actionShow_Antisolar_Point",            displayGroup, N_("Antisolar point"), "antisolarPointDisplayed");
×
1956
        addAction("actionShow_Umbra_Center_Point",         displayGroup, N_("The center of the Earth's umbra"), "umbraCenterPointDisplayed");
×
1957
        addAction("actionShow_Apex_Points",                displayGroup, N_("Apex points"), "apexPointsDisplayed");
×
1958
}
×
1959

1960
void GridLinesMgr::connectSolarSystem()
×
1961
{
1962
        SolarSystem *ss=GETSTELMODULE(SolarSystem);
×
1963
        earth = ss->getEarth();
×
1964
        SkyLine::setSolarSystem(ss);
×
1965
}
×
1966

1967
void GridLinesMgr::update(double deltaTime)
×
1968
{
1969
        // Update faders
1970
        equGrid->update(deltaTime);
×
1971
        fixedEquatorialGrid->update(deltaTime);
×
1972
        equJ2000Grid->update(deltaTime);
×
1973
        eclJ2000Grid->update(deltaTime);
×
1974
        eclGrid->update(deltaTime);
×
1975
        galacticGrid->update(deltaTime);
×
1976
        supergalacticGrid->update(deltaTime);
×
1977
        aziGrid->update(deltaTime);
×
1978
        equatorLine->update(deltaTime);
×
1979
        equatorJ2000Line->update(deltaTime);
×
1980
        fixedEquatorLine->update(deltaTime);
×
1981
        eclipticLine->update(deltaTime);
×
1982
        eclipticJ2000Line->update(deltaTime);
×
1983
        invariablePlaneLine->update(deltaTime);
×
1984
        solarEquatorLine->update(deltaTime);
×
1985
        precessionCircleN->update(deltaTime);
×
1986
        precessionCircleS->update(deltaTime);
×
1987
        meridianLine->update(deltaTime);
×
1988
        horizonLine->update(deltaTime);
×
1989
        galacticEquatorLine->update(deltaTime);
×
1990
        supergalacticEquatorLine->update(deltaTime);
×
1991
        longitudeLine->update(deltaTime);
×
1992
        quadratureLine->update(deltaTime);
×
1993
        primeVerticalLine->update(deltaTime);
×
1994
        currentVerticalLine->update(deltaTime);
×
1995
        colureLine_1->update(deltaTime);
×
1996
        colureLine_2->update(deltaTime);
×
1997
        circumpolarCircleN->update(deltaTime);
×
1998
        circumpolarCircleS->update(deltaTime);
×
1999
        umbraCircle->update(deltaTime);
×
2000
        penumbraCircle->update(deltaTime);
×
2001
        celestialJ2000Poles->update(deltaTime);
×
2002
        celestialPoles->update(deltaTime);
×
2003
        zenithNadir->update(deltaTime);
×
2004
        eclipticJ2000Poles->update(deltaTime);
×
2005
        eclipticPoles->update(deltaTime);
×
2006
        galacticPoles->update(deltaTime);
×
2007
        galacticCenter->update(deltaTime);
×
2008
        supergalacticPoles->update(deltaTime);
×
2009
        equinoxJ2000Points->update(deltaTime);
×
2010
        equinoxPoints->update(deltaTime);
×
2011
        solsticeJ2000Points->update(deltaTime);
×
2012
        solsticePoints->update(deltaTime);
×
2013
        antisolarPoint->update(deltaTime);
×
2014
        umbraCenterPoint->update(deltaTime);
×
2015
        apexPoints->update(deltaTime);
×
2016
        apexPoints->updateLabel();        
×
2017
}
×
2018

2019
void GridLinesMgr::draw(StelCore* core)
×
2020
{
2021
        if (!gridlinesDisplayed)
×
2022
                return;
×
2023

2024
        // Draw elements from the outside in.
2025
        // Lines after corresponding grids, to be able to e.g. draw equators in different color!
2026
        // Points should come last, to avoid text overdraw.
2027
        supergalacticGrid->draw(core);
×
2028
        galacticGrid->draw(core);
×
2029
        supergalacticEquatorLine->draw(core);
×
2030
        galacticEquatorLine->draw(core);
×
2031
        invariablePlaneLine->draw(core);
×
2032
        solarEquatorLine->draw(core);
×
2033

2034
        eclJ2000Grid->draw(core);
×
2035
        eclipticJ2000Line->draw(core);
×
2036

2037
        equJ2000Grid->draw(core);
×
2038
        equatorJ2000Line->draw(core);
×
2039

2040
        equGrid->draw(core);
×
2041
        equatorLine->draw(core);
×
2042
        // While ecliptic of J2000 may be helpful to get a feeling of the Z=0 plane of VSOP87,
2043
        // ecliptic of date is related to Earth and does not make much sense for the other planets.
2044
        // Of course, orbital plane of respective planet would be better, but is not implemented.
2045
        if (core->getCurrentPlanet()==earth)
×
2046
        {
2047
                penumbraCircle->draw(core);
×
2048
                umbraCircle->draw(core);
×
2049
                eclGrid->draw(core);
×
2050
                eclipticLine->draw(core);
×
2051
                precessionCircleN->draw(core);
×
2052
                precessionCircleS->draw(core);
×
2053
                colureLine_1->draw(core);
×
2054
                colureLine_2->draw(core);
×
2055
                eclipticPoles->draw(core);
×
2056
                equinoxPoints->draw(core);
×
2057
                solsticePoints->draw(core);
×
2058
                longitudeLine->draw(core);
×
2059
                quadratureLine->draw(core);
×
2060
                umbraCenterPoint->draw(core);
×
2061
        }
2062
        circumpolarCircleN->draw(core);
×
2063
        circumpolarCircleS->draw(core);
×
2064

2065
        if (core->getCurrentPlanet()->getPlanetType()!=Planet::isObserver)
×
2066
        {
2067
                fixedEquatorialGrid->draw(core);
×
2068
                fixedEquatorLine->draw(core);
×
2069
        }
2070

2071
        aziGrid->draw(core);
×
2072
        meridianLine->draw(core);
×
2073
        horizonLine->draw(core);
×
2074
        primeVerticalLine->draw(core);
×
2075

2076
        currentVerticalLine->draw(core);
×
2077

2078
        supergalacticPoles->draw(core);
×
2079
        galacticPoles->draw(core);
×
2080
        galacticCenter->draw(core);
×
2081
        apexPoints->draw(core);
×
2082
        antisolarPoint->draw(core);
×
2083
        eclipticJ2000Poles->draw(core);
×
2084
        equinoxJ2000Points->draw(core);
×
2085
        solsticeJ2000Points->draw(core);
×
2086
        celestialJ2000Poles->draw(core);
×
2087
        celestialPoles->draw(core);
×
2088

2089
        zenithNadir->draw(core);
×
2090
}
2091

2092
void GridLinesMgr::updateLabels()
×
2093
{
2094
        equatorJ2000Line->updateLabel();
×
2095
        equatorLine->updateLabel();
×
2096
        fixedEquatorLine->updateLabel();
×
2097
        eclipticLine->updateLabel();
×
2098
        eclipticJ2000Line->updateLabel();
×
2099
        invariablePlaneLine->updateLabel();
×
2100
        solarEquatorLine->updateLabel();
×
2101
        precessionCircleN->updateLabel();
×
2102
        precessionCircleS->updateLabel();
×
2103
        meridianLine->updateLabel();
×
2104
        horizonLine->updateLabel();
×
2105
        galacticEquatorLine->updateLabel();
×
2106
        supergalacticEquatorLine->updateLabel();
×
2107
        longitudeLine->updateLabel();
×
2108
        quadratureLine->updateLabel();
×
2109
        primeVerticalLine->updateLabel();
×
2110
        currentVerticalLine->updateLabel();
×
2111
        colureLine_1->updateLabel();
×
2112
        colureLine_2->updateLabel();
×
2113
        circumpolarCircleN->updateLabel();
×
2114
        circumpolarCircleS->updateLabel();
×
2115
        umbraCircle->updateLabel();
×
2116
        penumbraCircle->updateLabel();
×
2117
        celestialJ2000Poles->updateLabel();
×
2118
        celestialPoles->updateLabel();
×
2119
        zenithNadir->updateLabel();
×
2120
        eclipticJ2000Poles->updateLabel();
×
2121
        eclipticPoles->updateLabel();
×
2122
        galacticPoles->updateLabel();
×
2123
        galacticCenter->updateLabel();
×
2124
        supergalacticPoles->updateLabel();
×
2125
        equinoxJ2000Points->updateLabel();
×
2126
        equinoxPoints->updateLabel();
×
2127
        solsticeJ2000Points->updateLabel();
×
2128
        solsticePoints->updateLabel();
×
2129
        antisolarPoint->updateLabel();
×
2130
        umbraCenterPoint->updateLabel();
×
2131
        apexPoints->updateLabel();        
×
2132
}
×
2133

2134
//! Setter ("master switch") for displaying any grid/line.
2135
void GridLinesMgr::setFlagGridlines(const bool displayed)
×
2136
{
2137
        if(displayed != gridlinesDisplayed)
×
2138
        {
2139
                gridlinesDisplayed=displayed;
×
2140
                emit gridlinesDisplayedChanged(displayed);
×
2141
        }
2142
}
×
2143
//! Accessor ("master switch") for displaying any grid/line.
2144
bool GridLinesMgr::getFlagGridlines() const
×
2145
{
2146
        return gridlinesDisplayed;
×
2147
}
2148

2149
//! Setter ("master switch by type") for displaying all grids esp. for scripting
2150
void GridLinesMgr::setFlagAllGrids(const bool displayed)
×
2151
{
2152
        setFlagEquatorGrid(displayed);
×
2153
        setFlagFixedEquatorGrid(displayed);
×
2154
        setFlagEclipticGrid(displayed);
×
2155
        setFlagGalacticGrid(displayed);
×
2156
        setFlagAzimuthalGrid(displayed);
×
2157
        setFlagEquatorJ2000Grid(displayed);
×
2158
        setFlagEclipticJ2000Grid(displayed);
×
2159
        setFlagSupergalacticGrid(displayed);
×
2160
}
×
2161

2162
//! Setter ("master switch by type") for displaying all lines esp. for scripting
2163
void GridLinesMgr::setFlagAllLines(const bool displayed)
×
2164
{
2165
        setFlagColureLines(displayed);
×
2166
        setFlagEquatorLine(displayed);
×
2167
        setFlagFixedEquatorLine(displayed);
×
2168
        setFlagHorizonLine(displayed);
×
2169
        setFlagEclipticLine(displayed);
×
2170
        setFlagMeridianLine(displayed);
×
2171
        setFlagLongitudeLine(displayed);
×
2172
        setFlagQuadratureLine(displayed);
×
2173
        setFlagEquatorJ2000Line(displayed);
×
2174
        setFlagEclipticJ2000Line(displayed);
×
2175
        setFlagInvariablePlaneLine(displayed);
×
2176
        setFlagSolarEquatorLine(displayed);
×
2177
        setFlagPrecessionCircles(displayed);
×
2178
        setFlagPrimeVerticalLine(displayed);
×
2179
        setFlagCurrentVerticalLine(displayed);
×
2180
        setFlagCircumpolarCircles(displayed);
×
2181
        setFlagUmbraCircle(displayed);
×
2182
        setFlagPenumbraCircle(displayed);
×
2183
        setFlagGalacticEquatorLine(displayed);
×
2184
        setFlagSupergalacticEquatorLine(displayed);
×
2185
}
×
2186

2187
//! Setter ("master switch by type") for displaying all points esp. for scripting
2188
void GridLinesMgr::setFlagAllPoints(const bool displayed)
×
2189
{
2190
        setFlagZenithNadir(displayed);
×
2191
        setFlagEclipticPoles(displayed);
×
2192
        setFlagEquinoxPoints(displayed);
×
2193
        setFlagGalacticPoles(displayed);
×
2194
        setFlagGalacticCenter(displayed);
×
2195
        setFlagAntisolarPoint(displayed);
×
2196
        setFlagCelestialPoles(displayed);
×
2197
        setFlagSolsticePoints(displayed);
×
2198
        setFlagEclipticJ2000Poles(displayed);
×
2199
        setFlagEquinoxJ2000Points(displayed);
×
2200
        setFlagSupergalacticPoles(displayed);
×
2201
        setFlagCelestialJ2000Poles(displayed);
×
2202
        setFlagSolsticeJ2000Points(displayed);
×
2203
        setFlagApexPoints(displayed);
×
2204
        setFlagUmbraCenterPoint(displayed);
×
2205
}
×
2206

2207
//! Set flag for displaying Azimuthal Grid
2208
void GridLinesMgr::setFlagAzimuthalGrid(const bool displayed)
×
2209
{
2210
        if(displayed != aziGrid->isDisplayed())
×
2211
        {
2212
                aziGrid->setDisplayed(displayed);
×
2213
                emit azimuthalGridDisplayedChanged(displayed);
×
2214
        }
2215
}
×
2216
//! Get flag for displaying Azimuthal Grid
2217
bool GridLinesMgr::getFlagAzimuthalGrid() const
×
2218
{
2219
        return aziGrid->isDisplayed();
×
2220
}
2221
Vec3f GridLinesMgr::getColorAzimuthalGrid() const
×
2222
{
2223
        return aziGrid->getColor();
×
2224
}
2225
void GridLinesMgr::setColorAzimuthalGrid(const Vec3f& newColor)
×
2226
{
2227
        if(newColor != aziGrid->getColor())
×
2228
        {
2229
                aziGrid->setColor(newColor);
×
2230
                emit azimuthalGridColorChanged(newColor);
×
2231
        }
2232
}
×
2233

2234
//! Set flag for displaying Equatorial Grid
2235
void GridLinesMgr::setFlagEquatorGrid(const bool displayed)
×
2236
{
2237
        if(displayed != equGrid->isDisplayed())
×
2238
        {
2239
                equGrid->setDisplayed(displayed);
×
2240
                emit equatorGridDisplayedChanged(displayed);
×
2241
        }
2242
}
×
2243
//! Get flag for displaying Equatorial Grid
2244
bool GridLinesMgr::getFlagEquatorGrid() const
×
2245
{
2246
        return equGrid->isDisplayed();
×
2247
}
2248
Vec3f GridLinesMgr::getColorEquatorGrid() const
×
2249
{
2250
        return equGrid->getColor();
×
2251
}
2252
void GridLinesMgr::setColorEquatorGrid(const Vec3f& newColor)
×
2253
{
2254
        if(newColor != equGrid->getColor())
×
2255
        {
2256
                equGrid->setColor(newColor);
×
2257
                emit equatorGridColorChanged(newColor);
×
2258
        }
2259
}
×
2260

2261
//! Set flag for displaying Fixed Equatorial Grid (Hour Angle/Declination)
2262
void GridLinesMgr::setFlagFixedEquatorGrid(const bool displayed)
×
2263
{
2264
        if(displayed != fixedEquatorialGrid->isDisplayed())
×
2265
        {
2266
                fixedEquatorialGrid->setDisplayed(displayed);
×
2267
                emit fixedEquatorGridDisplayedChanged(displayed);
×
2268
        }
2269
}
×
2270
//! Get flag for displaying Fixed Equatorial Grid (Hour Angle/Declination)
2271
bool GridLinesMgr::getFlagFixedEquatorGrid() const
×
2272
{
2273
        return fixedEquatorialGrid->isDisplayed();
×
2274
}
2275
Vec3f GridLinesMgr::getColorFixedEquatorGrid() const
×
2276
{
2277
        return fixedEquatorialGrid->getColor();
×
2278
}
2279
void GridLinesMgr::setColorFixedEquatorGrid(const Vec3f& newColor)
×
2280
{
2281
        if(newColor != fixedEquatorialGrid->getColor())
×
2282
        {
2283
                fixedEquatorialGrid->setColor(newColor);
×
2284
                emit fixedEquatorGridColorChanged(newColor);
×
2285
        }
2286
}
×
2287

2288
//! Set flag for displaying Equatorial J2000 Grid
2289
void GridLinesMgr::setFlagEquatorJ2000Grid(const bool displayed)
×
2290
{
2291
        if(displayed != equJ2000Grid->isDisplayed())
×
2292
        {
2293
                equJ2000Grid->setDisplayed(displayed);
×
2294
                emit equatorJ2000GridDisplayedChanged(displayed);
×
2295
        }
2296
}
×
2297
//! Get flag for displaying Equatorial J2000 Grid
2298
bool GridLinesMgr::getFlagEquatorJ2000Grid() const
×
2299
{
2300
        return equJ2000Grid->isDisplayed();
×
2301
}
2302
Vec3f GridLinesMgr::getColorEquatorJ2000Grid() const
×
2303
{
2304
        return equJ2000Grid->getColor();
×
2305
}
2306
void GridLinesMgr::setColorEquatorJ2000Grid(const Vec3f& newColor)
×
2307
{
2308
        if(newColor != equJ2000Grid->getColor())
×
2309
        {
2310
                equJ2000Grid->setColor(newColor);
×
2311
                emit equatorJ2000GridColorChanged(newColor);
×
2312
        }
2313
}
×
2314

2315
//! Set flag for displaying Ecliptic J2000 Grid
2316
void GridLinesMgr::setFlagEclipticJ2000Grid(const bool displayed)
×
2317
{
2318
        if(displayed != eclJ2000Grid->isDisplayed())
×
2319
        {
2320
                eclJ2000Grid->setDisplayed(displayed);
×
2321
                emit eclipticJ2000GridDisplayedChanged(displayed);
×
2322
        }
2323
}
×
2324
//! Get flag for displaying Ecliptic J2000 Grid
2325
bool GridLinesMgr::getFlagEclipticJ2000Grid() const
×
2326
{
2327
        return eclJ2000Grid->isDisplayed();
×
2328
}
2329
Vec3f GridLinesMgr::getColorEclipticJ2000Grid() const
×
2330
{
2331
        return eclJ2000Grid->getColor();
×
2332
}
2333
void GridLinesMgr::setColorEclipticJ2000Grid(const Vec3f& newColor)
×
2334
{
2335
        if(newColor != eclJ2000Grid->getColor())
×
2336
        {
2337
                eclJ2000Grid->setColor(newColor);
×
2338
                emit eclipticJ2000GridColorChanged(newColor);
×
2339
        }
2340
}
×
2341

2342
//! Set flag for displaying Ecliptic of Date Grid
2343
void GridLinesMgr::setFlagEclipticGrid(const bool displayed)
×
2344
{
2345
        if(displayed != eclGrid->isDisplayed())
×
2346
        {
2347
                eclGrid->setDisplayed(displayed);
×
2348
                emit eclipticGridDisplayedChanged(displayed);
×
2349
        }
2350
}
×
2351
//! Get flag for displaying Ecliptic of Date Grid
2352
bool GridLinesMgr::getFlagEclipticGrid() const
×
2353
{
2354
        return eclGrid->isDisplayed();
×
2355
}
2356
Vec3f GridLinesMgr::getColorEclipticGrid() const
×
2357
{
2358
        return eclGrid->getColor();
×
2359
}
2360
void GridLinesMgr::setColorEclipticGrid(const Vec3f& newColor)
×
2361
{
2362
        if(newColor != eclGrid->getColor())
×
2363
        {
2364
                eclGrid->setColor(newColor);
×
2365
                emit eclipticGridColorChanged(newColor);
×
2366
        }
2367
}
×
2368

2369
//! Set flag for displaying Galactic Grid
2370
void GridLinesMgr::setFlagGalacticGrid(const bool displayed)
×
2371
{
2372
        if(displayed != galacticGrid->isDisplayed())
×
2373
        {
2374
                galacticGrid->setDisplayed(displayed);
×
2375
                emit galacticGridDisplayedChanged(displayed);
×
2376
        }
2377
}
×
2378
//! Get flag for displaying Galactic Grid
2379
bool GridLinesMgr::getFlagGalacticGrid() const
×
2380
{
2381
        return galacticGrid->isDisplayed();
×
2382
}
2383
Vec3f GridLinesMgr::getColorGalacticGrid() const
×
2384
{
2385
        return galacticGrid->getColor();
×
2386
}
2387
void GridLinesMgr::setColorGalacticGrid(const Vec3f& newColor)
×
2388
{
2389
        if(newColor != galacticGrid->getColor())
×
2390
        {
2391
                galacticGrid->setColor(newColor);
×
2392
                emit galacticGridColorChanged(newColor);
×
2393
        }
2394
}
×
2395

2396
//! Set flag for displaying Supergalactic Grid
2397
void GridLinesMgr::setFlagSupergalacticGrid(const bool displayed)
×
2398
{
2399
        if(displayed != supergalacticGrid->isDisplayed())
×
2400
        {
2401
                supergalacticGrid->setDisplayed(displayed);
×
2402
                emit supergalacticGridDisplayedChanged(displayed);
×
2403
        }
2404
}
×
2405
//! Get flag for displaying Supergalactic Grid
2406
bool GridLinesMgr::getFlagSupergalacticGrid() const
×
2407
{
2408
        return supergalacticGrid->isDisplayed();
×
2409
}
2410
Vec3f GridLinesMgr::getColorSupergalacticGrid() const
×
2411
{
2412
        return supergalacticGrid->getColor();
×
2413
}
2414
void GridLinesMgr::setColorSupergalacticGrid(const Vec3f& newColor)
×
2415
{
2416
        if(newColor != supergalacticGrid->getColor())
×
2417
        {
2418
                supergalacticGrid->setColor(newColor);
×
2419
                emit supergalacticGridColorChanged(newColor);
×
2420
        }
2421
}
×
2422

2423
//! Set flag for displaying Equatorial Line
2424
void GridLinesMgr::setFlagEquatorLine(const bool displayed)
×
2425
{
2426
        if(displayed != equatorLine->isDisplayed())
×
2427
        {
2428
                equatorLine->setDisplayed(displayed);
×
2429
                emit equatorLineDisplayedChanged(displayed);
×
2430
        }
2431
}
×
2432
//! Get flag for displaying Equatorial Line
2433
bool GridLinesMgr::getFlagEquatorLine() const
×
2434
{
2435
        return equatorLine->isDisplayed();
×
2436
}
2437
//! Set flag for displaying Equatorial Line partitions
2438
void GridLinesMgr::setFlagEquatorParts(const bool displayed)
×
2439
{
2440
        if(displayed != equatorLine->showsPartitions())
×
2441
        {
2442
                equatorLine->setPartitions(displayed);
×
2443
                emit equatorPartsDisplayedChanged(displayed);
×
2444
        }
2445
}
×
2446
//! Get flag for displaying Equatorial Line partitions
2447
bool GridLinesMgr::getFlagEquatorParts() const
×
2448
{
2449
        return equatorLine->showsPartitions();
×
2450
}
2451
void GridLinesMgr::setFlagEquatorLabeled(const bool displayed)
×
2452
{
2453
        if(displayed != equatorLine->isLabeled())
×
2454
        {
2455
                equatorLine->setLabeled(displayed);
×
2456
                emit equatorPartsLabeledChanged(displayed);
×
2457
        }
2458
}
×
2459
bool GridLinesMgr::getFlagEquatorLabeled() const
×
2460
{
2461
        return equatorLine->isLabeled();
×
2462
}
2463
Vec3f GridLinesMgr::getColorEquatorLine() const
×
2464
{
2465
        return equatorLine->getColor();
×
2466
}
2467
void GridLinesMgr::setColorEquatorLine(const Vec3f& newColor)
×
2468
{
2469
        if(newColor != equatorLine->getColor())
×
2470
        {
2471
                equatorLine->setColor(newColor);
×
2472
                emit equatorLineColorChanged(newColor);
×
2473
        }
2474
}
×
2475

2476
//! Set flag for displaying J2000 Equatorial Line
2477
void GridLinesMgr::setFlagEquatorJ2000Line(const bool displayed)
×
2478
{
2479
        if(displayed != equatorJ2000Line->isDisplayed())
×
2480
        {
2481
                equatorJ2000Line->setDisplayed(displayed);
×
2482
                emit equatorJ2000LineDisplayedChanged(displayed);
×
2483
        }
2484
}
×
2485
//! Get flag for displaying J2000 Equatorial Line
2486
bool GridLinesMgr::getFlagEquatorJ2000Line() const
×
2487
{
2488
        return equatorJ2000Line->isDisplayed();
×
2489
}
2490
//! Set flag for displaying J2000 Equatorial Line partitions
2491
void GridLinesMgr::setFlagEquatorJ2000Parts(const bool displayed)
×
2492
{
2493
        if(displayed != equatorJ2000Line->showsPartitions())
×
2494
        {
2495
                equatorJ2000Line->setPartitions(displayed);
×
2496
                emit equatorJ2000PartsDisplayedChanged(displayed);
×
2497
        }
2498
}
×
2499
//! Get flag for displaying J2000 Equatorial Line partitions
2500
bool GridLinesMgr::getFlagEquatorJ2000Parts() const
×
2501
{
2502
        return equatorJ2000Line->showsPartitions();
×
2503
}
2504
void GridLinesMgr::setFlagEquatorJ2000Labeled(const bool displayed)
×
2505
{
2506
        if(displayed != equatorJ2000Line->isLabeled())
×
2507
        {
2508
                equatorJ2000Line->setLabeled(displayed);
×
2509
                emit equatorJ2000PartsLabeledChanged(displayed);
×
2510
        }
2511
}
×
2512
bool GridLinesMgr::getFlagEquatorJ2000Labeled() const
×
2513
{
2514
        return equatorJ2000Line->isLabeled();
×
2515
}
2516
Vec3f GridLinesMgr::getColorEquatorJ2000Line() const
×
2517
{
2518
        return equatorJ2000Line->getColor();
×
2519
}
2520
void GridLinesMgr::setColorEquatorJ2000Line(const Vec3f& newColor)
×
2521
{
2522
        if(newColor != equatorJ2000Line->getColor())
×
2523
        {
2524
                equatorJ2000Line->setColor(newColor);
×
2525
                emit equatorJ2000LineColorChanged(newColor);
×
2526
        }
2527
}
×
2528

2529
//! Set flag for displaying Fixed Equator Line
2530
void GridLinesMgr::setFlagFixedEquatorLine(const bool displayed)
×
2531
{
2532
        if(displayed != fixedEquatorLine->isDisplayed())
×
2533
        {
2534
                fixedEquatorLine->setDisplayed(displayed);
×
2535
                emit fixedEquatorLineDisplayedChanged(displayed);
×
2536
        }
2537
}
×
2538
//! Get flag for displaying Fixed Equator Line
2539
bool GridLinesMgr::getFlagFixedEquatorLine() const
×
2540
{
2541
        return fixedEquatorLine->isDisplayed();
×
2542
}
2543
//! Set flag for displaying Fixed Equator Line partitions
2544
void GridLinesMgr::setFlagFixedEquatorParts(const bool displayed)
×
2545
{
2546
        if(displayed != fixedEquatorLine->showsPartitions())
×
2547
        {
2548
                fixedEquatorLine->setPartitions(displayed);
×
2549
                emit fixedEquatorPartsDisplayedChanged(displayed);
×
2550
        }
2551
}
×
2552
//! Get flag for displaying Fixed Equator Line partitions
2553
bool GridLinesMgr::getFlagFixedEquatorParts() const
×
2554
{
2555
        return fixedEquatorLine->showsPartitions();
×
2556
}
2557
void GridLinesMgr::setFlagFixedEquatorLabeled(const bool displayed)
×
2558
{
2559
        if(displayed != fixedEquatorLine->isLabeled())
×
2560
        {
2561
                fixedEquatorLine->setLabeled(displayed);
×
2562
                emit fixedEquatorPartsLabeledChanged(displayed);
×
2563
        }
2564
}
×
2565
bool GridLinesMgr::getFlagFixedEquatorLabeled() const
×
2566
{
2567
        return fixedEquatorLine->isLabeled();
×
2568
}
2569
Vec3f GridLinesMgr::getColorFixedEquatorLine() const
×
2570
{
2571
        return fixedEquatorLine->getColor();
×
2572
}
2573
void GridLinesMgr::setColorFixedEquatorLine(const Vec3f& newColor)
×
2574
{
2575
        if(newColor != fixedEquatorLine->getColor())
×
2576
        {
2577
                fixedEquatorLine->setColor(newColor);
×
2578
                emit fixedEquatorLineColorChanged(newColor);
×
2579
        }
2580
}
×
2581

2582
//! Set flag for displaying Ecliptic Line
2583
void GridLinesMgr::setFlagEclipticLine(const bool displayed)
×
2584
{
2585
        if(displayed != eclipticLine->isDisplayed())
×
2586
        {
2587
                eclipticLine->setDisplayed(displayed);
×
2588
                emit eclipticLineDisplayedChanged(displayed);
×
2589
        }
2590
}
×
2591
//! Get flag for displaying Ecliptic Line
2592
bool GridLinesMgr::getFlagEclipticLine() const
×
2593
{
2594
        return eclipticLine->isDisplayed();
×
2595
}
2596
//! Set flag for displaying Ecliptic Line partitions
2597
void GridLinesMgr::setFlagEclipticParts(const bool displayed)
×
2598
{
2599
        if(displayed != eclipticLine->showsPartitions())
×
2600
        {
2601
                eclipticLine->setPartitions(displayed);
×
2602
                emit eclipticPartsDisplayedChanged(displayed);
×
2603
        }
2604
}
×
2605
//! Get flag for displaying Ecliptic Line partitions
2606
bool GridLinesMgr::getFlagEclipticParts() const
×
2607
{
2608
        return eclipticLine->showsPartitions();
×
2609
}
2610
//! Set flag for displaying Ecliptic Line partitions
2611
void GridLinesMgr::setFlagEclipticLabeled(const bool displayed)
×
2612
{
2613
        if(displayed != eclipticLine->isLabeled())
×
2614
        {
2615
                eclipticLine->setLabeled(displayed);
×
2616
                emit eclipticPartsLabeledChanged(displayed);
×
2617
        }
2618
}
×
2619
//! Get flag for displaying Ecliptic Line partitions
2620
bool GridLinesMgr::getFlagEclipticLabeled() const
×
2621
{
2622
        return eclipticLine->isLabeled();
×
2623
}
2624
Vec3f GridLinesMgr::getColorEclipticLine() const
×
2625
{
2626
        return eclipticLine->getColor();
×
2627
}
2628
void GridLinesMgr::setColorEclipticLine(const Vec3f& newColor)
×
2629
{
2630
        if(newColor != eclipticLine->getColor())
×
2631
        {
2632
                eclipticLine->setColor(newColor);
×
2633
                emit eclipticLineColorChanged(newColor);
×
2634
        }
2635
}
×
2636

2637
//! Set flag for displaying Ecliptic J2000 Line
2638
void GridLinesMgr::setFlagEclipticJ2000Line(const bool displayed)
×
2639
{
2640
        if(displayed != eclipticJ2000Line->isDisplayed())
×
2641
        {
2642
                eclipticJ2000Line->setDisplayed(displayed);
×
2643
                emit eclipticJ2000LineDisplayedChanged(displayed);
×
2644
        }
2645
}
×
2646
//! Get flag for displaying Ecliptic J2000 Line
2647
bool GridLinesMgr::getFlagEclipticJ2000Line() const
×
2648
{
2649
        return eclipticJ2000Line->isDisplayed();
×
2650
}
2651
//! Set flag for displaying Ecliptic J2000 Line partitions
2652
void GridLinesMgr::setFlagEclipticJ2000Parts(const bool displayed)
×
2653
{
2654
        if(displayed != eclipticJ2000Line->showsPartitions())
×
2655
        {
2656
                eclipticJ2000Line->setPartitions(displayed);
×
2657
                emit eclipticJ2000PartsDisplayedChanged(displayed);
×
2658
        }
2659
}
×
2660
//! Get flag for displaying Ecliptic J2000 Line partitions
2661
bool GridLinesMgr::getFlagEclipticJ2000Parts() const
×
2662
{
2663
        return eclipticJ2000Line->showsPartitions();
×
2664
}
2665
//! Set flag for displaying Ecliptic J2000 Line partitions
2666
void GridLinesMgr::setFlagEclipticJ2000Labeled(const bool displayed)
×
2667
{
2668
        if(displayed != eclipticJ2000Line->isLabeled())
×
2669
        {
2670
                eclipticJ2000Line->setLabeled(displayed);
×
2671
                emit eclipticJ2000PartsLabeledChanged(displayed);
×
2672
        }
2673
}
×
2674
//! Get flag for displaying Ecliptic J2000 Line partitions
2675
bool GridLinesMgr::getFlagEclipticJ2000Labeled() const
×
2676
{
2677
        return eclipticJ2000Line->isLabeled();
×
2678
}
2679
Vec3f GridLinesMgr::getColorEclipticJ2000Line() const
×
2680
{
2681
        return eclipticJ2000Line->getColor();
×
2682
}
2683
void GridLinesMgr::setColorEclipticJ2000Line(const Vec3f& newColor)
×
2684
{
2685
        if(newColor != eclipticJ2000Line->getColor())
×
2686
        {
2687
                eclipticJ2000Line->setColor(newColor);
×
2688
                emit eclipticJ2000LineColorChanged(newColor);
×
2689
        }
2690
}
×
2691

2692
//! Set flag for displaying Invariable Plane Line
2693
void GridLinesMgr::setFlagInvariablePlaneLine(const bool displayed)
×
2694
{
2695
        if(displayed != invariablePlaneLine->isDisplayed())
×
2696
        {
2697
                invariablePlaneLine->setDisplayed(displayed);
×
2698
                emit invariablePlaneLineDisplayedChanged(displayed);
×
2699
        }
2700
}
×
2701
//! Get flag for displaying Invariable Plane Line
2702
bool GridLinesMgr::getFlagInvariablePlaneLine() const
×
2703
{
2704
        return invariablePlaneLine->isDisplayed();
×
2705
}
2706
Vec3f GridLinesMgr::getColorInvariablePlaneLine() const
×
2707
{
2708
        return invariablePlaneLine->getColor();
×
2709
}
2710
void GridLinesMgr::setColorInvariablePlaneLine(const Vec3f& newColor)
×
2711
{
2712
        if(newColor != invariablePlaneLine->getColor())
×
2713
        {
2714
                invariablePlaneLine->setColor(newColor);
×
2715
                emit invariablePlaneLineColorChanged(newColor);
×
2716
        }
2717
}
×
2718

2719
//! Set flag for displaying Solar Equator Line
2720
void GridLinesMgr::setFlagSolarEquatorLine(const bool displayed)
×
2721
{
2722
        if(displayed != solarEquatorLine->isDisplayed())
×
2723
        {
2724
                solarEquatorLine->setDisplayed(displayed);
×
2725
                emit solarEquatorLineDisplayedChanged(displayed);
×
2726
        }
2727
}
×
2728
//! Get flag for displaying Solar Equator Line
2729
bool GridLinesMgr::getFlagSolarEquatorLine() const
×
2730
{
2731
        return solarEquatorLine->isDisplayed();
×
2732
}
2733
//! Set flag for displaying Solar Equator Line partitions
2734
void GridLinesMgr::setFlagSolarEquatorParts(const bool displayed)
×
2735
{
2736
        if(displayed != solarEquatorLine->showsPartitions())
×
2737
        {
2738
                solarEquatorLine->setPartitions(displayed);
×
2739
                emit solarEquatorPartsDisplayedChanged(displayed);
×
2740
        }
2741
}
×
2742
//! Get flag for displaying Solar Equator Line partitions
2743
bool GridLinesMgr::getFlagSolarEquatorParts() const
×
2744
{
2745
        return solarEquatorLine->showsPartitions();
×
2746
}
2747
//! Set flag for displaying Solar Equator Line partitions
2748
void GridLinesMgr::setFlagSolarEquatorLabeled(const bool displayed)
×
2749
{
2750
        if(displayed != solarEquatorLine->isLabeled())
×
2751
        {
2752
                solarEquatorLine->setLabeled(displayed);
×
2753
                emit solarEquatorPartsLabeledChanged(displayed);
×
2754
        }
2755
}
×
2756
//! Get flag for displaying Solar Equator Line partitions
2757
bool GridLinesMgr::getFlagSolarEquatorLabeled() const
×
2758
{
2759
        return solarEquatorLine->isLabeled();
×
2760
}
2761
Vec3f GridLinesMgr::getColorSolarEquatorLine() const
×
2762
{
2763
        return solarEquatorLine->getColor();
×
2764
}
2765
void GridLinesMgr::setColorSolarEquatorLine(const Vec3f& newColor)
×
2766
{
2767
        if(newColor != solarEquatorLine->getColor())
×
2768
        {
2769
                solarEquatorLine->setColor(newColor);
×
2770
                emit solarEquatorLineColorChanged(newColor);
×
2771
        }
2772
}
×
2773

2774
//! Set flag for displaying Precession Circles
2775
void GridLinesMgr::setFlagPrecessionCircles(const bool displayed)
×
2776
{
2777
        if(displayed != precessionCircleN->isDisplayed())
×
2778
        {
2779
                precessionCircleN->setDisplayed(displayed);
×
2780
                precessionCircleS->setDisplayed(displayed);
×
2781
                emit precessionCirclesDisplayedChanged(displayed);
×
2782
        }
2783
}
×
2784
//! Get flag for displaying Precession Circles
2785
bool GridLinesMgr::getFlagPrecessionCircles() const
×
2786
{
2787
        // precessionCircleS is always synchronous, no separate queries.
2788
        return precessionCircleN->isDisplayed();
×
2789
}
2790
//! Set flag for displaying Precession Circle partitions
2791
void GridLinesMgr::setFlagPrecessionParts(const bool displayed)
×
2792
{
2793
        if(displayed != precessionCircleN->showsPartitions())
×
2794
        {
2795
                precessionCircleN->setPartitions(displayed);
×
2796
                precessionCircleS->setPartitions(displayed);
×
2797
                emit precessionPartsDisplayedChanged(displayed);
×
2798
        }
2799
}
×
2800
//! Get flag for displaying Precession Circle partitions
2801
bool GridLinesMgr::getFlagPrecessionParts() const
×
2802
{
2803
        // precessionCircleS is always synchronous, no separate queries.
2804
        return precessionCircleN->showsPartitions();
×
2805
}
2806
//! Set flag for displaying Precession Circle partitions
2807
void GridLinesMgr::setFlagPrecessionLabeled(const bool displayed)
×
2808
{
2809
        if(displayed != precessionCircleN->isLabeled())
×
2810
        {
2811
                precessionCircleN->setLabeled(displayed);
×
2812
                precessionCircleS->setLabeled(displayed);
×
2813
                emit precessionPartsLabeledChanged(displayed);
×
2814
        }
2815
}
×
2816
//! Get flag for displaying Precession Circle partitions
2817
bool GridLinesMgr::getFlagPrecessionLabeled() const
×
2818
{
2819
        // precessionCircleS is always synchronous, no separate queries.
2820
        return precessionCircleN->isLabeled();
×
2821
}
2822
Vec3f GridLinesMgr::getColorPrecessionCircles() const
×
2823
{
2824
        return precessionCircleN->getColor();
×
2825
}
2826
void GridLinesMgr::setColorPrecessionCircles(const Vec3f& newColor)
×
2827
{
2828
        if(newColor != precessionCircleN->getColor())
×
2829
        {
2830
                precessionCircleN->setColor(newColor);
×
2831
                precessionCircleS->setColor(newColor);
×
2832
                emit precessionCirclesColorChanged(newColor);
×
2833
        }
2834
}
×
2835

2836
//! Set flag for displaying Meridian Line
2837
void GridLinesMgr::setFlagMeridianLine(const bool displayed)
×
2838
{
2839
        if(displayed != meridianLine->isDisplayed())
×
2840
        {
2841
                meridianLine->setDisplayed(displayed);
×
2842
                emit meridianLineDisplayedChanged(displayed);
×
2843
        }
2844
}
×
2845
//! Get flag for displaying Meridian Line
2846
bool GridLinesMgr::getFlagMeridianLine() const
×
2847
{
2848
        return meridianLine->isDisplayed();
×
2849
}
2850
//! Set flag for displaying Meridian Line partitions
2851
void GridLinesMgr::setFlagMeridianParts(const bool displayed)
×
2852
{
2853
        if(displayed != meridianLine->showsPartitions())
×
2854
        {
2855
                meridianLine->setPartitions(displayed);
×
2856
                emit meridianPartsDisplayedChanged(displayed);
×
2857
        }
2858
}
×
2859
//! Get flag for displaying Meridian Line partitions
2860
bool GridLinesMgr::getFlagMeridianParts() const
×
2861
{
2862
        return meridianLine->showsPartitions();
×
2863
}
2864
//! Set flag for displaying Meridian Line partitions
2865
void GridLinesMgr::setFlagMeridianLabeled(const bool displayed)
×
2866
{
2867
        if(displayed != meridianLine->isLabeled())
×
2868
        {
2869
                meridianLine->setLabeled(displayed);
×
2870
                emit meridianPartsLabeledChanged(displayed);
×
2871
        }
2872
}
×
2873
//! Get flag for displaying Meridian Line partitions
2874
bool GridLinesMgr::getFlagMeridianLabeled() const
×
2875
{
2876
        return meridianLine->isLabeled();
×
2877
}
2878
Vec3f GridLinesMgr::getColorMeridianLine() const
×
2879
{
2880
        return meridianLine->getColor();
×
2881
}
2882
void GridLinesMgr::setColorMeridianLine(const Vec3f& newColor)
×
2883
{
2884
        if(newColor != meridianLine->getColor())
×
2885
        {
2886
                meridianLine->setColor(newColor);
×
2887
                emit meridianLineColorChanged(newColor);
×
2888
        }
2889
}
×
2890

2891
//! Set flag for displaying opposition/conjunction longitude line
2892
void GridLinesMgr::setFlagLongitudeLine(const bool displayed)
×
2893
{
2894
        if(displayed != longitudeLine->isDisplayed())
×
2895
        {
2896
                longitudeLine->setDisplayed(displayed);
×
2897
                emit longitudeLineDisplayedChanged(displayed);
×
2898
        }
2899
}
×
2900
//! Get flag for displaying opposition/conjunction longitude line
2901
bool GridLinesMgr::getFlagLongitudeLine() const
×
2902
{
2903
        return longitudeLine->isDisplayed();
×
2904
}
2905
//! Set flag for displaying opposition/conjunction longitude line partitions
2906
void GridLinesMgr::setFlagLongitudeParts(const bool displayed)
×
2907
{
2908
        if(displayed != longitudeLine->showsPartitions())
×
2909
        {
2910
                longitudeLine->setPartitions(displayed);
×
2911
                emit longitudePartsDisplayedChanged(displayed);
×
2912
        }
2913
}
×
2914
//! Get flag for displaying opposition/conjunction longitude line partitions
2915
bool GridLinesMgr::getFlagLongitudeParts() const
×
2916
{
2917
        return longitudeLine->showsPartitions();
×
2918
}
2919
//! Set flag for displaying opposition/conjunction longitude line partitions
2920
void GridLinesMgr::setFlagLongitudeLabeled(const bool displayed)
×
2921
{
2922
        if(displayed != longitudeLine->isLabeled())
×
2923
        {
2924
                longitudeLine->setLabeled(displayed);
×
2925
                emit longitudePartsLabeledChanged(displayed);
×
2926
        }
2927
}
×
2928
bool GridLinesMgr::getFlagLongitudeLabeled() const
×
2929
{
2930
        return longitudeLine->isLabeled();
×
2931
}
2932
Vec3f GridLinesMgr::getColorLongitudeLine() const
×
2933
{
2934
        return longitudeLine->getColor();
×
2935
}
2936
void GridLinesMgr::setColorLongitudeLine(const Vec3f& newColor)
×
2937
{
2938
        if(newColor != longitudeLine->getColor())
×
2939
        {
2940
                longitudeLine->setColor(newColor);
×
2941
                emit longitudeLineColorChanged(newColor);
×
2942
        }
2943
}
×
2944

2945
//! Set flag for displaying quadrature line
2946
void GridLinesMgr::setFlagQuadratureLine(const bool displayed)
×
2947
{
2948
        if(displayed != quadratureLine->isDisplayed())
×
2949
        {
2950
                quadratureLine->setDisplayed(displayed);
×
2951
                emit quadratureLineDisplayedChanged(displayed);
×
2952
        }
2953
}
×
2954
//! Get flag for displaying quadrature line
2955
bool GridLinesMgr::getFlagQuadratureLine() const
×
2956
{
2957
        return quadratureLine->isDisplayed();
×
2958
}
2959
Vec3f GridLinesMgr::getColorQuadratureLine() const
×
2960
{
2961
        return quadratureLine->getColor();
×
2962
}
2963
void GridLinesMgr::setColorQuadratureLine(const Vec3f& newColor)
×
2964
{
2965
        if(newColor != quadratureLine->getColor())
×
2966
        {
2967
                quadratureLine->setColor(newColor);
×
2968
                emit quadratureLineColorChanged(newColor);
×
2969
        }
2970
}
×
2971

2972
//! Set flag for displaying Horizon Line
2973
void GridLinesMgr::setFlagHorizonLine(const bool displayed)
×
2974
{
2975
        if(displayed != horizonLine->isDisplayed())
×
2976
        {
2977
                horizonLine->setDisplayed(displayed);
×
2978
                emit horizonLineDisplayedChanged(displayed);
×
2979
        }
2980
}
×
2981
//! Get flag for displaying Horizon Line
2982
bool GridLinesMgr::getFlagHorizonLine() const
×
2983
{
2984
        return horizonLine->isDisplayed();
×
2985
}
2986
//! Set flag for displaying Horizon Line partitions
2987
void GridLinesMgr::setFlagHorizonParts(const bool displayed)
×
2988
{
2989
        if(displayed != horizonLine->showsPartitions())
×
2990
        {
2991
                horizonLine->setPartitions(displayed);
×
2992
                emit horizonPartsDisplayedChanged(displayed);
×
2993
        }
2994
}
×
2995
//! Get flag for displaying Horizon Line partitions
2996
bool GridLinesMgr::getFlagHorizonParts() const
×
2997
{
2998
        return horizonLine->showsPartitions();
×
2999
}
3000
//! Set flag for displaying Horizon Line partitions
3001
void GridLinesMgr::setFlagHorizonLabeled(const bool displayed)
×
3002
{
3003
        if(displayed != horizonLine->isLabeled())
×
3004
        {
3005
                horizonLine->setLabeled(displayed);
×
3006
                emit horizonPartsLabeledChanged(displayed);
×
3007
        }
3008
}
×
3009
//! Get flag for displaying Horizon Line partitions
3010
bool GridLinesMgr::getFlagHorizonLabeled() const
×
3011
{
3012
        return horizonLine->isLabeled();
×
3013
}
3014
Vec3f GridLinesMgr::getColorHorizonLine() const
×
3015
{
3016
        return horizonLine->getColor();
×
3017
}
3018
void GridLinesMgr::setColorHorizonLine(const Vec3f& newColor)
×
3019
{
3020
        if(newColor != horizonLine->getColor())
×
3021
        {
3022
                horizonLine->setColor(newColor);
×
3023
                emit horizonLineColorChanged(newColor);
×
3024
        }
3025
}
×
3026

3027
//! Set flag for displaying Galactic Equator Line
3028
void GridLinesMgr::setFlagGalacticEquatorLine(const bool displayed)
×
3029
{
3030
        if(displayed != galacticEquatorLine->isDisplayed())
×
3031
        {
3032
                galacticEquatorLine->setDisplayed(displayed);
×
3033
                emit galacticEquatorLineDisplayedChanged(displayed);
×
3034
        }
3035
}
×
3036
//! Get flag for displaying Galactic Equator Line
3037
bool GridLinesMgr::getFlagGalacticEquatorLine() const
×
3038
{
3039
        return galacticEquatorLine->isDisplayed();
×
3040
}
3041
//! Set flag for displaying Galactic Equator Line partitions
3042
void GridLinesMgr::setFlagGalacticEquatorParts(const bool displayed)
×
3043
{
3044
        if(displayed != galacticEquatorLine->showsPartitions())
×
3045
        {
3046
                galacticEquatorLine->setPartitions(displayed);
×
3047
                emit galacticEquatorPartsDisplayedChanged(displayed);
×
3048
        }
3049
}
×
3050
//! Get flag for displaying Galactic Equator Line partitions
3051
bool GridLinesMgr::getFlagGalacticEquatorParts() const
×
3052
{
3053
        return galacticEquatorLine->showsPartitions();
×
3054
}
3055
//! Set flag for displaying Galactic Equator Line partitions
3056
void GridLinesMgr::setFlagGalacticEquatorLabeled(const bool displayed)
×
3057
{
3058
        if(displayed != galacticEquatorLine->isLabeled())
×
3059
        {
3060
                galacticEquatorLine->setLabeled(displayed);
×
3061
                emit galacticEquatorPartsLabeledChanged(displayed);
×
3062
        }
3063
}
×
3064
//! Get flag for displaying Galactic Equator Line partitions
3065
bool GridLinesMgr::getFlagGalacticEquatorLabeled() const
×
3066
{
3067
        return galacticEquatorLine->isLabeled();
×
3068
}
3069
Vec3f GridLinesMgr::getColorGalacticEquatorLine() const
×
3070
{
3071
        return galacticEquatorLine->getColor();
×
3072
}
3073
void GridLinesMgr::setColorGalacticEquatorLine(const Vec3f& newColor)
×
3074
{
3075
        if(newColor != galacticEquatorLine->getColor())
×
3076
        {
3077
                galacticEquatorLine->setColor(newColor);
×
3078
                emit galacticEquatorLineColorChanged(newColor);
×
3079
        }
3080
}
×
3081

3082
//! Set flag for displaying Supergalactic Equator Line
3083
void GridLinesMgr::setFlagSupergalacticEquatorLine(const bool displayed)
×
3084
{
3085
        if(displayed != supergalacticEquatorLine->isDisplayed())
×
3086
        {
3087
                supergalacticEquatorLine->setDisplayed(displayed);
×
3088
                emit supergalacticEquatorLineDisplayedChanged(displayed);
×
3089
        }
3090
}
×
3091
//! Get flag for displaying Supergalactic Equator Line
3092
bool GridLinesMgr::getFlagSupergalacticEquatorLine() const
×
3093
{
3094
        return supergalacticEquatorLine->isDisplayed();
×
3095
}
3096
//! Set flag for displaying Supergalactic Equator Line partitions
3097
void GridLinesMgr::setFlagSupergalacticEquatorParts(const bool displayed)
×
3098
{
3099
        if(displayed != supergalacticEquatorLine->showsPartitions())
×
3100
        {
3101
                supergalacticEquatorLine->setPartitions(displayed);
×
3102
                emit supergalacticEquatorPartsDisplayedChanged(displayed);
×
3103
        }
3104
}
×
3105
//! Get flag for displaying Supergalactic Equator Line partitions
3106
bool GridLinesMgr::getFlagSupergalacticEquatorParts() const
×
3107
{
3108
        return supergalacticEquatorLine->showsPartitions();
×
3109
}
3110
//! Set flag for displaying Supergalactic Equator Line partitions
3111
void GridLinesMgr::setFlagSupergalacticEquatorLabeled(const bool displayed)
×
3112
{
3113
        if(displayed != supergalacticEquatorLine->isLabeled())
×
3114
        {
3115
                supergalacticEquatorLine->setLabeled(displayed);
×
3116
                emit supergalacticEquatorPartsLabeledChanged(displayed);
×
3117
        }
3118
}
×
3119
//! Get flag for displaying Supergalactic Equator Line partitions
3120
bool GridLinesMgr::getFlagSupergalacticEquatorLabeled() const
×
3121
{
3122
        return supergalacticEquatorLine->isLabeled();
×
3123
}
3124
Vec3f GridLinesMgr::getColorSupergalacticEquatorLine() const
×
3125
{
3126
        return supergalacticEquatorLine->getColor();
×
3127
}
3128
void GridLinesMgr::setColorSupergalacticEquatorLine(const Vec3f& newColor)
×
3129
{
3130
        if(newColor != supergalacticEquatorLine->getColor())
×
3131
        {
3132
                supergalacticEquatorLine->setColor(newColor);
×
3133
                emit supergalacticEquatorLineColorChanged(newColor);
×
3134
        }
3135
}
×
3136

3137
//! Set flag for displaying Prime Vertical Line
3138
void GridLinesMgr::setFlagPrimeVerticalLine(const bool displayed)
×
3139
{
3140
        if(displayed != primeVerticalLine->isDisplayed())
×
3141
        {
3142
                primeVerticalLine->setDisplayed(displayed);
×
3143
                emit  primeVerticalLineDisplayedChanged(displayed);
×
3144
        }
3145
}
×
3146
//! Get flag for displaying Prime Vertical Line
3147
bool GridLinesMgr::getFlagPrimeVerticalLine() const
×
3148
{
3149
        return primeVerticalLine->isDisplayed();
×
3150
}
3151
//! Set flag for displaying Prime Vertical Line partitions
3152
void GridLinesMgr::setFlagPrimeVerticalParts(const bool displayed)
×
3153
{
3154
        if(displayed != primeVerticalLine->showsPartitions())
×
3155
        {
3156
                primeVerticalLine->setPartitions(displayed);
×
3157
                emit  primeVerticalPartsDisplayedChanged(displayed);
×
3158
        }
3159
}
×
3160
//! Get flag for displaying Prime Vertical Line partitions
3161
bool GridLinesMgr::getFlagPrimeVerticalParts() const
×
3162
{
3163
        return primeVerticalLine->showsPartitions();
×
3164
}
3165
//! Set flag for displaying Prime Vertical Line partitions
3166
void GridLinesMgr::setFlagPrimeVerticalLabeled(const bool displayed)
×
3167
{
3168
        if(displayed != primeVerticalLine->isLabeled())
×
3169
        {
3170
                primeVerticalLine->setLabeled(displayed);
×
3171
                emit  primeVerticalPartsLabeledChanged(displayed);
×
3172
        }
3173
}
×
3174
//! Get flag for displaying Prime Vertical Line partitions
3175
bool GridLinesMgr::getFlagPrimeVerticalLabeled() const
×
3176
{
3177
        return primeVerticalLine->isLabeled();
×
3178
}
3179
Vec3f GridLinesMgr::getColorPrimeVerticalLine() const
×
3180
{
3181
        return primeVerticalLine->getColor();
×
3182
}
3183
void GridLinesMgr::setColorPrimeVerticalLine(const Vec3f& newColor)
×
3184
{
3185
        if(newColor != primeVerticalLine->getColor())
×
3186
        {
3187
                primeVerticalLine->setColor(newColor);
×
3188
                emit primeVerticalLineColorChanged(newColor);
×
3189
        }
3190
}
×
3191

3192
//! Set flag for displaying Current Vertical Line
3193
void GridLinesMgr::setFlagCurrentVerticalLine(const bool displayed)
×
3194
{
3195
        if(displayed != currentVerticalLine->isDisplayed())
×
3196
        {
3197
                currentVerticalLine->setDisplayed(displayed);
×
3198
                emit  currentVerticalLineDisplayedChanged(displayed);
×
3199
        }
3200
}
×
3201
//! Get flag for displaying Current Vertical Line
3202
bool GridLinesMgr::getFlagCurrentVerticalLine() const
×
3203
{
3204
        return currentVerticalLine->isDisplayed();
×
3205
}
3206
//! Set flag for displaying Current Vertical Line partitions
3207
void GridLinesMgr::setFlagCurrentVerticalParts(const bool displayed)
×
3208
{
3209
        if(displayed != currentVerticalLine->showsPartitions())
×
3210
        {
3211
                currentVerticalLine->setPartitions(displayed);
×
3212
                emit  currentVerticalPartsDisplayedChanged(displayed);
×
3213
        }
3214
}
×
3215
//! Get flag for displaying Current Vertical Line partitions
3216
bool GridLinesMgr::getFlagCurrentVerticalParts() const
×
3217
{
3218
        return currentVerticalLine->showsPartitions();
×
3219
}
3220
//! Set flag for displaying Current Vertical Line partitions
3221
void GridLinesMgr::setFlagCurrentVerticalLabeled(const bool displayed)
×
3222
{
3223
        if(displayed != currentVerticalLine->isLabeled())
×
3224
        {
3225
                currentVerticalLine->setLabeled(displayed);
×
3226
                emit  currentVerticalPartsLabeledChanged(displayed);
×
3227
        }
3228
}
×
3229
//! Get flag for displaying Current Vertical Line partitions
3230
bool GridLinesMgr::getFlagCurrentVerticalLabeled() const
×
3231
{
3232
        return currentVerticalLine->isLabeled();
×
3233
}
3234
Vec3f GridLinesMgr::getColorCurrentVerticalLine() const
×
3235
{
3236
        return currentVerticalLine->getColor();
×
3237
}
3238
void GridLinesMgr::setColorCurrentVerticalLine(const Vec3f& newColor)
×
3239
{
3240
        if(newColor != currentVerticalLine->getColor())
×
3241
        {
3242
                currentVerticalLine->setColor(newColor);
×
3243
                emit currentVerticalLineColorChanged(newColor);
×
3244
        }
3245
}
×
3246

3247
//! Set flag for displaying Colure Lines
3248
void GridLinesMgr::setFlagColureLines(const bool displayed)
×
3249
{
3250
        if(displayed != colureLine_1->isDisplayed())
×
3251
        {
3252
                colureLine_1->setDisplayed(displayed);
×
3253
                colureLine_2->setDisplayed(displayed);
×
3254
                emit  colureLinesDisplayedChanged(displayed);
×
3255
        }
3256
}
×
3257
//! Get flag for displaying Colure Lines
3258
bool GridLinesMgr::getFlagColureLines() const
×
3259
{
3260
        return colureLine_1->isDisplayed();
×
3261
}
3262
//! Set flag for displaying Colure Line partitions
3263
void GridLinesMgr::setFlagColureParts(const bool displayed)
×
3264
{
3265
        if(displayed != colureLine_1->showsPartitions())
×
3266
        {
3267
                colureLine_1->setPartitions(displayed);
×
3268
                colureLine_2->setPartitions(displayed);
×
3269
                emit  colurePartsDisplayedChanged(displayed);
×
3270
        }
3271
}
×
3272
//! Get flag for displaying Colure Line partitions
3273
bool GridLinesMgr::getFlagColureParts() const
×
3274
{
3275
        return colureLine_1->showsPartitions();
×
3276
}
3277
void GridLinesMgr::setFlagColureLabeled(const bool displayed)
×
3278
{
3279
        if(displayed != colureLine_1->isLabeled())
×
3280
        {
3281
                colureLine_1->setLabeled(displayed);
×
3282
                colureLine_2->setLabeled(displayed);
×
3283
                emit  colurePartsLabeledChanged(displayed);
×
3284
        }
3285
}
×
3286
//! Get flag for displaying Colure Line partitions
3287
bool GridLinesMgr::getFlagColureLabeled() const
×
3288
{
3289
        return colureLine_1->isLabeled();
×
3290
}
3291
Vec3f GridLinesMgr::getColorColureLines() const
×
3292
{
3293
        return colureLine_1->getColor();
×
3294
}
3295
void GridLinesMgr::setColorColureLines(const Vec3f& newColor)
×
3296
{
3297
        if(newColor != colureLine_1->getColor())
×
3298
        {
3299
                colureLine_1->setColor(newColor);
×
3300
                colureLine_2->setColor(newColor);
×
3301
                emit colureLinesColorChanged(newColor);
×
3302
        }
3303
}
×
3304

3305
//! Set flag for displaying Circumpolar Circles
3306
void GridLinesMgr::setFlagCircumpolarCircles(const bool displayed)
×
3307
{
3308
        if(displayed != circumpolarCircleN->isDisplayed())
×
3309
        {
3310
                circumpolarCircleN->setDisplayed(displayed);
×
3311
                circumpolarCircleS->setDisplayed(displayed);
×
3312
                emit circumpolarCirclesDisplayedChanged(displayed);
×
3313
        }
3314
}
×
3315
//! Get flag for displaying Circumpolar Circles
3316
bool GridLinesMgr::getFlagCircumpolarCircles() const
×
3317
{
3318
        // circumpolarCircleS is always synchronous, no separate queries.
3319
        return circumpolarCircleN->isDisplayed();
×
3320
}
3321
Vec3f GridLinesMgr::getColorCircumpolarCircles() const
×
3322
{
3323
        return circumpolarCircleN->getColor();
×
3324
}
3325
void GridLinesMgr::setColorCircumpolarCircles(const Vec3f& newColor)
×
3326
{
3327
        if(newColor != circumpolarCircleN->getColor())
×
3328
        {
3329
                circumpolarCircleN->setColor(newColor);
×
3330
                circumpolarCircleS->setColor(newColor);
×
3331
                emit circumpolarCirclesColorChanged(newColor);
×
3332
        }
3333
}
×
3334

3335
//! Set flag for displaying Umbra Circle
3336
void GridLinesMgr::setFlagUmbraCircle(const bool displayed)
×
3337
{
3338
        if(displayed != umbraCircle->isDisplayed())
×
3339
        {
3340
                umbraCircle->setDisplayed(displayed);
×
3341
                emit umbraCircleDisplayedChanged(displayed);
×
3342
        }
3343
}
×
3344
//! Get flag for displaying Umbra Circle
3345
bool GridLinesMgr::getFlagUmbraCircle() const
×
3346
{
3347
        return umbraCircle->isDisplayed();
×
3348
}
3349
Vec3f GridLinesMgr::getColorUmbraCircle() const
×
3350
{
3351
        return umbraCircle->getColor();
×
3352
}
3353
void GridLinesMgr::setColorUmbraCircle(const Vec3f& newColor)
×
3354
{
3355
        if(newColor != umbraCircle->getColor())
×
3356
        {
3357
                umbraCircle->setColor(newColor);
×
3358
                umbraCenterPoint->setColor(newColor);
×
3359
                emit umbraCircleColorChanged(newColor);
×
3360
        }
3361
}
×
3362

3363
//! Set flag for displaying Penumbra Circle
3364
void GridLinesMgr::setFlagPenumbraCircle(const bool displayed)
×
3365
{
3366
        if(displayed != penumbraCircle->isDisplayed())
×
3367
        {
3368
                penumbraCircle->setDisplayed(displayed);
×
3369
                emit penumbraCircleDisplayedChanged(displayed);
×
3370
        }
3371
}
×
3372
//! Get flag for displaying Penumbra Circle
3373
bool GridLinesMgr::getFlagPenumbraCircle() const
×
3374
{
3375
        return penumbraCircle->isDisplayed();
×
3376
}
3377
Vec3f GridLinesMgr::getColorPenumbraCircle() const
×
3378
{
3379
        return penumbraCircle->getColor();
×
3380
}
3381
void GridLinesMgr::setColorPenumbraCircle(const Vec3f& newColor)
×
3382
{
3383
        if(newColor != penumbraCircle->getColor())
×
3384
        {
3385
                penumbraCircle->setColor(newColor);
×
3386
                emit penumbraCircleColorChanged(newColor);
×
3387
        }
3388
}
×
3389

3390
//! Set flag for displaying celestial poles of J2000
3391
void GridLinesMgr::setFlagCelestialJ2000Poles(const bool displayed)
×
3392
{
3393
        if(displayed != celestialJ2000Poles->isDisplayed())
×
3394
        {
3395
                celestialJ2000Poles->setDisplayed(displayed);
×
3396
                emit celestialJ2000PolesDisplayedChanged(displayed);
×
3397
        }
3398
}
×
3399
//! Get flag for displaying celestial poles of J2000
3400
bool GridLinesMgr::getFlagCelestialJ2000Poles() const
×
3401
{
3402
        return celestialJ2000Poles->isDisplayed();
×
3403
}
3404
Vec3f GridLinesMgr::getColorCelestialJ2000Poles() const
×
3405
{
3406
        return celestialJ2000Poles->getColor();
×
3407
}
3408
void GridLinesMgr::setColorCelestialJ2000Poles(const Vec3f& newColor)
×
3409
{
3410
        if(newColor != celestialJ2000Poles->getColor())
×
3411
        {
3412
                celestialJ2000Poles->setColor(newColor);
×
3413
                emit celestialJ2000PolesColorChanged(newColor);
×
3414
        }
3415
}
×
3416

3417
//! Set flag for displaying celestial poles
3418
void GridLinesMgr::setFlagCelestialPoles(const bool displayed)
×
3419
{
3420
        if(displayed != celestialPoles->isDisplayed())
×
3421
        {
3422
                celestialPoles->setDisplayed(displayed);
×
3423
                emit celestialPolesDisplayedChanged(displayed);
×
3424
        }
3425
}
×
3426
//! Get flag for displaying celestial poles
3427
bool GridLinesMgr::getFlagCelestialPoles() const
×
3428
{
3429
        return celestialPoles->isDisplayed();
×
3430
}
3431
Vec3f GridLinesMgr::getColorCelestialPoles() const
×
3432
{
3433
        return celestialPoles->getColor();
×
3434
}
3435
void GridLinesMgr::setColorCelestialPoles(const Vec3f& newColor)
×
3436
{
3437
        if(newColor != celestialPoles->getColor())
×
3438
        {
3439
                celestialPoles->setColor(newColor);
×
3440
                emit celestialPolesColorChanged(newColor);
×
3441
        }
3442
}
×
3443

3444
//! Set flag for displaying zenith and nadir
3445
void GridLinesMgr::setFlagZenithNadir(const bool displayed)
×
3446
{
3447
        if(displayed != zenithNadir->isDisplayed())
×
3448
        {
3449
                zenithNadir->setDisplayed(displayed);
×
3450
                emit zenithNadirDisplayedChanged(displayed);
×
3451
        }
3452
}
×
3453
//! Get flag for displaying zenith and nadir
3454
bool GridLinesMgr::getFlagZenithNadir() const
×
3455
{
3456
        return zenithNadir->isDisplayed();
×
3457
}
3458
Vec3f GridLinesMgr::getColorZenithNadir() const
×
3459
{
3460
        return zenithNadir->getColor();
×
3461
}
3462
void GridLinesMgr::setColorZenithNadir(const Vec3f& newColor)
×
3463
{
3464
        if(newColor != zenithNadir->getColor())
×
3465
        {
3466
                zenithNadir->setColor(newColor);
×
3467
                emit zenithNadirColorChanged(newColor);
×
3468
        }
3469
}
×
3470

3471
//! Set flag for displaying ecliptic poles of J2000
3472
void GridLinesMgr::setFlagEclipticJ2000Poles(const bool displayed)
×
3473
{
3474
        if(displayed != eclipticJ2000Poles->isDisplayed())
×
3475
        {
3476
                eclipticJ2000Poles->setDisplayed(displayed);
×
3477
                emit eclipticJ2000PolesDisplayedChanged(displayed);
×
3478
        }
3479
}
×
3480
//! Get flag for displaying ecliptic poles of J2000
3481
bool GridLinesMgr::getFlagEclipticJ2000Poles() const
×
3482
{
3483
        return eclipticJ2000Poles->isDisplayed();
×
3484
}
3485
Vec3f GridLinesMgr::getColorEclipticJ2000Poles() const
×
3486
{
3487
        return eclipticJ2000Poles->getColor();
×
3488
}
3489
void GridLinesMgr::setColorEclipticJ2000Poles(const Vec3f& newColor)
×
3490
{
3491
        if(newColor != eclipticJ2000Poles->getColor())
×
3492
        {
3493
                eclipticJ2000Poles->setColor(newColor);
×
3494
                emit eclipticJ2000PolesColorChanged(newColor);
×
3495
        }
3496
}
×
3497

3498
//! Set flag for displaying ecliptic poles
3499
void GridLinesMgr::setFlagEclipticPoles(const bool displayed)
×
3500
{
3501
        if(displayed != eclipticPoles->isDisplayed())
×
3502
        {
3503
                eclipticPoles->setDisplayed(displayed);
×
3504
                emit eclipticPolesDisplayedChanged(displayed);
×
3505
        }
3506
}
×
3507
//! Get flag for displaying ecliptic poles
3508
bool GridLinesMgr::getFlagEclipticPoles() const
×
3509
{
3510
        return eclipticPoles->isDisplayed();
×
3511
}
3512
Vec3f GridLinesMgr::getColorEclipticPoles() const
×
3513
{
3514
        return eclipticPoles->getColor();
×
3515
}
3516
void GridLinesMgr::setColorEclipticPoles(const Vec3f& newColor)
×
3517
{
3518
        if(newColor != eclipticPoles->getColor())
×
3519
        {
3520
                eclipticPoles->setColor(newColor);
×
3521
                emit eclipticPolesColorChanged(newColor);
×
3522
        }
3523
}
×
3524

3525
//! Set flag for displaying galactic poles
3526
void GridLinesMgr::setFlagGalacticPoles(const bool displayed)
×
3527
{
3528
        if(displayed != galacticPoles->isDisplayed())
×
3529
        {
3530
                galacticPoles->setDisplayed(displayed);
×
3531
                emit galacticPolesDisplayedChanged(displayed);
×
3532
        }
3533
}
×
3534
//! Get flag for displaying galactic poles
3535
bool GridLinesMgr::getFlagGalacticPoles() const
×
3536
{
3537
        return galacticPoles->isDisplayed();
×
3538
}
3539
Vec3f GridLinesMgr::getColorGalacticPoles() const
×
3540
{
3541
        return galacticPoles->getColor();
×
3542
}
3543
void GridLinesMgr::setColorGalacticPoles(const Vec3f& newColor)
×
3544
{
3545
        if(newColor != galacticPoles->getColor())
×
3546
        {
3547
                galacticPoles->setColor(newColor);
×
3548
                emit galacticPolesColorChanged(newColor);
×
3549
        }
3550
}
×
3551

3552
//! Set flag for displaying galactic center and anticenter markers
3553
void GridLinesMgr::setFlagGalacticCenter(const bool displayed)
×
3554
{
3555
        if(displayed != galacticCenter->isDisplayed())
×
3556
        {
3557
                galacticCenter->setDisplayed(displayed);
×
3558
                emit galacticCenterDisplayedChanged(displayed);
×
3559
        }
3560
}
×
3561
//! Get flag for displaying galactic center and anticenter markers
3562
bool GridLinesMgr::getFlagGalacticCenter() const
×
3563
{
3564
        return galacticCenter->isDisplayed();
×
3565
}
3566
Vec3f GridLinesMgr::getColorGalacticCenter() const
×
3567
{
3568
        return galacticCenter->getColor();
×
3569
}
3570
void GridLinesMgr::setColorGalacticCenter(const Vec3f& newColor)
×
3571
{
3572
        if(newColor != galacticCenter->getColor())
×
3573
        {
3574
                galacticCenter->setColor(newColor);
×
3575
                emit galacticCenterColorChanged(newColor);
×
3576
        }
3577
}
×
3578

3579
//! Set flag for displaying supergalactic poles
3580
void GridLinesMgr::setFlagSupergalacticPoles(const bool displayed)
×
3581
{
3582
        if(displayed != supergalacticPoles->isDisplayed())
×
3583
        {
3584
                supergalacticPoles->setDisplayed(displayed);
×
3585
                emit supergalacticPolesDisplayedChanged(displayed);
×
3586
        }
3587
}
×
3588
//! Get flag for displaying supergalactic poles
3589
bool GridLinesMgr::getFlagSupergalacticPoles() const
×
3590
{
3591
        return supergalacticPoles->isDisplayed();
×
3592
}
3593
Vec3f GridLinesMgr::getColorSupergalacticPoles() const
×
3594
{
3595
        return supergalacticPoles->getColor();
×
3596
}
3597
void GridLinesMgr::setColorSupergalacticPoles(const Vec3f& newColor)
×
3598
{
3599
        if(newColor != supergalacticPoles->getColor())
×
3600
        {
3601
                supergalacticPoles->setColor(newColor);
×
3602
                emit supergalacticPolesColorChanged(newColor);
×
3603
        }
3604
}
×
3605

3606
//! Set flag for displaying equinox points of J2000
3607
void GridLinesMgr::setFlagEquinoxJ2000Points(const bool displayed)
×
3608
{
3609
        if(displayed != equinoxJ2000Points->isDisplayed())
×
3610
        {
3611
                equinoxJ2000Points->setDisplayed(displayed);
×
3612
                emit equinoxJ2000PointsDisplayedChanged(displayed);
×
3613
        }
3614
}
×
3615
//! Get flag for displaying equinox points of J2000
3616
bool GridLinesMgr::getFlagEquinoxJ2000Points() const
×
3617
{
3618
        return equinoxJ2000Points->isDisplayed();
×
3619
}
3620
Vec3f GridLinesMgr::getColorEquinoxJ2000Points() const
×
3621
{
3622
        return equinoxJ2000Points->getColor();
×
3623
}
3624
void GridLinesMgr::setColorEquinoxJ2000Points(const Vec3f& newColor)
×
3625
{
3626
        if(newColor != equinoxJ2000Points->getColor())
×
3627
        {
3628
                equinoxJ2000Points->setColor(newColor);
×
3629
                emit equinoxJ2000PointsColorChanged(newColor);
×
3630
        }
3631
}
×
3632

3633
//! Set flag for displaying equinox points
3634
void GridLinesMgr::setFlagEquinoxPoints(const bool displayed)
×
3635
{
3636
        if(displayed != equinoxPoints->isDisplayed())
×
3637
        {
3638
                equinoxPoints->setDisplayed(displayed);
×
3639
                emit equinoxPointsDisplayedChanged(displayed);
×
3640
        }
3641
}
×
3642
//! Get flag for displaying equinox points
3643
bool GridLinesMgr::getFlagEquinoxPoints() const
×
3644
{
3645
        return equinoxPoints->isDisplayed();
×
3646
}
3647
Vec3f GridLinesMgr::getColorEquinoxPoints() const
×
3648
{
3649
        return equinoxPoints->getColor();
×
3650
}
3651
void GridLinesMgr::setColorEquinoxPoints(const Vec3f& newColor)
×
3652
{
3653
        if(newColor != equinoxPoints->getColor())
×
3654
        {
3655
                equinoxPoints->setColor(newColor);
×
3656
                emit equinoxPointsColorChanged(newColor);
×
3657
        }
3658
}
×
3659

3660
//! Set flag for displaying solstice points of J2000
3661
void GridLinesMgr::setFlagSolsticeJ2000Points(const bool displayed)
×
3662
{
3663
        if(displayed != solsticeJ2000Points->isDisplayed())
×
3664
        {
3665
                solsticeJ2000Points->setDisplayed(displayed);
×
3666
                emit solsticeJ2000PointsDisplayedChanged(displayed);
×
3667
        }
3668
}
×
3669
//! Get flag for displaying solstice points of J2000
3670
bool GridLinesMgr::getFlagSolsticeJ2000Points() const
×
3671
{
3672
        return solsticeJ2000Points->isDisplayed();
×
3673
}
3674
Vec3f GridLinesMgr::getColorSolsticeJ2000Points() const
×
3675
{
3676
        return solsticeJ2000Points->getColor();
×
3677
}
3678
void GridLinesMgr::setColorSolsticeJ2000Points(const Vec3f& newColor)
×
3679
{
3680
        if(newColor != solsticeJ2000Points->getColor())
×
3681
        {
3682
                solsticeJ2000Points->setColor(newColor);
×
3683
                emit solsticeJ2000PointsColorChanged(newColor);
×
3684
        }
3685
}
×
3686

3687
//! Set flag for displaying solstice points
3688
void GridLinesMgr::setFlagSolsticePoints(const bool displayed)
×
3689
{
3690
        if(displayed != solsticePoints->isDisplayed())
×
3691
        {
3692
                solsticePoints->setDisplayed(displayed);
×
3693
                emit solsticePointsDisplayedChanged(displayed);
×
3694
        }
3695
}
×
3696
//! Get flag for displaying solstice points
3697
bool GridLinesMgr::getFlagSolsticePoints() const
×
3698
{
3699
        return solsticePoints->isDisplayed();
×
3700
}
3701
Vec3f GridLinesMgr::getColorSolsticePoints() const
×
3702
{
3703
        return solsticePoints->getColor();
×
3704
}
3705
void GridLinesMgr::setColorSolsticePoints(const Vec3f& newColor)
×
3706
{
3707
        if(newColor != solsticePoints->getColor())
×
3708
        {
3709
                solsticePoints->setColor(newColor);
×
3710
                emit solsticePointsColorChanged(newColor);
×
3711
        }
3712
}
×
3713

3714
//! Set flag for displaying antisolar point
3715
void GridLinesMgr::setFlagAntisolarPoint(const bool displayed)
×
3716
{
3717
        if(displayed != antisolarPoint->isDisplayed())
×
3718
        {
3719
                antisolarPoint->setDisplayed(displayed);
×
3720
                emit antisolarPointDisplayedChanged(displayed);
×
3721
        }
3722
}
×
3723
//! Get flag for displaying antisolar point
3724
bool GridLinesMgr::getFlagAntisolarPoint() const
×
3725
{
3726
        return antisolarPoint->isDisplayed();
×
3727
}
3728
Vec3f GridLinesMgr::getColorAntisolarPoint() const
×
3729
{
3730
        return antisolarPoint->getColor();
×
3731
}
3732
void GridLinesMgr::setColorAntisolarPoint(const Vec3f& newColor)
×
3733
{
3734
        if(newColor != antisolarPoint->getColor())
×
3735
        {
3736
                antisolarPoint->setColor(newColor);
×
3737
                emit antisolarPointColorChanged(newColor);
×
3738
        }
3739
}
×
3740

3741
void GridLinesMgr::setFlagUmbraCenterPoint(const bool displayed)
×
3742
{
3743
        if(displayed != umbraCenterPoint->isDisplayed())
×
3744
        {
3745
                umbraCenterPoint->setDisplayed(displayed);
×
3746
                emit umbraCenterPointDisplayedChanged(displayed);
×
3747
        }
3748
}
×
3749
bool GridLinesMgr::getFlagUmbraCenterPoint() const
×
3750
{
3751
        return umbraCenterPoint->isDisplayed();
×
3752
}
3753

3754
//! Set flag for displaying vector point
3755
void GridLinesMgr::setFlagApexPoints(const bool displayed)
×
3756
{
3757
        if(displayed != apexPoints->isDisplayed())
×
3758
        {
3759
                apexPoints->setDisplayed(displayed);
×
3760
                emit apexPointsDisplayedChanged(displayed);
×
3761
        }
3762
}
×
3763
//! Get flag for displaying vector point
3764
bool GridLinesMgr::getFlagApexPoints() const
×
3765
{
3766
        return apexPoints->isDisplayed();
×
3767
}
3768
Vec3f GridLinesMgr::getColorApexPoints() const
×
3769
{
3770
        return apexPoints->getColor();
×
3771
}
3772
void GridLinesMgr::setColorApexPoints(const Vec3f& newColor)
×
3773
{
3774
        if(newColor != apexPoints->getColor())
×
3775
        {
3776
                apexPoints->setColor(newColor);
×
3777
                emit apexPointsColorChanged(newColor);
×
3778
        }
3779
}
×
3780

3781
void GridLinesMgr::setLineThickness(const float thickness)
×
3782
{
3783
        float lineThickness = equGrid->getLineThickness();
×
3784
        if (!qFuzzyCompare(lineThickness, thickness))
×
3785
        {
3786
                lineThickness=qBound(1.f, thickness, 5.f);
×
3787
                // Grids
3788
                equGrid->setLineThickness(lineThickness);
×
3789
                equJ2000Grid->setLineThickness(lineThickness);
×
3790
                fixedEquatorialGrid->setLineThickness(lineThickness);
×
3791
                galacticGrid->setLineThickness(lineThickness);
×
3792
                supergalacticGrid->setLineThickness(lineThickness);
×
3793
                eclGrid->setLineThickness(lineThickness);
×
3794
                eclJ2000Grid->setLineThickness(lineThickness);
×
3795
                aziGrid->setLineThickness(lineThickness);
×
3796
                // Lines
3797
                equatorLine->setLineThickness(lineThickness);
×
3798
                equatorJ2000Line->setLineThickness(lineThickness);
×
3799
                fixedEquatorLine->setLineThickness(lineThickness);
×
3800
                eclipticLine->setLineThickness(lineThickness);
×
3801
                eclipticJ2000Line->setLineThickness(lineThickness);
×
3802
                invariablePlaneLine->setLineThickness(lineThickness);
×
3803
                solarEquatorLine->setLineThickness(lineThickness);
×
3804
                precessionCircleN->setLineThickness(lineThickness);
×
3805
                precessionCircleS->setLineThickness(lineThickness);
×
3806
                meridianLine->setLineThickness(lineThickness);
×
3807
                longitudeLine->setLineThickness(lineThickness);
×
3808
                quadratureLine->setLineThickness(lineThickness);
×
3809
                horizonLine->setLineThickness(lineThickness);
×
3810
                galacticEquatorLine->setLineThickness(lineThickness);
×
3811
                supergalacticEquatorLine->setLineThickness(lineThickness);
×
3812
                primeVerticalLine->setLineThickness(lineThickness);
×
3813
                currentVerticalLine->setLineThickness(lineThickness);
×
3814
                colureLine_1->setLineThickness(lineThickness);
×
3815
                colureLine_2->setLineThickness(lineThickness);
×
3816
                circumpolarCircleN->setLineThickness(lineThickness);
×
3817
                circumpolarCircleS->setLineThickness(lineThickness);
×
3818
                umbraCircle->setLineThickness(lineThickness);
×
3819
                penumbraCircle->setLineThickness(lineThickness);
×
3820

3821
                emit lineThicknessChanged(lineThickness);
×
3822
        }
3823
}
×
3824

3825
float GridLinesMgr::getLineThickness() const
×
3826
{
3827
        return equGrid->getLineThickness();
×
3828
}
3829

3830
void GridLinesMgr::setPartThickness(const float thickness)
×
3831
{
3832
        float partThickness = equatorLine->getPartThickness();
×
3833
        if (!qFuzzyCompare(partThickness, thickness))
×
3834
        {
3835
                partThickness=qBound(1.f, thickness, 5.f);
×
3836
                // Lines
3837
                equatorLine->setPartThickness(partThickness);
×
3838
                equatorJ2000Line->setPartThickness(partThickness);
×
3839
                fixedEquatorLine->setPartThickness(partThickness);
×
3840
                eclipticLine->setPartThickness(partThickness);
×
3841
                eclipticJ2000Line->setPartThickness(partThickness);
×
3842
                //invariablePlaneLine->setPartThickness(partThickness);
3843
                solarEquatorLine->setPartThickness(partThickness);
×
3844
                precessionCircleN->setPartThickness(partThickness);
×
3845
                precessionCircleS->setPartThickness(partThickness);
×
3846
                meridianLine->setPartThickness(partThickness);
×
3847
                longitudeLine->setPartThickness(partThickness);
×
3848
                horizonLine->setPartThickness(partThickness);
×
3849
                galacticEquatorLine->setPartThickness(partThickness);
×
3850
                supergalacticEquatorLine->setPartThickness(partThickness);
×
3851
                primeVerticalLine->setPartThickness(partThickness);
×
3852
                currentVerticalLine->setPartThickness(partThickness);
×
3853
                colureLine_1->setPartThickness(partThickness);
×
3854
                colureLine_2->setPartThickness(partThickness);
×
3855
                //circumpolarCircleN->setPartThickness(partThickness);
3856
                //circumpolarCircleS->setPartThickness(partThickness);
3857

3858
                emit partThicknessChanged(partThickness);
×
3859
        }
3860
}
×
3861

3862
float GridLinesMgr::getPartThickness() const
×
3863
{
3864
        return equatorLine->getPartThickness();
×
3865
}
3866

3867
void GridLinesMgr::setFontSizeFromApp(int size)
×
3868
{
3869
        const int gridFontSize=size-1;
×
3870
        const int lineFontSize=size+1;
×
3871
        const int pointFontSize=size+1;
×
3872

3873
        equGrid->setFontSize(gridFontSize);
×
3874
        equJ2000Grid->setFontSize(gridFontSize);
×
3875
        fixedEquatorialGrid->setFontSize(gridFontSize);
×
3876
        galacticGrid->setFontSize(gridFontSize);
×
3877
        supergalacticGrid->setFontSize(gridFontSize);
×
3878
        eclGrid->setFontSize(gridFontSize);
×
3879
        eclJ2000Grid->setFontSize(gridFontSize);
×
3880
        aziGrid->setFontSize(gridFontSize);
×
3881
        equatorLine->setFontSize(lineFontSize);
×
3882
        equatorJ2000Line->setFontSize(lineFontSize);
×
3883
        fixedEquatorLine->setFontSize(lineFontSize);
×
3884
        eclipticLine->setFontSize(lineFontSize);
×
3885
        eclipticJ2000Line->setFontSize(lineFontSize);
×
3886
        invariablePlaneLine->setFontSize(lineFontSize);
×
3887
        solarEquatorLine->setFontSize(lineFontSize);
×
3888
        precessionCircleN->setFontSize(lineFontSize);
×
3889
        precessionCircleS->setFontSize(lineFontSize);
×
3890
        meridianLine->setFontSize(lineFontSize);
×
3891
        longitudeLine->setFontSize(lineFontSize);
×
3892
        quadratureLine->setFontSize(lineFontSize);
×
3893
        horizonLine->setFontSize(lineFontSize);
×
3894
        galacticEquatorLine->setFontSize(lineFontSize);
×
3895
        supergalacticEquatorLine->setFontSize(lineFontSize);
×
3896
        primeVerticalLine->setFontSize(lineFontSize);
×
3897
        currentVerticalLine->setFontSize(lineFontSize);
×
3898
        colureLine_1->setFontSize(lineFontSize);
×
3899
        colureLine_2->setFontSize(lineFontSize);
×
3900
        circumpolarCircleN->setFontSize(lineFontSize);
×
3901
        circumpolarCircleS->setFontSize(lineFontSize);
×
3902
        umbraCircle->setFontSize(lineFontSize);
×
3903
        penumbraCircle->setFontSize(lineFontSize);
×
3904
        celestialJ2000Poles->setFontSize(pointFontSize);
×
3905
        celestialPoles->setFontSize(pointFontSize);
×
3906
        zenithNadir->setFontSize(pointFontSize);
×
3907
        eclipticJ2000Poles->setFontSize(pointFontSize);
×
3908
        eclipticPoles->setFontSize(pointFontSize);
×
3909
        galacticPoles->setFontSize(pointFontSize);
×
3910
        galacticCenter->setFontSize(pointFontSize);
×
3911
        supergalacticPoles->setFontSize(pointFontSize);
×
3912
        equinoxJ2000Points->setFontSize(pointFontSize);
×
3913
        equinoxPoints->setFontSize(pointFontSize);
×
3914
        solsticeJ2000Points->setFontSize(pointFontSize);
×
3915
        solsticePoints->setFontSize(pointFontSize);
×
3916
        apexPoints->setFontSize(pointFontSize);
×
3917
        umbraCenterPoint->setFontSize(pointFontSize);
×
3918
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc