42 "Class to provide Perlin noise functionalities.\n"
44 ".. method:: __init__(seed = -1)\n"
46 " Builds a Noise object. Seed is an optional argument. The seed value is used\n"
47 " as a seed for random number generation if it is equal to or greater than zero;\n"
48 " otherwise, time is used as a seed.\n"
50 " :arg seed: Seed for random number generation.\n"
51 " :type seed: int\n");
54 static const char *kwlist[] = {
"seed",
nullptr};
57 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|l", (
char **)kwlist, &
seed)) {
69 Py_TYPE(
self)->tp_free((PyObject *)
self);
74 return PyUnicode_FromFormat(
"Noise - address: %p",
self->n);
79 FrsNoise_turbulence1_doc,
80 ".. method:: turbulence1(v, freq, amp, oct=4)\n"
82 " Returns a noise value for a 1D element.\n"
84 " :arg v: One-dimensional sample point.\n"
86 " :arg freq: Noise frequency.\n"
87 " :type freq: float\n"
88 " :arg amp: Amplitude.\n"
90 " :arg oct: Number of octaves.\n"
92 " :return: A noise value.\n"
96 static const char *kwlist[] = {
"seed",
nullptr};
98 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|I", (
char **)kwlist, &
seed)) {
99 PyErr_SetString(PyExc_TypeError,
"optional argument 1 must be of type int");
110 static const char *kwlist[] = {
"v",
"oct",
nullptr};
115 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"d|I", (
char **)kwlist, &
x, &nbOctaves)) {
118 return PyFloat_FromDouble(
self->pn->turbulenceSmooth(
x, nbOctaves));
123 static const char *kwlist[] = {
"v",
"freq",
"amp",
"oct",
nullptr};
127 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"fff|I", (
char **)kwlist, &f1, &f2, &f3, &
i)) {
130 return PyFloat_FromDouble(
self->n->turbulence1(f1, f2, f3,
i));
135 FrsNoise_turbulence2_doc,
136 ".. method:: turbulence2(v, freq, amp, oct=4)\n"
138 " Returns a noise value for a 2D element.\n"
140 " :arg v: Two-dimensional sample point.\n"
141 " :type v: :class:`mathutils.Vector` | tuple[float, float] | list[float]\n"
142 " :arg freq: Noise frequency.\n"
143 " :type freq: float\n"
144 " :arg amp: Amplitude.\n"
145 " :type amp: float\n"
146 " :arg oct: Number of octaves.\n"
148 " :return: A noise value.\n"
152 static const char *kwlist[] = {
"v",
"freq",
"amp",
"oct",
nullptr};
158 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"Off|I", (
char **)kwlist, &obj1, &f2, &f3, &
i)) {
162 PyErr_SetString(PyExc_TypeError,
163 "argument 1 must be a 2D vector (either a list of 2 elements or Vector)");
166 float t =
self->n->turbulence2(vec, f2, f3,
i);
167 return PyFloat_FromDouble(t);
172 FrsNoise_turbulence3_doc,
173 ".. method:: turbulence3(v, freq, amp, oct=4)\n"
175 " Returns a noise value for a 3D element.\n"
177 " :arg v: Three-dimensional sample point.\n"
178 " :type v: :class:`mathutils.Vector` | tuple[float, float, float] | list[float]\n"
179 " :arg freq: Noise frequency.\n"
180 " :type freq: float\n"
181 " :arg amp: Amplitude.\n"
182 " :type amp: float\n"
183 " :arg oct: Number of octaves.\n"
185 " :return: A noise value.\n"
189 static const char *kwlist[] = {
"v",
"freq",
"amp",
"oct",
nullptr};
195 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"Off|I", (
char **)kwlist, &obj1, &f2, &f3, &
i)) {
199 PyErr_SetString(PyExc_TypeError,
200 "argument 1 must be a 3D vector (either a list of 3 elements or Vector)");
203 float t =
self->n->turbulence3(vec, f2, f3,
i);
204 return PyFloat_FromDouble(t);
209 FrsNoise_smoothNoise1_doc,
210 ".. method:: smoothNoise1(v)\n"
212 " Returns a smooth noise value for a 1D element.\n"
214 " :arg v: One-dimensional sample point.\n"
216 " :return: A smooth noise value.\n"
220 static const char *kwlist[] = {
"v",
nullptr};
223 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"f", (
char **)kwlist, &f)) {
226 return PyFloat_FromDouble(
self->n->smoothNoise1(f));
231 FrsNoise_smoothNoise2_doc,
232 ".. method:: smoothNoise2(v)\n"
234 " Returns a smooth noise value for a 2D element.\n"
236 " :arg v: Two-dimensional sample point.\n"
237 " :type v: :class:`mathutils.Vector` | tuple[float, float] | list[float]\n"
238 " :return: A smooth noise value.\n"
242 static const char *kwlist[] = {
"v",
nullptr};
246 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O", (
char **)kwlist, &obj)) {
250 PyErr_SetString(PyExc_TypeError,
251 "argument 1 must be a 2D vector (either a list of 2 elements or Vector)");
254 float t =
self->n->smoothNoise2(vec);
255 return PyFloat_FromDouble(t);
260 FrsNoise_smoothNoise3_doc,
261 ".. method:: smoothNoise3(v)\n"
263 " Returns a smooth noise value for a 3D element.\n"
265 " :arg v: Three-dimensional sample point.\n"
266 " :type v: :class:`mathutils.Vector` | tuple[float, float, float] | list[float]\n"
267 " :return: A smooth noise value.\n"
271 static const char *kwlist[] = {
"v",
nullptr};
275 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O", (
char **)kwlist, &obj)) {
279 PyErr_SetString(PyExc_TypeError,
280 "argument 1 must be a 3D vector (either a list of 3 elements or Vector)");
283 float t =
self->n->smoothNoise3(vec);
284 return PyFloat_FromDouble(t);
289# pragma clang diagnostic push
290# pragma clang diagnostic ignored "-Wcast-function-type"
292# pragma GCC diagnostic push
293# pragma GCC diagnostic ignored "-Wcast-function-type"
300 METH_VARARGS | METH_KEYWORDS,
301 FrsNoise_turbulence1_doc},
304 METH_VARARGS | METH_KEYWORDS,
305 FrsNoise_turbulence2_doc},
308 METH_VARARGS | METH_KEYWORDS,
309 FrsNoise_turbulence3_doc},
312 METH_VARARGS | METH_KEYWORDS,
313 FrsNoise_smoothNoise1_doc},
316 METH_VARARGS | METH_KEYWORDS,
317 FrsNoise_smoothNoise2_doc},
320 METH_VARARGS | METH_KEYWORDS,
321 FrsNoise_smoothNoise3_doc},
322 {
"rand", (PyCFunction)
FrsNoise_drand, METH_VARARGS | METH_KEYWORDS,
nullptr},
323 {
"turbulence_smooth",
325 METH_VARARGS | METH_KEYWORDS,
327 {
nullptr,
nullptr, 0,
nullptr},
332# pragma clang diagnostic pop
334# pragma GCC diagnostic pop
341 PyVarObject_HEAD_INIT(
nullptr, 0)
360 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
bool Vec3f_ptr_from_PyObject(PyObject *obj, Vec3f &vec)
bool Vec2f_ptr_from_PyObject(PyObject *obj, Vec2f &vec)
static PyObject * FrsNoise_repr(BPy_FrsNoise *self)
static PyObject * FrsNoise_turbulence2(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
static void FrsNoise_dealloc(BPy_FrsNoise *self)
int FrsNoise_Init(PyObject *module)
static PyObject * FrsNoise_turbulence_smooth(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
static PyObject * FrsNoise_smoothNoise3(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
static PyObject * FrsNoise_turbulence3(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
PyTypeObject FrsNoise_Type
PyDoc_STRVAR(FrsNoise_doc, "Class to provide Perlin noise functionalities.\n" "\n" ".. method:: __init__(seed = -1)\n" "\n" " Builds a Noise object. Seed is an optional argument. The seed value is used\n" " as a seed for random number generation if it is equal to or greater than zero;\n" " otherwise, time is used as a seed.\n" "\n" " :arg seed: Seed for random number generation.\n" " :type seed: int\n")
static PyObject * FrsNoise_drand(BPy_FrsNoise *, PyObject *args, PyObject *kwds)
static PyObject * FrsNoise_smoothNoise1(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
static PyObject * FrsNoise_turbulence1(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
static PyObject * FrsNoise_smoothNoise2(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
static PyMethodDef BPy_FrsNoise_methods[]
static int FrsNoise_init(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
Pseudo-random number generator.
static unsigned long seed
static void srand48(long seedval)
VecMat::Vec2< float > Vec2f
static struct PyModuleDef module