35 Q_PROPERTY(
int rings READ rings WRITE setRings NOTIFY ringsChanged FINAL)
36 Q_PROPERTY(
int segments READ segments WRITE setSegments NOTIFY segmentsChanged FINAL)
37 Q_PROPERTY(
float radius READ radius WRITE setRadius NOTIFY radiusChanged FINAL)
38 Q_PROPERTY(
float tubeRadius READ tubeRadius WRITE setTubeRadius NOTIFY tubeRadiusChanged 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 };
46 explicit TorusGeometry(QQuick3DObject *parent =
nullptr);
47 ~TorusGeometry() override;
50 void setRings(
int newRings);
52 void setSegments(
int newSegments);
55 void setRadius(
float newRadius);
57 float tubeRadius()
const;
58 void setTubeRadius(
float newTubeRadius);
60 bool asynchronous()
const;
61 void setAsynchronous(
bool newAsynchronous);
63 Status status()
const;
66 void doUpdateGeometry();
67 void requestFinished();
71 void segmentsChanged();
73 void tubeRadiusChanged();
74 void asynchronousChanged();
79 QByteArray vertexData;
85 void scheduleGeometryUpdate();
86 void updateGeometry(
const GeometryData &geometryData);
88 static TorusGeometry::GeometryData generateTorusGeometry(
int rings,
92#if QT_CONFIG(concurrent)
93 static void generateTorusGeometryAsync(QPromise<TorusGeometry::GeometryData> &promise,
102 float m_radius = 100.0f;
103 float m_tubeRadius = 10.0f;
104 bool m_asynchronous =
true;
105 Status m_status = Null;
106#if QT_CONFIG(concurrent)
107 QFuture<GeometryData> m_geometryDataFuture;
108 QFutureWatcher<GeometryData> m_geometryDataWatcher;
110 bool m_geometryUpdateRequested =
false;
111 bool m_pendingAsyncUpdate =
false;