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/pipe.mesh"
|
||||
"data/refinery.mesh"
|
||||
"data/narrowarrow.mesh"
|
||||
"data/maptexture.jpg"
|
||||
"data/topography.png"
|
||||
)
|
||||
|
|
|
@ -65,6 +65,7 @@ void BarGraph::initialize()
|
|||
barStyleList->addItem(u"Cylinder"_s, QAbstract3DSeries::MeshCylinder);
|
||||
barStyleList->addItem(u"Bevel bar"_s, QAbstract3DSeries::MeshBevelBar);
|
||||
barStyleList->addItem(u"Sphere"_s, QAbstract3DSeries::MeshSphere);
|
||||
barStyleList->addItem(u"UserDefined"_s, QAbstract3DSeries::MeshUserDefined);
|
||||
barStyleList->setCurrentIndex(4);
|
||||
|
||||
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_secondarySeries->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/oilrig.mesh</file>
|
||||
<file>data/pipe.mesh</file>
|
||||
<file>data/narrowarrow.mesh</file>
|
||||
<file>data/maptexture.jpg</file>
|
||||
<file>data/topography.png</file>
|
||||
</qresource>
|
||||
|
|
|
@ -651,14 +651,12 @@ void QQuickGraphsBars::handleAxisZChanged(QAbstract3DAxis *axis)
|
|||
|
||||
void QQuickGraphsBars::handleSeriesMeshChanged(QAbstract3DSeries::Mesh mesh)
|
||||
{
|
||||
QList<QBar3DSeries *> barSeriesList = m_barsController->barSeriesList();
|
||||
m_meshType = mesh;
|
||||
removeBarModels();
|
||||
}
|
||||
|
||||
void QQuickGraphsBars::handleMeshSmoothChanged(bool enable)
|
||||
{
|
||||
QList<QBar3DSeries *> barSeriesList = m_barsController->barSeriesList();
|
||||
m_smooth = enable;
|
||||
removeBarModels();
|
||||
}
|
||||
|
@ -740,7 +738,7 @@ void QQuickGraphsBars::generateBars(QList<QBar3DSeries *> &barSeriesList)
|
|||
for (int i = 0; i < dataColCount; i++) {
|
||||
QBarDataItem *dataItem = const_cast <QBarDataItem *> (&(dataRow->at(i)));
|
||||
auto scene = QQuick3DViewport::scene();
|
||||
QQuick3DModel *model = createDataItem(scene);
|
||||
QQuick3DModel *model = createDataItem(scene, barSeries);
|
||||
model->setVisible(visible);
|
||||
|
||||
BarModel *barModel = new BarModel();
|
||||
|
@ -769,7 +767,7 @@ void QQuickGraphsBars::generateBars(QList<QBar3DSeries *> &barSeriesList)
|
|||
}
|
||||
|
||||
if (barInstancing->model == nullptr) {
|
||||
barInstancing->model = createDataItem(scene);
|
||||
barInstancing->model = createDataItem(scene, barSeries);
|
||||
barInstancing->model->setInstancing(barInstancing->instancing);
|
||||
barInstancing->model->setVisible(visible);
|
||||
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();
|
||||
model->setParent(scene);
|
||||
model->setParentItem(scene);
|
||||
model->setObjectName(QStringLiteral("BarModel"));
|
||||
QString fileName = getMeshFileName();
|
||||
if (fileName.isEmpty())
|
||||
fileName = series->userDefinedMesh();
|
||||
|
||||
model->setSource(QUrl(fileName));
|
||||
return model;
|
||||
}
|
||||
|
||||
QString QQuickGraphsBars::getMeshFileName()
|
||||
{
|
||||
QString fileName;
|
||||
QString smoothString = QStringLiteral("Smooth");
|
||||
QString fileName = {};
|
||||
switch (m_meshType) {
|
||||
case QAbstract3DSeries::MeshSphere:
|
||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||
|
@ -827,11 +827,11 @@ QString QQuickGraphsBars::getMeshFileName()
|
|||
case QAbstract3DSeries::MeshBevelCube:
|
||||
fileName = QStringLiteral("defaultMeshes/bevelBarMesh");
|
||||
break;
|
||||
case QAbstract3DSeries::MeshUserDefined:
|
||||
break;
|
||||
default:
|
||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||
}
|
||||
if (m_smooth && m_meshType != QAbstract3DSeries::MeshPoint)
|
||||
fileName += smoothString;
|
||||
|
||||
fixMeshFileName(fileName, m_meshType);
|
||||
|
||||
|
@ -840,8 +840,17 @@ QString QQuickGraphsBars::getMeshFileName()
|
|||
|
||||
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()
|
||||
&& meshType != QAbstract3DSeries::MeshSphere) {
|
||||
&& meshType != QAbstract3DSeries::MeshSphere
|
||||
&& meshType != QAbstract3DSeries::MeshPoint
|
||||
&& meshType != QAbstract3DSeries::MeshUserDefined) {
|
||||
fileName.append(QStringLiteral("Full"));
|
||||
}
|
||||
}
|
||||
|
@ -1569,7 +1578,7 @@ void QQuickGraphsBars::createSelectedModels(QBar3DSeries *series)
|
|||
}
|
||||
|
||||
for (int ind = 0; ind < selectedModelsListSize; ++ind) {
|
||||
QQuick3DModel *model = createDataItem(QQuick3DViewport::scene());
|
||||
QQuick3DModel *model = createDataItem(QQuick3DViewport::scene(), series);
|
||||
model->setVisible(false);
|
||||
if (!rangeGradient) {
|
||||
updateItemMaterial(model, useGradient, rangeGradient,
|
||||
|
@ -1650,7 +1659,7 @@ void QQuickGraphsBars::createSliceView()
|
|||
slicedBarListSize = barSeries->dataProxy()->rowCount();
|
||||
|
||||
for (int ind = 0; ind < slicedBarListSize; ++ind) {
|
||||
QQuick3DModel *model = createDataItem(sliceParent->scene());
|
||||
QQuick3DModel *model = createDataItem(sliceParent->scene(), barSeries);
|
||||
model->setVisible(false);
|
||||
if (!rangeGradient) {
|
||||
updateItemMaterial(model, useGradient, rangeGradient,
|
||||
|
|
|
@ -231,7 +231,7 @@ private:
|
|||
void connectSeries(QBar3DSeries *series);
|
||||
void disconnectSeries(QBar3DSeries *series);
|
||||
void generateBars(QList<QBar3DSeries *> &barSeriesList);
|
||||
QQuick3DModel *createDataItem(QQuick3DNode *scene);
|
||||
QQuick3DModel *createDataItem(QQuick3DNode *scene, QAbstract3DSeries *series);
|
||||
QString getMeshFileName();
|
||||
void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType);
|
||||
void updateBarVisuality(QBar3DSeries *series, int visualIndex);
|
||||
|
|
|
@ -96,9 +96,8 @@ void QQuickGraphsScatter::generatePointsForScatterModel(ScatterModel *graphModel
|
|||
if (graphModel->series->dataProxy()->itemCount() > 0)
|
||||
itemList.resize(itemCount);
|
||||
|
||||
QAbstract3DSeries::Mesh meshType = graphModel->series->mesh();
|
||||
for (int i = 0; i < itemCount; i++) {
|
||||
QQuick3DModel *item = createDataItem(meshType);
|
||||
QQuick3DModel *item = createDataItem(graphModel->series);
|
||||
item->setPickable(true);
|
||||
item->setParent(graphModel->series);
|
||||
itemList[i] = item;
|
||||
|
@ -106,11 +105,11 @@ void QQuickGraphsScatter::generatePointsForScatterModel(ScatterModel *graphModel
|
|||
graphModel->dataItems = itemList;
|
||||
m_scatterController->markDataDirty();
|
||||
} 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->setInstancing(graphModel->instancing);
|
||||
if (m_scatterController->selectionMode() != QAbstract3DGraph::SelectionNone) {
|
||||
graphModel->selectionIndicator = createDataItem(graphModel->series->mesh());
|
||||
graphModel->selectionIndicator = createDataItem(graphModel->series);
|
||||
graphModel->instancingRootItem->setPickable(true);
|
||||
}
|
||||
}
|
||||
|
@ -613,12 +612,14 @@ QQuick3DNode *QQuickGraphsScatter::createSeriesRoot()
|
|||
return model;
|
||||
}
|
||||
|
||||
QQuick3DModel *QQuickGraphsScatter::createDataItem(const QAbstract3DSeries::Mesh meshType)
|
||||
QQuick3DModel *QQuickGraphsScatter::createDataItem(QAbstract3DSeries *series)
|
||||
{
|
||||
auto model = new QQuick3DModel();
|
||||
model->setParent(this);
|
||||
model->setParentItem(QQuick3DViewport::scene());
|
||||
QString fileName = getMeshFileName(meshType);
|
||||
QString fileName = getMeshFileName(series->mesh());
|
||||
if (fileName.isEmpty())
|
||||
fileName = series->userDefinedMesh();
|
||||
|
||||
model->setSource(QUrl(fileName));
|
||||
return model;
|
||||
|
@ -669,9 +670,8 @@ void QQuickGraphsScatter::recreateDataItems()
|
|||
|
||||
void QQuickGraphsScatter::addPointsToScatterModel(ScatterModel *graphModel, qsizetype count)
|
||||
{
|
||||
QAbstract3DSeries::Mesh meshType = graphModel->series->mesh();
|
||||
for (int i = 0; i < count; i++) {
|
||||
QQuick3DModel *item = createDataItem(meshType);
|
||||
QQuick3DModel *item = createDataItem(graphModel->series);
|
||||
item->setPickable(true);
|
||||
item->setParent(graphModel->series);
|
||||
graphModel->dataItems.push_back(item);
|
||||
|
@ -697,16 +697,24 @@ QVector3D QQuickGraphsScatter::selectedItemPosition()
|
|||
|
||||
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
|
||||
&& meshType != QAbstract3DSeries::MeshMinimal && meshType != QAbstract3DSeries::MeshPoint) {
|
||||
&& meshType != QAbstract3DSeries::MeshMinimal
|
||||
&& meshType != QAbstract3DSeries::MeshPoint
|
||||
&& meshType != QAbstract3DSeries::MeshUserDefined) {
|
||||
fileName.append(QStringLiteral("Full"));
|
||||
}
|
||||
}
|
||||
|
||||
QString QQuickGraphsScatter::getMeshFileName(QAbstract3DSeries::Mesh meshType)
|
||||
{
|
||||
QString fileName;
|
||||
QString smoothString = QStringLiteral("Smooth");
|
||||
QString fileName = {};
|
||||
switch (meshType) {
|
||||
case QAbstract3DSeries::MeshSphere:
|
||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||
|
@ -739,11 +747,11 @@ QString QQuickGraphsScatter::getMeshFileName(QAbstract3DSeries::Mesh meshType)
|
|||
? QStringLiteral("defaultMeshes/planeMesh")
|
||||
: QStringLiteral("defaultMeshes/octagonMesh");
|
||||
break;
|
||||
case QAbstract3DSeries::MeshUserDefined:
|
||||
break;
|
||||
default:
|
||||
fileName = QStringLiteral("defaultMeshes/sphereMesh");
|
||||
}
|
||||
if (m_smooth && meshType != QAbstract3DSeries::MeshPoint)
|
||||
fileName += smoothString;
|
||||
|
||||
fixMeshFileName(fileName, meshType);
|
||||
|
||||
|
@ -1114,12 +1122,12 @@ void QQuickGraphsScatter::updateGraph()
|
|||
graphModel->instancing->setParent(graphModel->series);
|
||||
}
|
||||
if (graphModel->instancingRootItem == nullptr) {
|
||||
graphModel->instancingRootItem = createDataItem(graphModel->series->mesh());
|
||||
graphModel->instancingRootItem = createDataItem(graphModel->series);
|
||||
graphModel->instancingRootItem->setParent(graphModel->series);
|
||||
graphModel->instancingRootItem->setInstancing(graphModel->instancing);
|
||||
if (selectionMode() != QAbstract3DGraph::SelectionNone) {
|
||||
graphModel->instancingRootItem->setPickable(true);
|
||||
graphModel->selectionIndicator = createDataItem(graphModel->series->mesh());
|
||||
graphModel->selectionIndicator = createDataItem(graphModel->series);
|
||||
graphModel->selectionIndicator->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -153,7 +153,7 @@ private:
|
|||
QQuick3DTexture *createTexture();
|
||||
QQuick3DModel *createDataItemModel(QAbstract3DSeries::Mesh meshType);
|
||||
QQuick3DNode *createSeriesRoot();
|
||||
QQuick3DModel *createDataItem(const QAbstract3DSeries::Mesh meshType);
|
||||
QQuick3DModel *createDataItem(QAbstract3DSeries *series);
|
||||
void removeDataItems(ScatterModel *graphModel);
|
||||
void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh meshType);
|
||||
QString getMeshFileName(QAbstract3DSeries::Mesh meshType);
|
||||
|
|
Loading…
Reference in New Issue