diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-03-05 11:11:42 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-03-05 11:15:43 +0200 |
commit | 21febc677c350da772dee92d32dd268c762ae483 (patch) | |
tree | e9a03bd00f77499c20611f9bdc0cd22b2988ef1b | |
parent | 3d513480927fc1e2a72e71ce4ac48d7ac5e10fe4 (diff) |
Make bar graph horizontal labels transparent to vertical labels
Change-Id: Ie86f773551fe798b8476d3947e2b9d88bbe3855c
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 127 |
1 files changed, 64 insertions, 63 deletions
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index be1be0dc..78d80e47 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -1652,6 +1652,70 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_POLYGON_OFFSET_FILL); + // Y Labels + int labelNbr = 0; + GLfloat heightStep = m_axisCacheY.segmentStep(); + GLfloat startLine = 0.0f; + int labelCount = m_axisCacheY.labels().size(); + if (m_hasNegativeValues) { + if (m_noZeroInRange) + startLine = m_axisCacheY.min() - m_axisCacheY.max(); + else + startLine = m_axisCacheY.min(); + } + GLfloat labelPos = startLine; + GLfloat labelMarginXTrans = labelMargin; + GLfloat labelMarginZTrans = labelMargin; + GLfloat labelXTrans = rowScaleFactor; + GLfloat labelZTrans = columnScaleFactor; + QVector3D backLabelRotation(0.0f, -90.0f, 0.0f); + QVector3D sideLabelRotation(0.0f, 0.0f, 0.0f); + Qt::AlignmentFlag backAlignment = Qt::AlignLeft; + Qt::AlignmentFlag sideAlignment = Qt::AlignLeft; + if (!m_xFlipped) { + labelXTrans = -labelXTrans; + labelMarginXTrans = -labelMargin; + backLabelRotation.setY(90.0f); + sideAlignment = Qt::AlignRight; + } + if (m_zFlipped) { + labelZTrans = -labelZTrans; + labelMarginZTrans = -labelMargin; + backAlignment = Qt::AlignRight; + sideLabelRotation.setY(180.f); + } + QVector3D backLabelTrans = QVector3D(labelXTrans, 0.0f, + labelZTrans + labelMarginZTrans); + QVector3D sideLabelTrans = QVector3D(-labelXTrans - labelMarginXTrans, + 0.0f, -labelZTrans); + + for (int i = 0; i < labelCount; i++) { + if (m_axisCacheY.labelItems().size() > labelNbr) { + backLabelTrans.setY(2.0f * labelPos / m_heightNormalizer); + sideLabelTrans.setY(backLabelTrans.y()); + + glPolygonOffset(GLfloat(i) / -10.0f, 1.0f); + + const LabelItem &axisLabelItem = *m_axisCacheY.labelItems().at(labelNbr); + + // Back wall + m_dummyBarRenderItem.setTranslation(backLabelTrans); + m_drawer->drawLabel(m_dummyBarRenderItem, axisLabelItem, viewMatrix, projectionMatrix, + zeroVector, backLabelRotation, 0, m_cachedSelectionMode, + m_labelShader, m_labelObj, activeCamera, + true, true, Drawer::LabelMid, backAlignment); + + // Side wall + m_dummyBarRenderItem.setTranslation(sideLabelTrans); + m_drawer->drawLabel(m_dummyBarRenderItem, axisLabelItem, viewMatrix, projectionMatrix, + zeroVector, sideLabelRotation, 0, m_cachedSelectionMode, + m_labelShader, m_labelObj, activeCamera, + true, true, Drawer::LabelMid, sideAlignment); + } + labelNbr++; + labelPos += heightStep; + } + // Calculate the positions for row and column labels and store them GLfloat labelYAdjustment = 0.005f; GLfloat scaledRowWidth = rowScaleFactor; @@ -1733,69 +1797,6 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) } } - // Y Labels - int labelNbr = 0; - GLfloat heightStep = m_axisCacheY.segmentStep(); - GLfloat startLine = 0.0f; - int labelCount = m_axisCacheY.labels().size(); - if (m_hasNegativeValues) { - if (m_noZeroInRange) - startLine = m_axisCacheY.min() - m_axisCacheY.max(); - else - startLine = m_axisCacheY.min(); - } - GLfloat labelPos = startLine; - GLfloat labelMarginXTrans = labelMargin; - GLfloat labelMarginZTrans = labelMargin; - GLfloat labelXTrans = rowScaleFactor; - GLfloat labelZTrans = columnScaleFactor; - QVector3D backLabelRotation(0.0f, -90.0f, 0.0f); - QVector3D sideLabelRotation(0.0f, 0.0f, 0.0f); - Qt::AlignmentFlag backAlignment = Qt::AlignLeft; - Qt::AlignmentFlag sideAlignment = Qt::AlignLeft; - if (!m_xFlipped) { - labelXTrans = -labelXTrans; - labelMarginXTrans = -labelMargin; - backLabelRotation.setY(90.0f); - sideAlignment = Qt::AlignRight; - } - if (m_zFlipped) { - labelZTrans = -labelZTrans; - labelMarginZTrans = -labelMargin; - backAlignment = Qt::AlignRight; - sideLabelRotation.setY(180.f); - } - QVector3D backLabelTrans = QVector3D(labelXTrans, 0.0f, - labelZTrans + labelMarginZTrans); - QVector3D sideLabelTrans = QVector3D(-labelXTrans - labelMarginXTrans, - 0.0f, -labelZTrans); - - for (int i = 0; i < labelCount; i++) { - if (m_axisCacheY.labelItems().size() > labelNbr) { - backLabelTrans.setY(2.0f * labelPos / m_heightNormalizer); - sideLabelTrans.setY(backLabelTrans.y()); - - glPolygonOffset(GLfloat(i) / -10.0f, 1.0f); - - const LabelItem &axisLabelItem = *m_axisCacheY.labelItems().at(labelNbr); - - // Back wall - m_dummyBarRenderItem.setTranslation(backLabelTrans); - m_drawer->drawLabel(m_dummyBarRenderItem, axisLabelItem, viewMatrix, projectionMatrix, - zeroVector, backLabelRotation, 0, m_cachedSelectionMode, - m_labelShader, m_labelObj, activeCamera, - true, true, Drawer::LabelMid, backAlignment); - - // Side wall - m_dummyBarRenderItem.setTranslation(sideLabelTrans); - m_drawer->drawLabel(m_dummyBarRenderItem, axisLabelItem, viewMatrix, projectionMatrix, - zeroVector, sideLabelRotation, 0, m_cachedSelectionMode, - m_labelShader, m_labelObj, activeCamera, - true, true, Drawer::LabelMid, sideAlignment); - } - labelNbr++; - labelPos += heightStep; - } glDisable(GL_POLYGON_OFFSET_FILL); // Handle selected bar label generation |