/** * @author Michael Krebs (AMVALOR) * @date 25.01.2017 * @version 1 */ #ifndef LVOX3_GENERICCOMPUTE_H #define LVOX3_GENERICCOMPUTE_H #include "tools/worker/lvox3_worker.h" #include "tools/3dgrid/abstract/lvox3_abstractgrid3d.h" #include "tools/lvox3_genericconfiguration.h" #include "muParser.h" /** * @brief Use a parser, a formula and multiple input grids to compute the output grid */ class LVOX3_GenericCompute : public LVOX3_Worker { Q_OBJECT public: struct Input { char gridLetterInFormula; LVOX3_AbstractGrid3D* grid; }; /** * @brief Create a worker that will use the formula to compute the output grid * @param inputs : list of input grid * @param formula : formula to use * @param output : output grid */ LVOX3_GenericCompute(const QList& inputs, const QList& checksFormula, const std::string& finalFormula, LVOX3_AbstractGrid3D* output); ~LVOX3_GenericCompute(); protected: /** * @brief Do the job */ void doTheJob(); private: struct InternalInput { int indexInVariables; LVOX3_AbstractGrid3D* grid; }; QVector m_inputs; QVector m_checksErrorParsers; std::string m_finalFormula; LVOX3_AbstractGrid3D* m_output; QVector m_checksParsers; mu::Parser m_finalParser; QVector m_variables; double m_outputVariable; void initParser(mu::Parser& parser, const std::string &formula); }; #endif // LVOX3_GENERICCOMPUTE_H