mirror of https://github.com/qt/qtgraphs.git
Add support for MeshUserDefined
Fixes: QTBUG-114135 Change-Id: I56ed1a7a64673b0804b23e7f610d6c5be19013b0 Reviewed-by: Dilek Akcay <dilek.akcay@qt.io> Reviewed-by: Sami Varanka <sami.varanka@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
This commit is contained in:
parent
6e7221b64e
commit
cbd5aaf638
|
@ -57,6 +57,7 @@ set(widgetgraphgallery_resource_files
|
||||||
"data/oilrig.mesh"
|
"data/oilrig.mesh"
|
||||||
"data/pipe.mesh"
|
"data/pipe.mesh"
|
||||||
"data/refinery.mesh"
|
"data/refinery.mesh"
|
||||||
|
"data/narrowarrow.mesh"
|
||||||
"data/maptexture.jpg"
|
"data/maptexture.jpg"
|
||||||
"data/topography.png"
|
"data/topography.png"
|
||||||
)
|
)
|
||||||
|
|
|
@ -65,6 +65,7 @@ void BarGraph::initialize()
|
||||||
barStyleList->addItem(u"Cylinder"_s, QAbstract3DSeries::MeshCylinder);
|
barStyleList->addItem(u"Cylinder"_s, QAbstract3DSeries::MeshCylinder);
|
||||||
barStyleList->addItem(u"Bevel bar"_s, QAbstract3DSeries::MeshBevelBar);
|
barStyleList->addItem(u"Bevel bar"_s, QAbstract3DSeries::MeshBevelBar);
|
||||||
barStyleList->addItem(u"Sphere"_s, QAbstract3DSeries::MeshSphere);
|
barStyleList->addItem(u"Sphere"_s, QAbstract3DSeries::MeshSphere);
|
||||||
|
barStyleList->addItem(u"UserDefined"_s, QAbstract3DSeries::MeshUserDefined);
|
||||||
barStyleList->setCurrentIndex(4);
|
barStyleList->setCurrentIndex(4);
|
||||||
|
|
||||||
QPushButton *cameraButton = new QPushButton(m_barsWidget);
|
QPushButton *cameraButton = new QPushButton(m_barsWidget);
|
||||||
|
|
Binary file not shown.
|
@ -201,6 +201,11 @@ void GraphModifier::changeStyle(int style)
|
||||||
m_primarySeries->setMesh(m_barMesh);
|
m_primarySeries->setMesh(m_barMesh);
|
||||||
m_secondarySeries->setMesh(m_barMesh);
|
m_secondarySeries->setMesh(m_barMesh);
|
||||||
m_customData->customSeries()->setMesh(m_barMesh);
|
m_customData->customSeries()->setMesh(m_barMesh);
|
||||||
|
if (m_barMesh == QAbstract3DSeries::MeshUserDefined) {
|
||||||
|
m_primarySeries->setUserDefinedMesh(":/data/narrowarrow.mesh");
|
||||||
|
m_secondarySeries->setUserDefinedMesh(":/data/narrowarrow.mesh");
|
||||||
|
m_customData->customSeries()->setUserDefinedMesh(":/data/narrowarrow.mesh");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<file>data/refinery.mesh</file>
|
<file>data/refinery.mesh</file>
|
||||||
<file>data/oilrig.mesh</file>
|
<file>data/oilrig.mesh</file>
|
||||||
<file>data/pipe.mesh</file>
|
<file>data/pipe.mesh</file>
|
||||||
|
<file>data/narrowarrow.mesh</file>
|
||||||
<file>data/maptexture.jpg</file>
|
<file>data/maptexture.jpg</file>
|
||||||
<file>data/topography.png</file>
|
<file>data/topography.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
|
|
@ -651,14 +651,12 @@ void QQuickGraphsBars::handleAxisZChanged(QAbstract3DAxis *axis)
|
||||||
|
|
||||||
void QQuickGraphsBars::handleSeriesMeshChanged(QAbstract3DSeries::Mesh mesh)
|
void QQuickGraphsBars::handleSeriesMeshChanged(QAbstract3DSeries::Mesh mesh)
|
||||||
{
|
{
|
||||||
QList<QBar3DSeries *> barSeriesList = m_barsController->barSeriesList();
|
|
||||||
m_meshType = mesh;
|
m_meshType = mesh;
|
||||||
removeBarModels();
|
removeBarModels();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQuickGraphsBars::handleMeshSmoothChanged(bool enable)
|
void QQuickGraphsBars::handleMeshSmoothChanged(bool enable)
|
||||||
{
|
{
|
||||||
QList<QBar3DSeries *> barSeriesList = m_barsController->barSeriesList();
|
|
||||||
m_smooth = enable;
|
m_smooth = enable;
|
||||||
removeBarModels();
|
removeBarModels();
|
||||||
}
|
}
|
||||||
|
@ -740,7 +738,7 @@ void QQuickGraphsBars::generateBars(QList<QBar3DSeries *> &barSeriesList)
|
||||||
for (int i = 0; i < dataColCount; i++) {
|
for (int i = 0; i < dataColCount; i++) {
|
||||||
QBarDataItem *dataItem = const_cast <QBarDataItem *> (&(dataRow->at(i)));
|
QBarDataItem *dataItem = const_cast <QBarDataItem *> (&(dataRow->at(i)));
|
||||||
auto scene = QQuick3DViewport::scene();
|
auto scene = QQuick3DViewport::scene();
|
||||||
QQuick3DModel *model = createDataItem(scene);
|
QQuick3DModel *model = createDataItem(scene, barSeries);
|
||||||
model->setVisible(visible);
|
model->setVisible(visible);
|
||||||
|
|
||||||
BarModel *barModel = new BarModel();
|
BarModel *barModel = new BarModel();
|
||||||
|
@ -769,7 +767,7 @@ void QQuickGraphsBars::generateBars(QList<QBar3DSeries *> &barSeriesList)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (barInstancing->model == nullptr) {
|
if (barInstancing->model == nullptr) {
|
||||||
barInstancing->model = createDataItem(scene);
|
barInstancing->model = createDataItem(scene, barSeries);
|
||||||
barInstancing->model->setInstancing(barInstancing->instancing);
|
barInstancing->model->setInstancing(barInstancing->instancing);
|
||||||
barInstancing->model->setVisible(visible);
|
barInstancing->model->setVisible(visible);
|
||||||
barInstancing->model->setPickable(true);
|
barInstancing->model->setPickable(true);
|
||||||
|
@ -791,21 +789,23 @@ void QQuickGraphsBars::generateBars(QList<QBar3DSeries *> &barSeriesList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QQuick3DModel *QQuickGraphsBars::createDataItem(QQuick3DNode *scene)
|
QQuick3DModel *QQuickGraphsBars::createDataItem(QQuick3DNode *scene, QAbstract3DSeries *series)
|
||||||
{
|
{
|
||||||
auto model = new QQuick3DModel();
|
auto model = new QQuick3DModel();
|
||||||
model->setParent(scene);
|
model->setParent(scene);
|
||||||
model->setParentItem(scene);
|
model->setParentItem(scene);
|
||||||
model->setObjectName(QStringLiteral("BarModel"));
|
model->setObjectName(QStringLiteral("BarModel"));
|
||||||
QString fileName = getMeshFileName();
|
QString fileName = getMeshFileName();
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
fileName = series->userDefinedMesh();
|
||||||
|
|
||||||
model->setSource(QUrl(fileName));
|
model->setSource(QUrl(fileName));
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QQuickGraphsBars::getMeshFileName()
|
QString QQuickGraphsBars::getMeshFileName()
|
||||||
{
|
{
|
||||||
QString fileName;
|
QString fileName = {};
|
||||||
QString smoothString = QStringLiteral("Smooth");
|
|
||||||
switch (m_meshType) {
|
switch (m_meshType) {
|
||||||
case QAbstract3DSeries::MeshSphere:
|
case QAbstract3DSeries::MeshSphere:
|
||||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||||
|
@ -827,11 +827,11 @@ QString QQuickGraphsBars::getMeshFileName()
|
||||||
case QAbstract3DSeries::MeshBevelCube:
|
case QAbstract3DSeries::MeshBevelCube:
|
||||||
fileName = QStringLiteral("defaultMeshes/bevelBarMesh");
|
fileName = QStringLiteral("defaultMeshes/bevelBarMesh");
|
||||||
break;
|
break;
|
||||||
|
case QAbstract3DSeries::MeshUserDefined:
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||||
}
|
}
|
||||||
if (m_smooth && m_meshType != QAbstract3DSeries::MeshPoint)
|
|
||||||
fileName += smoothString;
|
|
||||||
|
|
||||||
fixMeshFileName(fileName, m_meshType);
|
fixMeshFileName(fileName, m_meshType);
|
||||||
|
|
||||||
|
@ -840,8 +840,17 @@ QString QQuickGraphsBars::getMeshFileName()
|
||||||
|
|
||||||
void QQuickGraphsBars::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType)
|
void QQuickGraphsBars::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType)
|
||||||
{
|
{
|
||||||
|
// Should it be smooth?
|
||||||
|
if (m_smooth && meshType != QAbstract3DSeries::MeshPoint
|
||||||
|
&& meshType != QAbstract3DSeries::MeshUserDefined) {
|
||||||
|
fileName += QStringLiteral("Smooth");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Should it be filled?
|
||||||
if (!m_barsController->activeTheme()->isBackgroundEnabled()
|
if (!m_barsController->activeTheme()->isBackgroundEnabled()
|
||||||
&& meshType != QAbstract3DSeries::MeshSphere) {
|
&& meshType != QAbstract3DSeries::MeshSphere
|
||||||
|
&& meshType != QAbstract3DSeries::MeshPoint
|
||||||
|
&& meshType != QAbstract3DSeries::MeshUserDefined) {
|
||||||
fileName.append(QStringLiteral("Full"));
|
fileName.append(QStringLiteral("Full"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1569,7 +1578,7 @@ void QQuickGraphsBars::createSelectedModels(QBar3DSeries *series)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int ind = 0; ind < selectedModelsListSize; ++ind) {
|
for (int ind = 0; ind < selectedModelsListSize; ++ind) {
|
||||||
QQuick3DModel *model = createDataItem(QQuick3DViewport::scene());
|
QQuick3DModel *model = createDataItem(QQuick3DViewport::scene(), series);
|
||||||
model->setVisible(false);
|
model->setVisible(false);
|
||||||
if (!rangeGradient) {
|
if (!rangeGradient) {
|
||||||
updateItemMaterial(model, useGradient, rangeGradient,
|
updateItemMaterial(model, useGradient, rangeGradient,
|
||||||
|
@ -1650,7 +1659,7 @@ void QQuickGraphsBars::createSliceView()
|
||||||
slicedBarListSize = barSeries->dataProxy()->rowCount();
|
slicedBarListSize = barSeries->dataProxy()->rowCount();
|
||||||
|
|
||||||
for (int ind = 0; ind < slicedBarListSize; ++ind) {
|
for (int ind = 0; ind < slicedBarListSize; ++ind) {
|
||||||
QQuick3DModel *model = createDataItem(sliceParent->scene());
|
QQuick3DModel *model = createDataItem(sliceParent->scene(), barSeries);
|
||||||
model->setVisible(false);
|
model->setVisible(false);
|
||||||
if (!rangeGradient) {
|
if (!rangeGradient) {
|
||||||
updateItemMaterial(model, useGradient, rangeGradient,
|
updateItemMaterial(model, useGradient, rangeGradient,
|
||||||
|
|
|
@ -231,7 +231,7 @@ private:
|
||||||
void connectSeries(QBar3DSeries *series);
|
void connectSeries(QBar3DSeries *series);
|
||||||
void disconnectSeries(QBar3DSeries *series);
|
void disconnectSeries(QBar3DSeries *series);
|
||||||
void generateBars(QList<QBar3DSeries *> &barSeriesList);
|
void generateBars(QList<QBar3DSeries *> &barSeriesList);
|
||||||
QQuick3DModel *createDataItem(QQuick3DNode *scene);
|
QQuick3DModel *createDataItem(QQuick3DNode *scene, QAbstract3DSeries *series);
|
||||||
QString getMeshFileName();
|
QString getMeshFileName();
|
||||||
void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType);
|
void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType);
|
||||||
void updateBarVisuality(QBar3DSeries *series, int visualIndex);
|
void updateBarVisuality(QBar3DSeries *series, int visualIndex);
|
||||||
|
|
|
@ -96,9 +96,8 @@ void QQuickGraphsScatter::generatePointsForScatterModel(ScatterModel *graphModel
|
||||||
if (graphModel->series->dataProxy()->itemCount() > 0)
|
if (graphModel->series->dataProxy()->itemCount() > 0)
|
||||||
itemList.resize(itemCount);
|
itemList.resize(itemCount);
|
||||||
|
|
||||||
QAbstract3DSeries::Mesh meshType = graphModel->series->mesh();
|
|
||||||
for (int i = 0; i < itemCount; i++) {
|
for (int i = 0; i < itemCount; i++) {
|
||||||
QQuick3DModel *item = createDataItem(meshType);
|
QQuick3DModel *item = createDataItem(graphModel->series);
|
||||||
item->setPickable(true);
|
item->setPickable(true);
|
||||||
item->setParent(graphModel->series);
|
item->setParent(graphModel->series);
|
||||||
itemList[i] = item;
|
itemList[i] = item;
|
||||||
|
@ -106,11 +105,11 @@ void QQuickGraphsScatter::generatePointsForScatterModel(ScatterModel *graphModel
|
||||||
graphModel->dataItems = itemList;
|
graphModel->dataItems = itemList;
|
||||||
m_scatterController->markDataDirty();
|
m_scatterController->markDataDirty();
|
||||||
} else if (m_scatterController->optimizationHints() == QAbstract3DGraph::OptimizationDefault) {
|
} else if (m_scatterController->optimizationHints() == QAbstract3DGraph::OptimizationDefault) {
|
||||||
graphModel->instancingRootItem = createDataItem(graphModel->series->mesh());
|
graphModel->instancingRootItem = createDataItem(graphModel->series);
|
||||||
graphModel->instancingRootItem->setParent(graphModel->series);
|
graphModel->instancingRootItem->setParent(graphModel->series);
|
||||||
graphModel->instancingRootItem->setInstancing(graphModel->instancing);
|
graphModel->instancingRootItem->setInstancing(graphModel->instancing);
|
||||||
if (m_scatterController->selectionMode() != QAbstract3DGraph::SelectionNone) {
|
if (m_scatterController->selectionMode() != QAbstract3DGraph::SelectionNone) {
|
||||||
graphModel->selectionIndicator = createDataItem(graphModel->series->mesh());
|
graphModel->selectionIndicator = createDataItem(graphModel->series);
|
||||||
graphModel->instancingRootItem->setPickable(true);
|
graphModel->instancingRootItem->setPickable(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -613,12 +612,14 @@ QQuick3DNode *QQuickGraphsScatter::createSeriesRoot()
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
QQuick3DModel *QQuickGraphsScatter::createDataItem(const QAbstract3DSeries::Mesh meshType)
|
QQuick3DModel *QQuickGraphsScatter::createDataItem(QAbstract3DSeries *series)
|
||||||
{
|
{
|
||||||
auto model = new QQuick3DModel();
|
auto model = new QQuick3DModel();
|
||||||
model->setParent(this);
|
model->setParent(this);
|
||||||
model->setParentItem(QQuick3DViewport::scene());
|
model->setParentItem(QQuick3DViewport::scene());
|
||||||
QString fileName = getMeshFileName(meshType);
|
QString fileName = getMeshFileName(series->mesh());
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
fileName = series->userDefinedMesh();
|
||||||
|
|
||||||
model->setSource(QUrl(fileName));
|
model->setSource(QUrl(fileName));
|
||||||
return model;
|
return model;
|
||||||
|
@ -669,9 +670,8 @@ void QQuickGraphsScatter::recreateDataItems()
|
||||||
|
|
||||||
void QQuickGraphsScatter::addPointsToScatterModel(ScatterModel *graphModel, qsizetype count)
|
void QQuickGraphsScatter::addPointsToScatterModel(ScatterModel *graphModel, qsizetype count)
|
||||||
{
|
{
|
||||||
QAbstract3DSeries::Mesh meshType = graphModel->series->mesh();
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
QQuick3DModel *item = createDataItem(meshType);
|
QQuick3DModel *item = createDataItem(graphModel->series);
|
||||||
item->setPickable(true);
|
item->setPickable(true);
|
||||||
item->setParent(graphModel->series);
|
item->setParent(graphModel->series);
|
||||||
graphModel->dataItems.push_back(item);
|
graphModel->dataItems.push_back(item);
|
||||||
|
@ -697,16 +697,24 @@ QVector3D QQuickGraphsScatter::selectedItemPosition()
|
||||||
|
|
||||||
void QQuickGraphsScatter::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType)
|
void QQuickGraphsScatter::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType)
|
||||||
{
|
{
|
||||||
|
// Should it be smooth?
|
||||||
|
if (m_smooth && meshType != QAbstract3DSeries::MeshPoint
|
||||||
|
&& meshType != QAbstract3DSeries::MeshUserDefined) {
|
||||||
|
fileName += QStringLiteral("Smooth");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Should it be filled?
|
||||||
if (meshType != QAbstract3DSeries::MeshSphere && meshType != QAbstract3DSeries::MeshArrow
|
if (meshType != QAbstract3DSeries::MeshSphere && meshType != QAbstract3DSeries::MeshArrow
|
||||||
&& meshType != QAbstract3DSeries::MeshMinimal && meshType != QAbstract3DSeries::MeshPoint) {
|
&& meshType != QAbstract3DSeries::MeshMinimal
|
||||||
|
&& meshType != QAbstract3DSeries::MeshPoint
|
||||||
|
&& meshType != QAbstract3DSeries::MeshUserDefined) {
|
||||||
fileName.append(QStringLiteral("Full"));
|
fileName.append(QStringLiteral("Full"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QQuickGraphsScatter::getMeshFileName(QAbstract3DSeries::Mesh meshType)
|
QString QQuickGraphsScatter::getMeshFileName(QAbstract3DSeries::Mesh meshType)
|
||||||
{
|
{
|
||||||
QString fileName;
|
QString fileName = {};
|
||||||
QString smoothString = QStringLiteral("Smooth");
|
|
||||||
switch (meshType) {
|
switch (meshType) {
|
||||||
case QAbstract3DSeries::MeshSphere:
|
case QAbstract3DSeries::MeshSphere:
|
||||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||||
|
@ -739,11 +747,11 @@ QString QQuickGraphsScatter::getMeshFileName(QAbstract3DSeries::Mesh meshType)
|
||||||
? QStringLiteral("defaultMeshes/planeMesh")
|
? QStringLiteral("defaultMeshes/planeMesh")
|
||||||
: QStringLiteral("defaultMeshes/octagonMesh");
|
: QStringLiteral("defaultMeshes/octagonMesh");
|
||||||
break;
|
break;
|
||||||
|
case QAbstract3DSeries::MeshUserDefined:
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||||
}
|
}
|
||||||
if (m_smooth && meshType != QAbstract3DSeries::MeshPoint)
|
|
||||||
fileName += smoothString;
|
|
||||||
|
|
||||||
fixMeshFileName(fileName, meshType);
|
fixMeshFileName(fileName, meshType);
|
||||||
|
|
||||||
|
@ -1114,12 +1122,12 @@ void QQuickGraphsScatter::updateGraph()
|
||||||
graphModel->instancing->setParent(graphModel->series);
|
graphModel->instancing->setParent(graphModel->series);
|
||||||
}
|
}
|
||||||
if (graphModel->instancingRootItem == nullptr) {
|
if (graphModel->instancingRootItem == nullptr) {
|
||||||
graphModel->instancingRootItem = createDataItem(graphModel->series->mesh());
|
graphModel->instancingRootItem = createDataItem(graphModel->series);
|
||||||
graphModel->instancingRootItem->setParent(graphModel->series);
|
graphModel->instancingRootItem->setParent(graphModel->series);
|
||||||
graphModel->instancingRootItem->setInstancing(graphModel->instancing);
|
graphModel->instancingRootItem->setInstancing(graphModel->instancing);
|
||||||
if (selectionMode() != QAbstract3DGraph::SelectionNone) {
|
if (selectionMode() != QAbstract3DGraph::SelectionNone) {
|
||||||
graphModel->instancingRootItem->setPickable(true);
|
graphModel->instancingRootItem->setPickable(true);
|
||||||
graphModel->selectionIndicator = createDataItem(graphModel->series->mesh());
|
graphModel->selectionIndicator = createDataItem(graphModel->series);
|
||||||
graphModel->selectionIndicator->setVisible(false);
|
graphModel->selectionIndicator->setVisible(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@ private:
|
||||||
QQuick3DTexture *createTexture();
|
QQuick3DTexture *createTexture();
|
||||||
QQuick3DModel *createDataItemModel(QAbstract3DSeries::Mesh meshType);
|
QQuick3DModel *createDataItemModel(QAbstract3DSeries::Mesh meshType);
|
||||||
QQuick3DNode *createSeriesRoot();
|
QQuick3DNode *createSeriesRoot();
|
||||||
QQuick3DModel *createDataItem(const QAbstract3DSeries::Mesh meshType);
|
QQuick3DModel *createDataItem(QAbstract3DSeries *series);
|
||||||
void removeDataItems(ScatterModel *graphModel);
|
void removeDataItems(ScatterModel *graphModel);
|
||||||
void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType);
|
void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType);
|
||||||
QString getMeshFileName(QAbstract3DSeries::Mesh meshType);
|
QString getMeshFileName(QAbstract3DSeries::Mesh meshType);
|
||||||
|
|
Loading…
Reference in New Issue