35 Q_PROPERTY(
float width READ width WRITE setWidth NOTIFY widthChanged FINAL)
36 Q_PROPERTY(
float height READ height WRITE setHeight NOTIFY heightChanged FINAL)
37 Q_PROPERTY(QSize meshResolution READ meshResolution WRITE setMeshResolution NOTIFY meshResolutionChanged FINAL)
38 Q_PROPERTY(Plane plane READ plane WRITE setPlane NOTIFY planeChanged FINAL)
39 Q_PROPERTY(
bool reversed READ reversed WRITE setReversed NOTIFY reversedChanged FINAL)
40 Q_PROPERTY(
bool mirrored READ mirrored WRITE setMirrored NOTIFY mirroredChanged FINAL)
41 Q_PROPERTY(
bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
42 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
44 QML_ADDED_IN_VERSION(6, 9)
46 enum Status { Null, Ready, Loading, Error };
49 enum Plane { XY, XZ, ZY };
52 explicit PlaneGeometry(QQuick3DObject *parent =
nullptr);
53 ~PlaneGeometry() override;
56 void setWidth(
float newWidth);
58 void setHeight(
float newHeight);
60 QSize meshResolution()
const;
61 void setMeshResolution(
const QSize &newMeshResolution);
64 void setPlane(Plane newPlane);
66 bool mirrored()
const;
67 void setMirrored(
bool newMirrored);
69 bool asynchronous()
const;
70 void setAsynchronous(
bool newAsynchronous);
72 Status status()
const;
74 bool reversed()
const;
75 void setReversed(
bool newReversed);
78 void doUpdateGeometry();
79 void requestFinished();
84 void meshResolutionChanged();
86 void mirroredChanged();
87 void asynchronousChanged();
89 void reversedChanged();
93 QByteArray vertexData;
99 void scheduleGeometryUpdate();
100 void updateGeometry(
const GeometryData &geometryData);
102 static PlaneGeometry::GeometryData generatePlaneGeometry(
float width,
104 QSize meshResolution,
108#if QT_CONFIG(concurrent)
109 static void generatePlaneGeometryAsync(QPromise<PlaneGeometry::GeometryData> &promise,
112 QSize meshResolution,
117 float m_width = 100.0f;
118 float m_height = 100.0f;
119 QSize m_meshResolution = QSize(2, 2);
121 bool m_reversed =
false;
122 bool m_mirrored =
false;
123 bool m_asynchronous =
true;
124 Status m_status = Null;
125#if QT_CONFIG(concurrent)
126 QFuture<GeometryData> m_geometryDataFuture;
127 QFutureWatcher<GeometryData> m_geometryDataWatcher;
129 bool m_geometryUpdateRequested =
false;
130 bool m_pendingAsyncUpdate =
false;