7#include <QtQuick3DRuntimeRender/private/qssgrendergeometry_p.h>
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
55
56
58
59
61
62
64
65
67GridGeometry::GridGeometry()
73GridGeometry::~GridGeometry()
78int GridGeometry::horizontalLines()
const
83int GridGeometry::verticalLines()
const
88float GridGeometry::horizontalStep()
const
93float GridGeometry::verticalStep()
const
98void GridGeometry::setHorizontalLines(
int count)
100 count = qMax(count, 1);
101 if (m_horLines == count)
103 m_horLines = qMax(count, 1);
104 emit horizontalLinesChanged();
107 emit geometryChanged();
110void GridGeometry::setVerticalLines(
int count)
112 count = qMax(count, 1);
113 if (m_vertLines == count)
115 m_vertLines = qMax(count, 1);
116 emit verticalLinesChanged();
119 emit geometryChanged();
122void GridGeometry::setHorizontalStep(
float step)
124 step = qMax(step, 0.0f);
125 if (qFuzzyCompare(m_horStep, step))
128 emit horizontalStepChanged();
131 emit geometryChanged();
134void GridGeometry::setVerticalStep(
float step)
136 step = qMax(step, 0.0f);
137 if (qFuzzyCompare(m_vertStep, step))
140 emit verticalStepChanged();
143 emit geometryChanged();
147 int vertLines,
float vertStep)
149 const int size = (horLines + vertLines) *
sizeof(
float) * 8 * 2;
150 vertexData.resize(size);
151 float *dataPtr =
reinterpret_cast<
float *>(vertexData.data());
153 float y0 = -
float(horLines - 1) * horStep * .5f;
154 float x0 = -
float(vertLines - 1) * vertStep * .5f;
158 for (
int i = 0; i < horLines; ++i) {
161 dataPtr[1] = y0 + i * horStep;
174 dataPtr[1] = y0 + i * horStep;
186 for (
int i = 0; i < vertLines; ++i) {
188 dataPtr[0] = x0 + i * vertStep;
201 dataPtr[0] = x0 + i * vertStep;
215void GridGeometry::updateData()
217 QByteArray vertexData;
218 fillVertexData(vertexData, m_horLines, m_horStep, m_vertLines, m_vertStep);
220 addAttribute(QQuick3DGeometry::Attribute::PositionSemantic, 0,
221 QQuick3DGeometry::Attribute::ComponentType::F32Type);
222 addAttribute(QQuick3DGeometry::Attribute::NormalSemantic, 16,
223 QQuick3DGeometry::Attribute::ComponentType::F32Type);
225 setVertexData(vertexData);
226 setPrimitiveType(QQuick3DGeometry::PrimitiveType::Lines);
227 setBounds(QVector3D(
float(-m_vertLines / 2),
float(-m_horLines / 2), 0.0f) * m_horStep,
228 QVector3D(
float(m_vertLines / 2),
float(m_horLines / 2), 0.0f) * m_vertStep);
static void fillVertexData(QByteArray &vertexData, int horLines, float horStep, int vertLines, float vertStep)