1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "barinstancing_p.h"
5
6BarInstancing::BarInstancing() {}
7
8BarInstancing::~BarInstancing()
9{
10 clearDataArray();
11}
12
13QByteArray BarInstancing::getInstanceBuffer(int *instanceCount)
14{
15 if (m_dirty) {
16 m_instanceData.resize(size: 0);
17 int instanceNumber = 0;
18
19 for (int i = 0; i < m_dataArray.size(); ++i) {
20 auto item = m_dataArray.at(i);
21
22 if ((item->color.alphaF() < 1.0) || transparency())
23 setDepthSortingEnabled(true);
24 else
25 setDepthSortingEnabled(false);
26
27 if (!item->selectedBar) {
28 auto entry = calculateTableEntry(position: item->position,
29 scale: item->scale,
30 eulerRotation: item->eulerRotation,
31 color: item->color);
32 m_instanceData.append(s: reinterpret_cast<char *>(&entry), len: sizeof(entry));
33 } else {
34 // Even selected bars need to be drawn in a very small scale.
35 // If this is not done, the program can't find the selected bars in the
36 // graph and detects the wrong bars as selected ones.
37 auto entry = calculateTableEntry(position: item->position,
38 scale: QVector3D{.001f, .001f, .001f},
39 eulerRotation: item->eulerRotation,
40 color: QColor(Qt::white));
41 m_instanceData.append(s: reinterpret_cast<char *>(&entry), len: sizeof(entry));
42 }
43 instanceNumber++;
44 }
45 m_instanceCount = instanceNumber;
46 m_dirty = false;
47 }
48
49 if (instanceCount)
50 *instanceCount = m_instanceCount;
51
52 return m_instanceData;
53}
54
55bool BarInstancing::transparency() const
56{
57 return m_transparency;
58}
59
60void BarInstancing::setTransparency(bool newTransparencyValue)
61{
62 m_transparency = newTransparencyValue;
63}
64
65void BarInstancing::clearDataArray()
66{
67 m_dataArray.clear();
68 m_instanceData.clear();
69}
70
71void BarInstancing::markDataDirty()
72{
73 m_dirty = true;
74 markDirty();
75}
76
77QList<BarItemHolder *> BarInstancing::dataArray() const
78{
79 return m_dataArray;
80}
81
82void BarInstancing::setDataArray(const QList<BarItemHolder *> &newDataArray)
83{
84 m_dataArray = newDataArray;
85 markDataDirty();
86}
87

Provided by KDAB

Privacy Policy
Learn Advanced QML with KDAB
Find out more

source code of qtgraphs/src/graphs3d/engine/barinstancing.cpp