5#include <QtQuick3DRuntimeRender/private/qssgrendergeometry_p.h>
8
9
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
52
53
55
56
58
59
61
62
64GridGeometry::GridGeometry()
70GridGeometry::~GridGeometry()
75int GridGeometry::horizontalLines()
const
80int GridGeometry::verticalLines()
const
85float GridGeometry::horizontalStep()
const
90float GridGeometry::verticalStep()
const
95void GridGeometry::setHorizontalLines(
int count)
97 count = qMax(count, 1);
98 if (m_horLines == count)
100 m_horLines = qMax(count, 1);
101 emit horizontalLinesChanged();
106void GridGeometry::setVerticalLines(
int count)
108 count = qMax(count, 1);
109 if (m_vertLines == count)
111 m_vertLines = qMax(count, 1);
112 emit verticalLinesChanged();
117void GridGeometry::setHorizontalStep(
float step)
119 step = qMax(step, 0.0f);
120 if (qFuzzyCompare(m_horStep, step))
123 emit horizontalStepChanged();
128void GridGeometry::setVerticalStep(
float step)
130 step = qMax(step, 0.0f);
131 if (qFuzzyCompare(m_vertStep, step))
134 emit verticalStepChanged();
140 int vertLines,
float vertStep)
142 const int size = (horLines + vertLines) *
sizeof(
float) * 8 * 2;
143 vertexData.resize(size);
144 float *dataPtr =
reinterpret_cast<
float *>(vertexData.data());
146 float y0 = -
float(horLines - 1) * horStep * .5f;
147 float x0 = -
float(vertLines - 1) * vertStep * .5f;
151 for (
int i = 0; i < horLines; ++i) {
154 dataPtr[1] = y0 + i * horStep;
167 dataPtr[1] = y0 + i * horStep;
179 for (
int i = 0; i < vertLines; ++i) {
181 dataPtr[0] = x0 + i * vertStep;
194 dataPtr[0] = x0 + i * vertStep;
208void GridGeometry::updateData()
210 QByteArray vertexData;
211 fillVertexData(vertexData, m_horLines, m_horStep, m_vertLines, m_vertStep);
213 addAttribute(QQuick3DGeometry::Attribute::PositionSemantic, 0,
214 QQuick3DGeometry::Attribute::ComponentType::F32Type);
215 addAttribute(QQuick3DGeometry::Attribute::NormalSemantic, 16,
216 QQuick3DGeometry::Attribute::ComponentType::F32Type);
218 setVertexData(vertexData);
219 setPrimitiveType(QQuick3DGeometry::PrimitiveType::Lines);
220 setBounds(QVector3D(
float(-m_vertLines / 2),
float(-m_horLines / 2), 0.0f) * m_horStep,
221 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)