blob: e01db67b26d75ff44e7fef1032629c15f2144389 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Data Visualization module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef SCATTERDATAMODIFIER_H
#define SCATTERDATAMODIFIER_H
#include "star.h"
#include <QtDataVisualization/q3dscatter.h>
#include <QtDataVisualization/qabstract3dseries.h>
#include <QtGui/QFont>
#include <QtWidgets/QSlider>
#include <QtWidgets/QLabel>
using namespace QtDataVisualization;
class GalaxyData : public QObject
{
Q_OBJECT
public:
explicit GalaxyData(Q3DScatter *scatter,
qreal rad = 13000,
qreal radCore = 4000.0,
qreal deltaAng = 0.0004,
qreal ex1 = 0.9,
qreal ex2 = 0.9);
~GalaxyData();
qreal getExcentricity(qreal r) const;
qreal getAngularOffset(qreal rad) const;
void radiusGalaxyChanged(int value);
void radiusCoreChanged(int value);
void angleOffsetChanged(int value);
void eccentricityInnerChanged(int value);
void eccentricityOuterChanged(int value);
void resetValues();
void setFilteredEnabled(bool enabled);
void setStaticEnabled(bool enabled);
void setStarsVisible(bool enabled);
void setDustVisible(bool enabled);
void setH2Visible(bool enabled);
inline void setSliders(QSlider *rg,
QSlider *rc,
QSlider *ao,
QSlider *ei,
QSlider *eo) {
m_radiusGalaxySlider = rg;
m_radiusCoreSlider = rc;
m_angleOffsetSlider = ao;
m_eccentricityInnerSlider = ei;
m_eccentricityOuterSlider = eo;
}
void setFpsLabel(QLabel *fpsLabel) { m_fpsLabel = fpsLabel; }
void handleFpsChange(qreal fps);
private:
void createGalaxy();
void checkMinMax(const Star &star);
void createNormalDataView();
void createFilteredView();
void createSeries();
qreal value;
private:
Q3DScatter *m_graph;
QScatter3DSeries *m_normalSeries;
QScatter3DSeries *m_dustSeries;
QScatter3DSeries *m_H2Series;
QScatter3DSeries *m_filteredSeries;
Star *m_pStars;
Star *m_pDust;
Star *m_pH2;
qreal m_elEx1; // Excentricity of the innermost ellipse
qreal m_elEx2; // Excentricity of the outermost ellipse
qreal m_angleOffset; // Angular offset per parsec
qreal m_radCore; // Radius of the inner core
qreal m_radGalaxy; // Radius of the galaxy
qreal m_radFarField; // The radius after which all density waves must have circular shape
QSlider *m_radiusGalaxySlider;
QSlider *m_radiusCoreSlider;
QSlider *m_angleOffsetSlider;
QSlider *m_eccentricityInnerSlider;
QSlider *m_eccentricityOuterSlider;
QLabel *m_fpsLabel;
qreal m_minx;
qreal m_maxx;
qreal m_miny;
qreal m_maxy;
int m_range;
bool m_filtered;
};
#endif