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"
55 static const char *kwlist[] = {
"seed",
nullptr};
58 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|l", (
char **)kwlist, &
seed)) {
70 Py_TYPE(
self)->tp_free((PyObject *)
self);
75 return PyUnicode_FromFormat(
"Noise - address: %p",
self->n);
80 FrsNoise_turbulence1_doc,
81 ".. method:: turbulence1(v, freq, amp, oct=4)\n"
83 " Returns a noise value for a 1D element.\n"
85 " :arg v: One-dimensional sample point.\n"
87 " :arg freq: Noise frequency.\n"
88 " :type freq: float\n"
89 " :arg amp: Amplitude.\n"
91 " :arg oct: Number of octaves.\n"
93 " :return: A noise value.\n"
98 static const char *kwlist[] = {
"seed",
nullptr};
100 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|I", (
char **)kwlist, &
seed)) {
101 PyErr_SetString(PyExc_TypeError,
"optional argument 1 must be of type int");
112 static const char *kwlist[] = {
"v",
"oct",
nullptr};
117 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"d|I", (
char **)kwlist, &
x, &nbOctaves)) {
120 return PyFloat_FromDouble(
self->pn->turbulenceSmooth(
x, nbOctaves));
125 static const char *kwlist[] = {
"v",
"freq",
"amp",
"oct",
nullptr};
129 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"fff|I", (
char **)kwlist, &f1, &f2, &f3, &
i)) {
132 return PyFloat_FromDouble(
self->n->turbulence1(f1, f2, f3,
i));
137 FrsNoise_turbulence2_doc,
138 ".. method:: turbulence2(v, freq, amp, oct=4)\n"
140 " Returns a noise value for a 2D element.\n"
142 " :arg v: Two-dimensional sample point.\n"
143 " :type v: :class:`mathutils.Vector` | tuple[float, float] | list[float]\n"
144 " :arg freq: Noise frequency.\n"
145 " :type freq: float\n"
146 " :arg amp: Amplitude.\n"
147 " :type amp: float\n"
148 " :arg oct: Number of octaves.\n"
150 " :return: A noise value.\n"
155 static const char *kwlist[] = {
"v",
"freq",
"amp",
"oct",
nullptr};
161 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"Off|I", (
char **)kwlist, &obj1, &f2, &f3, &
i)) {
165 PyErr_SetString(PyExc_TypeError,
166 "argument 1 must be a 2D vector (either a list of 2 elements or Vector)");
169 float t =
self->n->turbulence2(vec, f2, f3,
i);
170 return PyFloat_FromDouble(t);
175 FrsNoise_turbulence3_doc,
176 ".. method:: turbulence3(v, freq, amp, oct=4)\n"
178 " Returns a noise value for a 3D element.\n"
180 " :arg v: Three-dimensional sample point.\n"
181 " :type v: :class:`mathutils.Vector` | tuple[float, float, float] | list[float]\n"
182 " :arg freq: Noise frequency.\n"
183 " :type freq: float\n"
184 " :arg amp: Amplitude.\n"
185 " :type amp: float\n"
186 " :arg oct: Number of octaves.\n"
188 " :return: A noise value.\n"
193 static const char *kwlist[] = {
"v",
"freq",
"amp",
"oct",
nullptr};
199 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"Off|I", (
char **)kwlist, &obj1, &f2, &f3, &
i)) {
203 PyErr_SetString(PyExc_TypeError,
204 "argument 1 must be a 3D vector (either a list of 3 elements or Vector)");
207 float t =
self->n->turbulence3(vec, f2, f3,
i);
208 return PyFloat_FromDouble(t);
213 FrsNoise_smoothNoise1_doc,
214 ".. method:: smoothNoise1(v)\n"
216 " Returns a smooth noise value for a 1D element.\n"
218 " :arg v: One-dimensional sample point.\n"
220 " :return: A smooth noise value.\n"
225 static const char *kwlist[] = {
"v",
nullptr};
228 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"f", (
char **)kwlist, &f)) {
231 return PyFloat_FromDouble(
self->n->smoothNoise1(f));
236 FrsNoise_smoothNoise2_doc,
237 ".. method:: smoothNoise2(v)\n"
239 " Returns a smooth noise value for a 2D element.\n"
241 " :arg v: Two-dimensional sample point.\n"
242 " :type v: :class:`mathutils.Vector` | tuple[float, float] | list[float]\n"
243 " :return: A smooth noise value.\n"
248 static const char *kwlist[] = {
"v",
nullptr};
252 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O", (
char **)kwlist, &obj)) {
256 PyErr_SetString(PyExc_TypeError,
257 "argument 1 must be a 2D vector (either a list of 2 elements or Vector)");
260 float t =
self->n->smoothNoise2(vec);
261 return PyFloat_FromDouble(t);
266 FrsNoise_smoothNoise3_doc,
267 ".. method:: smoothNoise3(v)\n"
269 " Returns a smooth noise value for a 3D element.\n"
271 " :arg v: Three-dimensional sample point.\n"
272 " :type v: :class:`mathutils.Vector` | tuple[float, float, float] | list[float]\n"
273 " :return: A smooth noise value.\n"
278 static const char *kwlist[] = {
"v",
nullptr};
282 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O", (
char **)kwlist, &obj)) {
286 PyErr_SetString(PyExc_TypeError,
287 "argument 1 must be a 3D vector (either a list of 3 elements or Vector)");
290 float t =
self->n->smoothNoise3(vec);
291 return PyFloat_FromDouble(t);
296# pragma clang diagnostic push
297# pragma clang diagnostic ignored "-Wcast-function-type"
299# pragma GCC diagnostic push
300# pragma GCC diagnostic ignored "-Wcast-function-type"
307 METH_VARARGS | METH_KEYWORDS,
308 FrsNoise_turbulence1_doc},
311 METH_VARARGS | METH_KEYWORDS,
312 FrsNoise_turbulence2_doc},
315 METH_VARARGS | METH_KEYWORDS,
316 FrsNoise_turbulence3_doc},
319 METH_VARARGS | METH_KEYWORDS,
320 FrsNoise_smoothNoise1_doc},
323 METH_VARARGS | METH_KEYWORDS,
324 FrsNoise_smoothNoise2_doc},
327 METH_VARARGS | METH_KEYWORDS,
328 FrsNoise_smoothNoise3_doc},
329 {
"rand", (PyCFunction)
FrsNoise_drand, METH_VARARGS | METH_KEYWORDS,
nullptr},
330 {
"turbulence_smooth",
332 METH_VARARGS | METH_KEYWORDS,
334 {
nullptr,
nullptr, 0,
nullptr},
339# pragma clang diagnostic pop
341# pragma GCC diagnostic pop
348 PyVarObject_HEAD_INIT(
nullptr, 0)
367 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)
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")
static PyObject * FrsNoise_turbulence3(BPy_FrsNoise *self, PyObject *args, PyObject *kwds)
PyTypeObject FrsNoise_Type
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