custom_function.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #include <memory>
00004 #include <string>
00005 #include <QWidget>
00006 #include <QString>
00007 #include <QDomDocument>
00008 #include <QString>
00009 #include <QJSEngine>
00010 #include "PlotJuggler/plotdata.h"
00011 
00012 class CustomFunction;
00013 class QJSEngine;
00014 typedef std::shared_ptr<CustomFunction> CustomPlotPtr;
00015 typedef std::unordered_map<std::string, CustomPlotPtr> CustomPlotMap;
00016 
00017 struct SnippetData{
00018     QString name;
00019     QString globalVars;
00020     QString equation;
00021 };
00022 
00023 typedef std::map<QString, SnippetData> SnippetsMap;
00024 
00025 SnippetsMap GetSnippetsFromXML(const QString& xml_text);
00026 
00027 SnippetsMap GetSnippetsFromXML(const QDomElement& snippets_element);
00028 
00029 QDomElement ExportSnippets(const SnippetsMap& snippets,
00030                            QDomDocument& destination_doc);
00031 
00032 class CustomFunction
00033 {
00034 public:
00035     CustomFunction(const std::string &linkedPlot,
00036                const std::string &plotName,
00037                const QString &globalVars,
00038                const QString &function);
00039 
00040     CustomFunction(const std::string &linkedPlot,
00041                    const SnippetData &snippet);
00042 
00043     void calculateAndAdd(PlotDataMapRef &plotData);
00044 
00045     void calculate(const PlotDataMapRef &plotData, PlotData *dst_data);
00046 
00047     const std::string& name() const;
00048 
00049     const std::string& linkedPlotName() const;
00050 
00051     const QString& globalVars() const;
00052 
00053     const QString& function() const;
00054 
00055     QDomElement xmlSaveState(QDomDocument &doc) const;
00056 
00057     static CustomPlotPtr createFromXML(QDomElement &element );
00058 
00059     static QStringList getChannelsFromFuntion(const QString& function);
00060 
00061 private:
00062     void initJsEngine();
00063 
00064     PlotData::Point  calculatePoint(QJSValue &calcFct,
00065                                     const PlotData &src_data,
00066                                     const std::vector<const PlotData *> &channels_data,
00067                                     QJSValue &chan_values,
00068                                     size_t point_index);
00069 
00070     const std::string _linked_plot_name;
00071     const std::string _plot_name;
00072     const QString _global_vars;
00073     const QString _function;
00074     QString _function_replaced;
00075     std::vector<std::string> _used_channels;
00076 
00077     std::unique_ptr<QJSEngine> _jsEngine;
00078     double _last_updated_timestamp;
00079 };
00080 
00081 
00082 


plotjuggler
Author(s): Davide Faconti
autogenerated on Wed Jul 3 2019 19:28:04