#pragma once
#include <QtWidgets/QWidget>
#include "ui_Saser_project_0001.h"
#include <qboxlayout.h>
#include <QTimer>
#include <qtdatavisualizationversion.h>
#include <q3dscatter.h>
#include <qscatter3dseries.h>
#include <QCustom3DLabel>
using namespace QtDataVisualization;
class Saser_project_0001 : public QWidget
{
Q_OBJECT
public:
Saser_project_0001(QWidget *parent = Q_NULLPTR);
QTimer* testTime;
public slots:
void timeout();
private:
Ui::Saser_project_0001Class ui;
QScatter3DSeries* _GroupType1 ;
QScatter3DSeries* _GroupType2 ;
QScatter3DSeries* _GroupType3 ;
};
#include "Saser_project_0001.h"
Saser_project_0001::Saser_project_0001(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
Q3DScatter* _Group = new Q3DScatter();
QWidget* _3DWidget = QWidget::createWindowContainer(_Group);
_Group->axisX()->setRange(-300, 300);
_Group->axisZ()->setRange(-300, 300);
_Group->axisY()->setRange(0, 50);
_Group->axisX()->setLabelFormat("%d m");
_Group->axisY()->setLabelFormat("%.4f m");
_Group->axisX()->setSegmentCount(10);
_Group->axisZ()->setSegmentCount(31);
_Group->axisY()->setSegmentCount(1);
_Group->axisX()->setSubSegmentCount(2);
_Group->axisZ()->setSubSegmentCount(2);
_Group->axisX()->setTitle("Let");
_Group->axisZ()->setTitle("Long");
_Group->axisY()->setTitle("height");
_Group->axisX()->setTitleVisible(true);
_Group->axisZ()->setTitleVisible(true);
_Group->axisY()->setTitleVisible(false);
_Group->activeTheme()->setType(Q3DTheme::ThemeEbony);
_Group->scene()->activeLight()->setAutoPosition(true);
_Group->scene()->activeCamera()->setCameraPosition(0.0f,0.0f,100.0f);
_GroupType1 = new QScatter3DSeries();
_GroupType2 = new QScatter3DSeries();
_GroupType3 = new QScatter3DSeries();
_GroupType1->setMesh(QAbstract3DSeries::MeshSphere);
_GroupType1->setItemSize(0.03f);
_GroupType1->setBaseColor(QColor(255, 0, 0));
_GroupType2->setMesh(QAbstract3DSeries::MeshBar);
_GroupType2->setItemSize(0.03f);
_GroupType2->setBaseColor(QColor(0, 255, 0));
_GroupType3->setMesh(QAbstract3DSeries::MeshPyramid);
_GroupType3->setItemSize(0.03f);
_GroupType3->setBaseColor(QColor(255, 0, 255));
_Group->addSeries(_GroupType1);
_Group->addSeries(_GroupType2);
_Group->addSeries(_GroupType3);
QVector<QVector3D> _GroupType1_Data;
_GroupType1_Data << QVector3D(0, 0, 0) << QVector3D(0, 50, 0) << QVector3D(0, 0, 50);
QScatterDataArray* _dataArray1 = new QScatterDataArray();
_dataArray1->resize(_GroupType1_Data.size());
QScatterDataItem* ptrToDataArray1 = &_dataArray1->first();
for (size_t i = 0; i < _GroupType1_Data.size(); i++)
{
ptrToDataArray1->setPosition(_GroupType1_Data[i]);
ptrToDataArray1++;
}
_GroupType1->dataProxy()->resetArray(_dataArray1);
QVector<QVector3D> _GroupType2_Data;
_GroupType2_Data << QVector3D(50, 0, 0) << QVector3D(50, 50, 0) << QVector3D(50, 0,100);
QScatterDataArray* _dataArray2 = new QScatterDataArray();
for (size_t i = 0; i < _GroupType2_Data.size(); i++)
{
QScatterDataItem _ptrToDataArray;
_ptrToDataArray.setPosition(_GroupType2_Data[i]);
_dataArray2->append(_ptrToDataArray);
QCustom3DLabel* tempLable = new QCustom3DLabel();
tempLable->setText(QString("%1").arg(i));
QVector3D temp((_GroupType2_Data[i]).x(), _GroupType2_Data[i].y() + 2, _GroupType2_Data[i].z());
tempLable->setPosition(temp);
tempLable->setScaling(QVector3D(0.3, 0.3, 0.3));
tempLable->setBackgroundEnabled(false);
_Group->addCustomItem(tempLable);
}
_GroupType2->dataProxy()->resetArray(_dataArray2);
QVector<QVector3D> _GroupType3_Data;
_GroupType3_Data << QVector3D(-50, 0, 0) << QVector3D(-50, 50, 0) << QVector3D(-50, 0, 150);
QScatterDataArray* _dataArray3 = new QScatterDataArray();
for (size_t i = 0; i < _GroupType3_Data.size(); i++)
{
QScatterDataItem _ptrToDataArray;
_ptrToDataArray.setPosition(_GroupType3_Data[i]);
_dataArray3->append(_ptrToDataArray);
}
_GroupType3->dataProxy()->resetArray(_dataArray3);
QVBoxLayout* qMainlayout = new QVBoxLayout;
this->setLayout(qMainlayout);
qMainlayout->addWidget(_3DWidget);
testTime = new QTimer();
connect(testTime, SIGNAL(timeout()), this, SLOT(timeout()));
testTime->start(50);
}
void Saser_project_0001::timeout()
{
static double z =-300;
static double x = -10;
static double y = 0;
QVector<QVector3D> _GroupType1_Data;
if (z >= 300)
{
z = 0;
}
if (x >= 10)
{
x = -10;
}
if (y >= 50)
{
y = 0;
}
_GroupType1_Data << QVector3D(x++, y++, z++) ;
for (size_t i = 0; i < 1000; i++)
{
_GroupType1_Data << QVector3D(x + (i*1.0 / 10), y, z +(i*1.0 / 40));
}
QScatterDataArray* _dataArray1 = new QScatterDataArray();
_dataArray1->resize(_GroupType1_Data.size());
QScatterDataItem* ptrToDataArray1 = &_dataArray1->first();
for (size_t i = 0; i < _GroupType1_Data.size(); i++)
{
ptrToDataArray1->setPosition(_GroupType1_Data[i]);
ptrToDataArray1++;
}
_GroupType1->dataProxy()->resetArray(_dataArray1);
}