33 Q_PROPERTY(
float width READ width WRITE setWidth NOTIFY widthChanged FINAL)
34 Q_PROPERTY(
float height READ height WRITE setHeight NOTIFY heightChanged FINAL)
35 Q_PROPERTY(QSize meshResolution READ meshResolution WRITE setMeshResolution NOTIFY meshResolutionChanged FINAL)
36 Q_PROPERTY(Plane plane READ plane WRITE setPlane NOTIFY planeChanged FINAL)
37 Q_PROPERTY(
bool reversed READ reversed WRITE setReversed NOTIFY reversedChanged FINAL)
38 Q_PROPERTY(
bool mirrored READ mirrored WRITE setMirrored NOTIFY mirroredChanged FINAL)
39 Q_PROPERTY(
bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
40 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
42 QML_ADDED_IN_VERSION(6, 9)
44 enum Status { Null, Ready, Loading, Error };
47 enum Plane { XY, XZ, ZY };
50 explicit PlaneGeometry(QQuick3DObject *parent =
nullptr);
51 ~PlaneGeometry() override;
54 void setWidth(
float newWidth);
56 void setHeight(
float newHeight);
58 QSize meshResolution()
const;
59 void setMeshResolution(
const QSize &newMeshResolution);
62 void setPlane(Plane newPlane);
64 bool mirrored()
const;
65 void setMirrored(
bool newMirrored);
67 bool asynchronous()
const;
68 void setAsynchronous(
bool newAsynchronous);
70 Status status()
const;
72 bool reversed()
const;
73 void setReversed(
bool newReversed);
76 void doUpdateGeometry();
77 void requestFinished();
82 void meshResolutionChanged();
84 void mirroredChanged();
85 void asynchronousChanged();
87 void reversedChanged();
91 QByteArray vertexData;
97 void scheduleGeometryUpdate();
98 void updateGeometry(
const GeometryData &geometryData);
100 static PlaneGeometry::GeometryData generatePlaneGeometry(
float width,
102 QSize meshResolution,
106#if QT_CONFIG(concurrent)
107 static void generatePlaneGeometryAsync(QPromise<PlaneGeometry::GeometryData> &promise,
110 QSize meshResolution,
115 float m_width = 100.0f;
116 float m_height = 100.0f;
117 QSize m_meshResolution = QSize(2, 2);
119 bool m_reversed =
false;
120 bool m_mirrored =
false;
121 bool m_asynchronous =
true;
122 Status m_status = Null;
123#if QT_CONFIG(concurrent)
124 QFuture<GeometryData> m_geometryDataFuture;
125 QFutureWatcher<GeometryData> m_geometryDataWatcher;
127 bool m_geometryUpdateRequested =
false;
128 bool m_pendingAsyncUpdate =
false;