Fixes to galaxy.

Change-Id: I41a666177526db8563eee5799dee57e9994800dc
Signed-off-by: Mika Salmela <mika.salmela@theqtcompany.com>
This commit is contained in:
Mika Salmela 2014-12-08 11:43:20 +02:00
parent b439a667c0
commit b492b27371
3 changed files with 58 additions and 28 deletions

View File

@ -69,11 +69,7 @@ GalaxyData::GalaxyData(Q3DScatter *scatter,
this, &GalaxyData::handleFpsChange);
m_graph->setMeasureFps(true);
createNormalSeries();
m_dataArray = new QScatterDataArray;
m_dataArray->resize(numOfStars);
createSeries();
createGalaxy();
}
@ -154,17 +150,25 @@ void GalaxyData::createGalaxy()
createFilteredView();
}
void GalaxyData::createNormalSeries()
void GalaxyData::createSeries()
{
QScatterDataProxy *proxy = new QScatterDataProxy;
QScatter3DSeries *series = new QScatter3DSeries(proxy);
series->setMesh(QAbstract3DSeries::MeshPoint);
m_graph->addSeries(series);
QScatterDataProxy *proxyNormal = new QScatterDataProxy;
m_normalSeries = new QScatter3DSeries(proxyNormal);
m_normalSeries->setMesh(QAbstract3DSeries::MeshPoint);
m_graph->addSeries(m_normalSeries);
QScatterDataProxy *proxyFiltered = new QScatterDataProxy;
m_filteredSeries = new QScatter3DSeries(proxyFiltered);
m_filteredSeries->setMesh(QAbstract3DSeries::MeshPoint);
m_graph->addSeries(m_filteredSeries);
}
void GalaxyData::createNormalDataView()
{
QScatterDataItem *ptrToDataArray = &m_dataArray->first();
QScatterDataArray *dataArray = new QScatterDataArray;
dataArray->resize(numOfStars);
QScatterDataItem *ptrToDataArray = &dataArray->first();
for (uint i = 0; i < numOfStars; i++) {
ptrToDataArray->setPosition(QVector3D(m_pStars[i].m_pos.x(),
@ -173,8 +177,8 @@ void GalaxyData::createNormalDataView()
ptrToDataArray++;
}
m_graph->seriesList().at(0)->dataProxy()->resetArray(m_dataArray);
m_graph->seriesList().at(0)->setMesh(QAbstract3DSeries::MeshPoint);
m_normalSeries->dataProxy()->resetArray(dataArray);
m_normalSeries->setMesh(QAbstract3DSeries::MeshPoint);
}
void GalaxyData::createFilteredView()
@ -203,9 +207,10 @@ void GalaxyData::createFilteredView()
nActiveCell++;
}
m_dataArray->clear();
m_dataArray->resize(nActiveCell);
QScatterDataItem *ptrToDataArray = &m_dataArray->first();
QScatterDataArray *dataArray = new QScatterDataArray;
dataArray->resize(nActiveCell);
QScatterDataItem *ptrToDataArray = &dataArray->first();
for (int y = 0; y < steps; y++) {
for (int x = 0; x < steps; x++) {
@ -218,9 +223,9 @@ void GalaxyData::createFilteredView()
}
}
m_graph->seriesList().at(0)->dataProxy()->resetArray(m_dataArray);
m_graph->seriesList().at(0)->setMesh(QAbstract3DSeries::MeshCube);
m_graph->seriesList().at(0)->setItemSize(0.1f);
m_filteredSeries->dataProxy()->resetArray(dataArray);
m_filteredSeries->setMesh(QAbstract3DSeries::MeshCube);
m_filteredSeries->setItemSize(0.1f);
m_graph->axisY()->setRange(0.0f, float(max + 1));
@ -297,24 +302,40 @@ void GalaxyData::setFilteredEnabled(bool enabled)
if (enabled) {
QLinearGradient gr(0, 0, 1, 100);
gr.setColorAt(0.0, Qt::white);
gr.setColorAt(0.05, Qt::green);
gr.setColorAt(0.04, Qt::green);
gr.setColorAt(0.1, Qt::darkGreen);
gr.setColorAt(1.0, Qt::red);
m_graph->seriesList().at(0)->setBaseGradient(gr);
m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
m_filteredSeries->setBaseGradient(gr);
m_filteredSeries->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
m_normalSeries->setVisible(false);
createFilteredView();
m_filteredSeries->setVisible(true);
} else {
m_dataArray->clear();
m_dataArray->resize(numOfStars);
m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleUniform);
m_normalSeries->setColorStyle(Q3DTheme::ColorStyleUniform);
m_graph->axisY()->setRange(-1.0f, 1.0f);
m_graph->seriesList().at(0)->setItemSize(0.0f);
m_normalSeries->setItemSize(0.0f);
m_filteredSeries->setVisible(false);
createNormalDataView();
m_normalSeries->setVisible(true);
}
}
void GalaxyData::setStaticEnabled(bool enabled)
{
if (enabled)
m_graph->setOptimizationHints(QAbstract3DGraph::OptimizationStatic);
else
m_graph->setOptimizationHints(QAbstract3DGraph::OptimizationDefault);
}
void GalaxyData::resetValues()
{
m_radiusGalaxySlider->setValue(15000);

View File

@ -51,6 +51,7 @@ public:
void eccentricityOuterChanged(int value);
void resetValues();
void setFilteredEnabled(bool enabled);
void setStaticEnabled(bool enabled);
inline void setSliders(QSlider *rg,
QSlider *rc,
QSlider *ao,
@ -70,12 +71,13 @@ private:
void checkMinMax(const Star &star);
void createNormalDataView();
void createFilteredView();
void createNormalSeries();
void createSeries();
qreal value;
private:
Q3DScatter *m_graph;
QScatterDataArray *m_dataArray;
QScatter3DSeries *m_normalSeries;
QScatter3DSeries *m_filteredSeries;
Star *m_pStars;
qreal m_elEx1; // Excentricity of the innermost ellipse

View File

@ -83,6 +83,10 @@ int main(int argc, char **argv)
eccentricityOuterSlider->setValue(90);
eccentricityOuterSlider->setEnabled(true);
QCheckBox *staticCheckBox = new QCheckBox(widget);
staticCheckBox->setText(QStringLiteral("Static"));
staticCheckBox->setChecked(false);
QPushButton *resetButton = new QPushButton(widget);
resetButton->setText(QStringLiteral("Reset values"));
@ -102,6 +106,7 @@ int main(int argc, char **argv)
vLayout->addWidget(eccentricityInnerSlider);
vLayout->addWidget(new QLabel(QStringLiteral("Eccentricity outer")));
vLayout->addWidget(eccentricityOuterSlider);
vLayout->addWidget(staticCheckBox);
vLayout->addWidget(resetButton);
vLayout->addWidget(filteredCheckBox);
vLayout->addWidget(fpsLabel);
@ -122,6 +127,8 @@ int main(int argc, char **argv)
modifier, &GalaxyData::resetValues);
QObject::connect(filteredCheckBox, &QCheckBox::stateChanged,
modifier, &GalaxyData::setFilteredEnabled);
QObject::connect(staticCheckBox, &QCheckBox::stateChanged,
modifier, &GalaxyData::setStaticEnabled);
modifier->setSliders(radiusGalaxySlider, radiusCoreSlider, angleOffsetSlider,
eccentricityInnerSlider, eccentricityOuterSlider);