From 4ec69d5a2beb02c57d079d41a76008320ef4885b Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Thu, 18 Aug 2011 23:07:17 +0000 Subject: [PATCH] Added an optional argument 'seed' to the Freestyle.Noise class constructor. The value is used as a seed for random number generation if it is equal to or greater than zero; otherwise, time is used as a seed. --- release/scripts/freestyle/style_modules/shaders.py | 8 ++++---- source/blender/freestyle/intern/geometry/Noise.cpp | 4 ++-- source/blender/freestyle/intern/geometry/Noise.h | 2 +- .../freestyle/intern/python/BPy_FrsNoise.cpp | 14 ++++++++++---- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/release/scripts/freestyle/style_modules/shaders.py b/release/scripts/freestyle/style_modules/shaders.py index 4d8ddeb0ce8..50630942573 100755 --- a/release/scripts/freestyle/style_modules/shaders.py +++ b/release/scripts/freestyle/style_modules/shaders.py @@ -913,9 +913,9 @@ class pySinusDisplacementShader(StrokeShader): it.increment() class pyPerlinNoise1DShader(StrokeShader): - def __init__(self, freq = 10, amp = 10, oct = 4): + def __init__(self, freq = 10, amp = 10, oct = 4, seed = -1): StrokeShader.__init__(self) - self.__noise = Noise() + self.__noise = Noise(seed) self.__freq = freq self.__amp = amp self.__oct = oct @@ -932,9 +932,9 @@ class pyPerlinNoise1DShader(StrokeShader): it.increment() class pyPerlinNoise2DShader(StrokeShader): - def __init__(self, freq = 10, amp = 10, oct = 4): + def __init__(self, freq = 10, amp = 10, oct = 4, seed = -1): StrokeShader.__init__(self) - self.__noise = Noise() + self.__noise = Noise(seed) self.__freq = freq self.__amp = amp self.__oct = oct diff --git a/source/blender/freestyle/intern/geometry/Noise.cpp b/source/blender/freestyle/intern/geometry/Noise.cpp index 396fc3bbb47..c9a80adc5ee 100755 --- a/source/blender/freestyle/intern/geometry/Noise.cpp +++ b/source/blender/freestyle/intern/geometry/Noise.cpp @@ -225,11 +225,11 @@ float Noise::smoothNoise3(Vec3f& vec) return lerp(sz, c, d); } -Noise::Noise() +Noise::Noise(long seed) { int i, j, k; - seednrand(time(NULL)); + seednrand((seed < 0) ? time(NULL) : seed); for (i = 0 ; i < _Noise_B_ ; i++) { p[i] = i; diff --git a/source/blender/freestyle/intern/geometry/Noise.h b/source/blender/freestyle/intern/geometry/Noise.h index 00cebbb451e..f92cf07e914 100755 --- a/source/blender/freestyle/intern/geometry/Noise.h +++ b/source/blender/freestyle/intern/geometry/Noise.h @@ -45,7 +45,7 @@ class LIB_GEOMETRY_EXPORT Noise public: /*! Builds a Noise object */ - Noise(); + Noise(long seed = -1); /*! Destructor */ ~Noise() {} diff --git a/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp b/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp index bd2b5a4dad0..d58a37179ac 100644 --- a/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp +++ b/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp @@ -28,15 +28,21 @@ int FrsNoise_Init( PyObject *module ) static char FrsNoise___doc__[] = "Class to provide Perlin noise functionalities.\n" "\n" -".. method:: __init__()\n" +".. method:: __init__(seed = -1)\n" "\n" -" Builds a Noise object.\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 int FrsNoise___init__(BPy_FrsNoise *self, PyObject *args, PyObject *kwds) { - if(!( PyArg_ParseTuple(args, "") )) + long seed = -1; + if(!( PyArg_ParseTuple(args, "|l", &seed) )) return -1; - self->n = new Noise(); + self->n = new Noise(seed); return 0; }