diff options
author | Sami Varanka <sami.varanka@qt.io> | 2021-08-18 14:33:26 +0300 |
---|---|---|
committer | Sami Varanka <sami.varanka@qt.io> | 2021-08-24 07:25:12 +0000 |
commit | d01fa6654f9b3d5ae4b542a85f10277318cfebd4 (patch) | |
tree | ceb71e9903b00181cca3623d77758544182b12d5 /src/datavisualization/engine/bars3drenderer.cpp | |
parent | 6248cca3f2a801b27059ffc0a720db1686832f41 (diff) |
Add: Margin between series columns in Bars3D
Added a new property to Bars3D. The property
controls the margin between the columns of
series. It can be used to show bars belonging
to same column, but different series
side by side. Also added autotest for qml and
cpp.
Fixes: QTBUG-69036
Change-Id: I3c353e9097a8be8cafc05f8f5120e4266baa4a5c
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/datavisualization/engine/bars3drenderer.cpp')
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index 3f36f8d1..0c51d187 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -49,6 +49,7 @@ Bars3DRenderer::Bars3DRenderer(Bars3DController *controller) m_cachedIsSlicingActivated(false), m_cachedRowCount(0), m_cachedColumnCount(0), + m_cachedBarSeriesMargin(0.0f, 0.0f), m_selectedBar(0), m_sliceCache(0), m_sliceTitleItem(0), @@ -198,7 +199,8 @@ void Bars3DRenderer::updateData() m_seriesScaleX = 1.0f / float(m_visibleSeriesCount); m_seriesStep = 1.0f / float(m_visibleSeriesCount); - m_seriesStart = -((float(m_visibleSeriesCount) - 1.0f) / 2.0f) * m_seriesStep; + m_seriesStart = -((float(m_visibleSeriesCount) - 1.0f) / 2.0f) + * (m_seriesStep - (m_seriesStep * m_cachedBarSeriesMargin.width())); if (m_keepSeriesUniform) m_seriesScaleZ = m_seriesScaleX; @@ -1077,7 +1079,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) foreach (SeriesRenderCache *baseCache, m_renderCacheList) { if (baseCache->isVisible()) { BarSeriesRenderCache *cache = static_cast<BarSeriesRenderCache *>(baseCache); - float seriesPos = m_seriesStart + m_seriesStep * cache->visualIndex() + 0.5f; + float seriesPos = m_seriesStart + m_seriesStep + * (cache->visualIndex() - (cache->visualIndex() + * m_cachedBarSeriesMargin.width())) + 0.5f; ObjectHelper *barObj = cache->object(); QQuaternion seriesRotation(cache->meshRotation()); const BarRenderItemArray &renderArray = cache->renderArray(); @@ -1199,7 +1203,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) foreach (SeriesRenderCache *baseCache, m_renderCacheList) { if (baseCache->isVisible()) { BarSeriesRenderCache *cache = static_cast<BarSeriesRenderCache *>(baseCache); - float seriesPos = m_seriesStart + m_seriesStep * cache->visualIndex() + 0.5f; + float seriesPos = m_seriesStart + m_seriesStep + * (cache->visualIndex() - (cache->visualIndex() + * m_cachedBarSeriesMargin.width())) + 0.5f; ObjectHelper *barObj = cache->object(); QQuaternion seriesRotation(cache->meshRotation()); const BarRenderItemArray &renderArray = cache->renderArray(); @@ -1459,7 +1465,9 @@ bool Bars3DRenderer::drawBars(BarRenderItem **selectedBar, foreach (SeriesRenderCache *baseCache, m_renderCacheList) { if (baseCache->isVisible()) { BarSeriesRenderCache *cache = static_cast<BarSeriesRenderCache *>(baseCache); - float seriesPos = m_seriesStart + m_seriesStep * cache->visualIndex() + 0.5f; + float seriesPos = m_seriesStart + m_seriesStep + * (cache->visualIndex() - (cache->visualIndex() + * m_cachedBarSeriesMargin.width())) + 0.5f; ObjectHelper *barObj = cache->object(); QQuaternion seriesRotation(cache->meshRotation()); Q3DTheme::ColorStyle colorStyle = cache->colorStyle(); @@ -2464,6 +2472,13 @@ void Bars3DRenderer::updateBarSpecs(GLfloat thicknessRatio, const QSizeF &spacin calculateSceneScalingFactors(); } +void Bars3DRenderer::updateBarSeriesMargin(const QSizeF &margin) +{ + m_cachedBarSeriesMargin = margin; + calculateSeriesStartPosition(); + calculateSceneScalingFactors(); +} + void Bars3DRenderer::updateAxisRange(QAbstract3DAxis::AxisOrientation orientation, float min, float max) { @@ -2596,6 +2611,10 @@ void Bars3DRenderer::calculateSceneScalingFactors() m_scaleX = m_cachedBarThickness.width() / m_scaleFactor; m_scaleZ = m_cachedBarThickness.height() / m_scaleFactor; + // Adjust scaling according to margin + m_scaleX -= m_scaleX * m_cachedBarSeriesMargin.width(); + m_scaleZ -= m_scaleZ * m_cachedBarSeriesMargin.height(); + // Whole graph scale factors m_xScaleFactor = m_rowWidth / m_scaleFactor; m_zScaleFactor = m_columnDepth / m_scaleFactor; @@ -2659,6 +2678,12 @@ void Bars3DRenderer::calculateHeightAdjustment() } } +void Bars3DRenderer::calculateSeriesStartPosition() +{ + m_seriesStart = -((float(m_visibleSeriesCount) - 1.0f) / 2.0f) + * (m_seriesStep - (m_seriesStep * m_cachedBarSeriesMargin.width())); +} + Bars3DController::SelectionType Bars3DRenderer::isSelected(int row, int bar, const BarSeriesRenderCache *cache) { |