Revision control
++ // Copyright (C) 2024 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++ #include <private/qspline3dseries_p.h>
++ #include "qgraphs3dlogging_p.h"
++
++ QT_BEGIN_NAMESPACE
++
++ /*!
++ * \class QSpline3DSeries
++ * \inmodule QtGraphs
++ * \ingroup graphs_3D
++ * \since 6.9
++ * \brief The QSpline3DSeries class represents a data series as a spline.
++ *
++ * Spline graphs are used to show information as a series of data points connected
++ * by a curved or straight Catmull-Rom spline.
++ *
++ * This class manages the spline specific visual elements.
++ *
++ * Spline3DSeries extends the Scatter3DSeries API.
++ */
++
++ /*!
++ * \qmltype Spline3DSeries
++ * \nativetype QSpline3DSeries
++ * \inqmlmodule QtGraphs
++ * \ingroup graphs_qml_3D
++ * \inherits Scatter3DSeries
++ * \since 6.9
++ * \brief Represents a data series in a 3D spline graph.
++ *
++ * Spline graphs are used to show information as a series of data points connected
++ * by a curved or straight Catmull-Rom spline.
++ *
++ * This type manages the spline specific visual elements.
++ *
++ */
++
++ /*!
++ * \qmlproperty bool Spline3DSeries::splineVisible
++ *
++ * Visibility of the spline. The default value is \c true.
++ */
++
++ /*!
++ * \qmlproperty real Spline3DSeries::splineTension
++ *
++ * The tension of the spline.
++ *
++ * The spline uses maximum curvature for segments at a value of \c 0.0
++ * Segments are completely straight at a value of \c 1.0
++ * Must be between \c 0.0 and \c 1.0
++ * The default value is \c 0.0
++ *
++ */
++
++ /*!
++ * \qmlproperty real Spline3DSeries::splineKnotting
++ *
++ * The knot parametrization of the spline.
++ *
++ * This parameter can change the profile of the curve.
++ * The spline is classified as a uniform Catmull-Rom spline at a value of \c 0.0,
++ * a centripetal Catmull-Rom spline at a value of \c 0.5,
++ * and a chordal Catmull-Rom spline at a value of \c 1.0.
++ *
++ * The value must be between \c 0.0 and \c 1.0.
++ * The default value is \c 0.5.
++ *
++ */
++
++ /*!
++ * \qmlproperty bool Spline3DSeries::splineLooping
++ *
++ * Determines whether the spline loops.
++ *
++ * This adds a spline segment between the first and last points of the series
++ * connecting the spline into a loop.
++ *
++ * The default value is \c false
++ *
++ */
++
++ /*!
++ * \qmlproperty int Spline3DSeries::splineResolution
++ *
++ * The resolution of the segments spline.
++ *
++ * The number of vertices per spline segment,
++ * which is defined as the part between two points.
++ *
++ * Must be a value above \c 2.
++ * The default value is \c 10.
++ */
++
++ /*!
++ * \qmlproperty color Spline3DSeries::splineColor
++ *
++ * The color of the spline.
++ *
++ */
++
++ /*!
++ \qmlsignal Scatter3DSeries::splineVisibilityChanged(bool visible)
++
++ This signal is emitted when splineVisible changes to \a visible.
++ */
++
++ /*!
++ \qmlsignal Scatter3DSeries::splineTensionChanged(real tension)
++
++ This signal is emitted when splineTension changes to \a tension.
++ */
++
++ /*!
++ \qmlsignal Scatter3DSeries::splineKnottingChanged(real knotting)
++
++ This signal is emitted when splineKnotting changes to \a knotting.
++ */
++
++ /*!
++ \qmlsignal Scatter3DSeries::splineLoopingChanged(bool looping)
++
++ This signal is emitted when splineLooping changes to \a looping.
++ */
++
++ /*!
++ \qmlsignal Scatter3DSeries::splineColorChanged(color color)
++
++ This signal is emitted when splineColor changes to \a color.
++ */
++
++ /*!
++ \qmlsignal Scatter3DSeries::splineResolutionChanged(int resolution)
++
++ This signal is emitted when splineResolution changes to \a resolution.
++ */
++
++ /*!
++ * Constructs a spline 3D series with the parent \a parent.
++ */
++ QSpline3DSeries ::QSpline3DSeries(QObject *parent)
++ : QScatter3DSeries(*(new QSpline3DSeriesPrivate()), parent)
++ {
++ Q_D(QScatter3DSeries);
++ // Default proxy
++ d->setDataProxy(new QScatterDataProxy);
++ }
++
++ /*!
++ * Constructs a spline 3D series with the data proxy \a dataProxy and the
++ * parent \a parent.
++ */
++ QSpline3DSeries ::QSpline3DSeries(QScatterDataProxy *dataProxy, QObject *parent)
++ : QScatter3DSeries(*(new QSpline3DSeriesPrivate()), parent)
++ {
++ Q_D(QScatter3DSeries);
++ // Default proxy
++ d->setDataProxy(dataProxy);
++ }
++
++ /*!
++ * \internal
++ */
++ QSpline3DSeries ::QSpline3DSeries(QSpline3DSeriesPrivate &dd, QObject *parent)
++ : QScatter3DSeries(dd, parent)
++ {}
++
++ /*!
++ * Deletes the spline 3D series.
++ */
++ QSpline3DSeries::~QSpline3DSeries() {}
++
++ /*!
++ * \property QSpline3DSeries::splineVisible
++ *
++ * \brief Visibility of the spline.
++ *
++ * Visibility of the spline.
++ * The default value is \c true.
++ *
++ */
++ void QSpline3DSeries::setSplineVisible(bool visible)
++ {
++ Q_D(QSpline3DSeries);
++ if (d->m_splineVisible == visible) {
++ qCDebug(lcProperties3D) << __FUNCTION__
++ << "value is already set to:" << visible;
++ return;
++ }
++ d->m_splineVisible = visible;
++ emit splineVisibilityChanged(visible);
++ }
++
++ bool QSpline3DSeries::isSplineVisible() const
++ {
++ const Q_D(QSpline3DSeries);
++ return d->m_splineVisible;
++ }
++
++ /*!
++ * \property QSpline3DSeries::splineTension
++ *
++ * \brief The tension of the spline.
++ *
++ * The spline uses maximum curvature for segments at a value of \c 0.0
++ * Segments are completely straight at a value of \c 1.0
++ * Must be between \c 0.0 and \c 1.0
++ * The default value is \c 0.0
++ *
++ */
++ void QSpline3DSeries::setSplineTension(qreal tension)
++ {
++ Q_D(QSpline3DSeries);
++ if (tension < 0.0f || tension > 1.0f) {
++ qCWarning(lcProperties3D, "%s invalid tension. Valid range for tension is 0.0f...1.0f",
++ qUtf8Printable(QLatin1String(__FUNCTION__)));
++ return;
++ } else if (d->m_tension == tension) {
++ qCDebug(lcProperties3D, "%s value is already set to: %f",
++ qUtf8Printable(QLatin1String(__FUNCTION__)), tension);
++ return;
++ }
++ d->m_tension = tension;
++ emit splineTensionChanged(tension);
++ }
++
++ qreal QSpline3DSeries::splineTension() const
++ {
++ const Q_D(QSpline3DSeries);
++ return d->m_tension;
++ }
++
++ /*!
++ * \property QSpline3DSeries::splineKnotting
++ *
++ * \brief The knot parametrization of the spline.
++ *
++ * This parameter can change the profile of the curve.
++ * The spline is classified as a uniform Catmull-Rom spline at a value of \c 0.0,
++ * a centripetal Catmull-Rom spline at a value of \c 0.5,
++ * and a chordal Catmull-Rom spline at a value of \c 1.0.
++ *
++ * The value must be between \c 0.0 and \c 1.0.
++ * The default value is \c 0.5.
++ *
++ */
++ void QSpline3DSeries::setSplineKnotting(qreal knotting)
++ {
++ Q_D(QSpline3DSeries);
++ if (knotting < 0.0f || knotting > 1.0f) {
++ qCWarning(lcProperties3D, "%s invalid knotting. Valid range for knotting is 0.0f...1.0f",
++ qUtf8Printable(QLatin1String(__FUNCTION__)));
++ return;
++ } else if (d->m_knotting == knotting) {
++ qCDebug(lcProperties3D, "%s value is already set to: %f",
++ qUtf8Printable(QLatin1String(__FUNCTION__)), knotting);
++ return;
++ }
++ d->m_knotting = knotting;
++ emit splineKnottingChanged(knotting);
++ }
++
++ qreal QSpline3DSeries::splineKnotting() const
++ {
++ const Q_D(QSpline3DSeries);
++ return d->m_knotting;
++ }
++
++ /*!
++ * \property QSpline3DSeries::splineLooping
++ *
++ * \brief Determines whether the spline loops.
++ *
++ * This adds a spline segment between the first and last points of the series
++ * connecting the spline into a loop.
++ *
++ * The default value is \c false
++ *
++ */
++ void QSpline3DSeries::setSplineLooping(bool looping)
++ {
++ Q_D(QSpline3DSeries);
++ if (d->m_looping == looping) {
++ qCDebug(lcProperties3D) << __FUNCTION__
++ << "value is already set to:" << looping;
++ return;
++ }
++ d->m_looping = looping;
++ emit splineLoopingChanged(looping);
++ }
++
++ bool QSpline3DSeries::isSplineLooping() const
++ {
++ const Q_D(QSpline3DSeries);
++ return d->m_looping;
++ }
++
++ /*!
++ * \property QSpline3DSeries::splineColor
++ *
++ * \brief The color of the spline.
++ *
++ */
++ void QSpline3DSeries::setSplineColor(QColor color)
++ {
++ Q_D(QSpline3DSeries);
++ if (d->m_splineColor == color) {
++ qCDebug(lcProperties3D) << __FUNCTION__
++ << "value is already set to:" << color;
++ return;
++ }
++ d->m_splineColor = color;
++ emit splineColorChanged(color);
++ }
++
++ QColor QSpline3DSeries::splineColor() const
++ {
++ const Q_D(QSpline3DSeries);
++ return d->m_splineColor;
++ }
++
++ /*!
++ * \property QSpline3DSeries::splineResolution
++ *
++ * \brief The resolution of the segments spline.
++ *
++ * The number of vertices per spline segment,
++ * which is defined as the part between two points.
++ *
++ * Must be a value above \c 2.
++ * The default value is \c 10.
++ */
++
++ void QSpline3DSeries::setSplineResolution(int resolution)
++ {
++ Q_D(QSpline3DSeries);
++ if (resolution < 2) {
++ qCWarning(lcProperties3D, "%s invalid resolution. The resolution must be 2 or above",
++ qUtf8Printable(QLatin1String(__FUNCTION__)));
++ return;
++ } else if (d->m_resolution == resolution) {
++ qCDebug(lcProperties3D, "%s value is already set to: %d",
++ qUtf8Printable(QLatin1String(__FUNCTION__)), resolution);
++ return;
++ }
++ d->m_resolution = resolution;
++ emit splineResolutionChanged(resolution);
++ }
++
++ int QSpline3DSeries::splineResolution() const
++ {
++ const Q_D(QSpline3DSeries);
++ return d->m_resolution;
++ }
++
++ // QSpline3DSeriesPrivate
++
++ QSpline3DSeriesPrivate::QSpline3DSeriesPrivate()
++ : QScatter3DSeriesPrivate()
++ {}
++
++ QSpline3DSeriesPrivate::~QSpline3DSeriesPrivate() {}
++
++ QT_END_NAMESPACE
++
++ #include "moc_qspline3dseries.cpp"