File indexing completed on 2024-04-14 14:07:56

0001 // SPDX-FileCopyrightText: 2015 Aleix Pol <aleixpol@kde.org>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 #ifndef GRAPH3DITEM_H
0005 #define GRAPH3DITEM_H
0006 
0007 #include <QQuickFramebufferObject>
0008 #include "plotter3d_es.h"
0009 #include <qqmlregistration.h>
0010 
0011 class Graph3DItem;
0012 
0013 class Plotter3DRenderer : public QObject, public Analitza::Plotter3DES
0014 {
0015 public:
0016     explicit Plotter3DRenderer(Graph3DItem* item);
0017 
0018     int currentPlot() const override { return 0; }
0019     void modelChanged() override {}
0020     void renderGL() override;
0021 
0022     QQuickWindow* window() const;
0023     QImage grabImage() override;
0024 
0025 private:
0026     Graph3DItem * m_item;
0027 };
0028 
0029 class Graph3DItem : public QQuickFramebufferObject
0030 {
0031     Q_OBJECT
0032     QML_NAMED_ELEMENT(Graph3DView)
0033     Q_PROPERTY(QStringList filters READ filters CONSTANT)
0034     Q_PROPERTY(QAbstractItemModel* model READ model WRITE setModel NOTIFY modelChanged)
0035     public:
0036         explicit Graph3DItem(QQuickItem* parent = Q_NULLPTR);
0037         ~Graph3DItem() override;
0038 
0039         QAbstractItemModel* model() const;
0040         void setModel(QAbstractItemModel* model);
0041 
0042         QQuickFramebufferObject::Renderer * createRenderer() const override;
0043 
0044         Q_SCRIPTABLE QStringList addFunction(const QString& expression, const QSharedPointer<Analitza::Variables>& vars = {});
0045         Q_SCRIPTABLE void rotate(qreal x, qreal y);
0046         Q_SCRIPTABLE void scale(qreal s);
0047         Q_SCRIPTABLE void resetViewport();
0048 
0049         Q_SCRIPTABLE bool save(const QUrl &url);
0050 
0051         QStringList filters() const;
0052 
0053     Q_SIGNALS:
0054         void modelChanged(QAbstractItemModel* model);
0055 
0056     private:
0057         Plotter3DRenderer *m_plotter;
0058 };
0059 
0060 #endif