| 1 | /* |
| 2 | testplot_widget.cpp |
| 3 | SPDX-FileCopyrightText: 2006 Jason Harris <kstars@30doradus.org> |
| 4 | |
| 5 | SPDX-License-Identifier: GPL-2.0-or-later |
| 6 | */ |
| 7 | |
| 8 | #include <QComboBox> |
| 9 | #include <QPen> |
| 10 | #include <QVBoxLayout> |
| 11 | #include <math.h> |
| 12 | |
| 13 | #include "kplotaxis.h" |
| 14 | #include "kplotobject.h" |
| 15 | #include "kplotwidget.h" |
| 16 | #include "testplot_widget.h" |
| 17 | |
| 18 | TestPlot::TestPlot(QWidget *p) |
| 19 | : QMainWindow(p) |
| 20 | , po1(nullptr) |
| 21 | , po2(nullptr) |
| 22 | { |
| 23 | QWidget *w = new QWidget(this); |
| 24 | vlay = new QVBoxLayout(w); |
| 25 | |
| 26 | PlotSelector = new QComboBox(w); |
| 27 | PlotSelector->addItem(QStringLiteral("Points plot" )); |
| 28 | PlotSelector->addItem(QStringLiteral("Lines plot" )); |
| 29 | PlotSelector->addItem(QStringLiteral("Bars plot" )); |
| 30 | PlotSelector->addItem(QStringLiteral("Points plot with labels" )); |
| 31 | PlotSelector->addItem(QStringLiteral("Points, lines and bars" )); |
| 32 | PlotSelector->addItem(QStringLiteral("Points, lines and bars with labels" )); |
| 33 | |
| 34 | plot = new KPlotWidget(w); |
| 35 | plot->setMinimumSize(minw: 400, minh: 400); |
| 36 | plot->setAntialiasing(true); |
| 37 | vlay->addWidget(PlotSelector); |
| 38 | vlay->addWidget(plot); |
| 39 | |
| 40 | setCentralWidget(w); |
| 41 | |
| 42 | connect(sender: PlotSelector, signal: qOverload<int>(&QComboBox::activated), context: this, slot: &TestPlot::slotSelectPlot); |
| 43 | |
| 44 | slotSelectPlot(index: PlotSelector->currentIndex()); |
| 45 | } |
| 46 | |
| 47 | void TestPlot::slotSelectPlot(int n) |
| 48 | { |
| 49 | plot->resetPlot(); |
| 50 | |
| 51 | switch (n) { |
| 52 | case 0: { // Points plot |
| 53 | plot->setLimits(x1: -6.0, x2: 11.0, y1: -10.0, y2: 110.0); |
| 54 | |
| 55 | po1 = new KPlotObject(Qt::white, KPlotObject::Points, 4, KPlotObject::Asterisk); |
| 56 | po2 = new KPlotObject(Qt::green, KPlotObject::Points, 4, KPlotObject::Triangle); |
| 57 | |
| 58 | for (float x = -5.0; x <= 10.0; x += 1.0) { |
| 59 | po1->addPoint(x, y: x * x); |
| 60 | po2->addPoint(x, y: 50.0 - 5.0 * x); |
| 61 | } |
| 62 | |
| 63 | plot->addPlotObject(object: po1); |
| 64 | plot->addPlotObject(object: po2); |
| 65 | |
| 66 | plot->update(); |
| 67 | break; |
| 68 | } |
| 69 | |
| 70 | case 1: { // Lines plot |
| 71 | plot->setLimits(x1: -0.1, x2: 6.38, y1: -1.1, y2: 1.1); |
| 72 | plot->setSecondaryLimits(x1: -5.73, x2: 365.55, y1: -1.1, y2: 1.1); |
| 73 | plot->axis(type: KPlotWidget::TopAxis)->setTickLabelsShown(true); |
| 74 | plot->axis(type: KPlotWidget::BottomAxis)->setLabel(QStringLiteral("Angle [radians]" )); |
| 75 | plot->axis(type: KPlotWidget::TopAxis)->setLabel(QStringLiteral("Angle [degrees]" )); |
| 76 | |
| 77 | po1 = new KPlotObject(Qt::red, KPlotObject::Lines, 2); |
| 78 | po2 = new KPlotObject(Qt::cyan, KPlotObject::Lines, 2); |
| 79 | |
| 80 | for (float t = 0.0; t <= 6.28; t += 0.04) { |
| 81 | po1->addPoint(x: t, y: sin(x: t)); |
| 82 | po2->addPoint(x: t, y: cos(x: t)); |
| 83 | } |
| 84 | |
| 85 | plot->addPlotObject(object: po1); |
| 86 | plot->addPlotObject(object: po2); |
| 87 | |
| 88 | plot->update(); |
| 89 | break; |
| 90 | } |
| 91 | |
| 92 | case 2: { // Bars plot |
| 93 | plot->setLimits(x1: -7.0, x2: 7.0, y1: -5.0, y2: 105.0); |
| 94 | |
| 95 | po1 = new KPlotObject(Qt::white, KPlotObject::Bars, 2); |
| 96 | po1->setBarBrush(QBrush(Qt::green, Qt::Dense4Pattern)); |
| 97 | |
| 98 | for (float x = -6.5; x <= 6.5; x += 0.5) { |
| 99 | po1->addPoint(x, y: 100 * exp(x: -0.5 * x * x), label: QLatin1String("" ), barWidth: 0.5); |
| 100 | } |
| 101 | |
| 102 | plot->addPlotObject(object: po1); |
| 103 | |
| 104 | plot->update(); |
| 105 | break; |
| 106 | } |
| 107 | |
| 108 | case 3: { // Points plot with labels |
| 109 | plot->setLimits(x1: -1.1, x2: 1.1, y1: -1.1, y2: 1.1); |
| 110 | |
| 111 | po1 = new KPlotObject(Qt::yellow, KPlotObject::Points, 10, KPlotObject::Star); |
| 112 | po1->setLabelPen(QPen(Qt::green)); |
| 113 | |
| 114 | po1->addPoint(x: 0.0, y: 0.8, QStringLiteral("North" )); |
| 115 | po1->addPoint(x: 0.57, y: 0.57, QStringLiteral("Northeast" )); |
| 116 | po1->addPoint(x: 0.8, y: 0.0, QStringLiteral("East" )); |
| 117 | po1->addPoint(x: 0.57, y: -0.57, QStringLiteral("Southeast" )); |
| 118 | po1->addPoint(x: 0.0, y: -0.8, QStringLiteral("South" )); |
| 119 | po1->addPoint(x: -0.57, y: -0.57, QStringLiteral("Southwest" )); |
| 120 | po1->addPoint(x: -0.8, y: 0.0, QStringLiteral("West" )); |
| 121 | po1->addPoint(x: -0.57, y: 0.57, QStringLiteral("Northwest" )); |
| 122 | |
| 123 | plot->addPlotObject(object: po1); |
| 124 | |
| 125 | plot->update(); |
| 126 | break; |
| 127 | } |
| 128 | |
| 129 | case 4: { // Points, Lines and Bars plot |
| 130 | plot->setLimits(x1: -2.1, x2: 2.1, y1: -0.1, y2: 4.1); |
| 131 | |
| 132 | po1 = new KPlotObject(Qt::white, KPlotObject::Points, 10, KPlotObject::Pentagon); |
| 133 | |
| 134 | po1->setShowLines(true); |
| 135 | po1->setShowBars(true); |
| 136 | po1->setLabelPen(QPen(QColor("#AA8800" ))); |
| 137 | po1->setLinePen(QPen(Qt::red, 3.0, Qt::DashDotLine)); |
| 138 | po1->setBarBrush(QBrush(Qt::blue, Qt::BDiagPattern)); |
| 139 | |
| 140 | po1->addPoint(x: -1.75, y: 0.5); |
| 141 | po1->addPoint(x: -1.25, y: 1.0); |
| 142 | po1->addPoint(x: -0.75, y: 1.25); |
| 143 | po1->addPoint(x: -0.25, y: 1.5); |
| 144 | po1->addPoint(x: 0.25, y: 2.5); |
| 145 | po1->addPoint(x: 0.75, y: 3.0); |
| 146 | po1->addPoint(x: 1.25, y: 1.5); |
| 147 | po1->addPoint(x: 1.75, y: 1.75); |
| 148 | |
| 149 | plot->addPlotObject(object: po1); |
| 150 | |
| 151 | update(); |
| 152 | break; |
| 153 | } |
| 154 | |
| 155 | case 5: { // Points, Lines and Bars plot with labels |
| 156 | plot->setLimits(x1: -2.1, x2: 2.1, y1: -0.1, y2: 4.1); |
| 157 | |
| 158 | po1 = new KPlotObject(Qt::white, KPlotObject::Points, 10, KPlotObject::Pentagon); |
| 159 | |
| 160 | po1->setShowLines(true); |
| 161 | po1->setShowBars(true); |
| 162 | po1->setLabelPen(QPen(QColor("#AA8800" ))); |
| 163 | po1->setLinePen(QPen(Qt::red, 3.0, Qt::DashDotLine)); |
| 164 | po1->setBarBrush(QBrush(Qt::blue, Qt::BDiagPattern)); |
| 165 | |
| 166 | po1->addPoint(x: -1.75, y: 0.5, QStringLiteral("A" )); |
| 167 | po1->addPoint(x: -1.25, y: 1.0, QStringLiteral("B" )); |
| 168 | po1->addPoint(x: -0.75, y: 1.25, QStringLiteral("C" )); |
| 169 | po1->addPoint(x: -0.25, y: 1.5, QStringLiteral("D" )); |
| 170 | po1->addPoint(x: 0.25, y: 2.5, QStringLiteral("E" )); |
| 171 | po1->addPoint(x: 0.75, y: 3.0, QStringLiteral("F" )); |
| 172 | po1->addPoint(x: 1.25, y: 1.5, QStringLiteral("G" )); |
| 173 | po1->addPoint(x: 1.75, y: 1.75, QStringLiteral("H" )); |
| 174 | |
| 175 | plot->addPlotObject(object: po1); |
| 176 | |
| 177 | update(); |
| 178 | break; |
| 179 | } |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | #include "moc_testplot_widget.cpp" |
| 184 | |