1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
#ifndef SIMPLE_FUNCTION_PYTHON_H
#define SIMPLE_FUNCTION_PYTHON_H
#include "Python.h"
#include "simpleFunction.h"
class simpleFunctionPython : public simpleFunction<double> {
PyObject *_pycallback;
public:
simpleFunctionPython(PyObject *callback) : _pycallback(callback)
{
Py_INCREF(_pycallback);
}
~simpleFunctionPython() { Py_DECREF(_pycallback); }
double operator()(double x, double y, double z) const
{
PyObject *pyargs = Py_BuildValue("(ddd)", x, y, z);
PyObject *result = PyEval_CallObject(_pycallback, pyargs);
double r = 0;
if(result) {
int ok = PyArg_Parse(result, "d", &r);
if(ok == 0) Msg::Error("The python function did not return a double.");
Py_DECREF(result);
}
else {
PyErr_Print();
Msg::Error("An error occurs in the python simple function.");
}
Py_DECREF(pyargs);
return r;
}
};
#endif
|