private static int Threaded_CreatePerlinNoisePlane(int start, int end, Engine.Threading.ParamList paramList) { Engine.Effects.Noise.IModule module = (Engine.Effects.Noise.IModule)paramList.Get(paramName_module).Value; Engine.Surface.Canvas canvas = (Engine.Surface.Canvas)paramList.Get(paramName_canvas).Value; double value = 0; // loop block : source and info at : https://libnoisedotnet.codeplex.com/downloads/get/720936 // and http://libnoise.sourceforge.net/tutorials/tutorial8.html for (int y = start; y < end; y++) { for (int x = 0; x < canvas.Width - 1; x++) { value = (module.GetValue(x, y, 10) + 1) / 2.0; if (value < 0) { value = 0; } if (value > 1.0) { value = 1.0; } byte intensity = (byte)(value * 255.0); Engine.Color.Cell c = Engine.Color.Cell.ShadeOfGray(intensity); canvas.SetPixel(c, x, y, PixelSetOptions.Ignore); } } return(0); }
public virtual void Initialize(Engine.Workflow w) { t_workflow = w; t_attributeCollection = new Attributes.AttributeCollection(); t_imageSource = t_workflow.Canvas; // clear the drawing surface of all work layers created by previous tools or effects t_workflow.SelectionGlassRequest(SelectionGlassRequestType.Delete); }
public static Engine.Surface.Canvas CreatePerlinNoisePlane(Engine.Surface.Canvas source, double frequency, int seed, int octaves) { Engine.Effects.Noise.IModule module = new Engine.Effects.Noise.Perlin(); ((Perlin)module).Frequency = frequency; ((Perlin)module).NoiseQuality = NoiseQuality.Standard; ((Perlin)module).Seed = seed; ((Perlin)module).OctaveCount = octaves; ((Perlin)module).Lacunarity = 2.0; ((Perlin)module).Persistence = 0.5; Engine.Surface.Canvas perlinSurface = new Canvas(source.Width, source.Height); Engine.Threading.ThreadedLoop loop = new Threading.ThreadedLoop(); Engine.Threading.ParamList paramList = new Threading.ParamList(); paramList.Add(paramName_module, typeof(Engine.Effects.Noise.IModule), module); paramList.Add(paramName_canvas, typeof(Engine.Surface.Canvas), perlinSurface); loop.Loop(source.Height, Threaded_CreatePerlinNoisePlane, paramList); loop.Dispose(); return(perlinSurface); }
private void ThreadedProcess() { if (t_noiseType == NoiseTypes.Undefined) { t_noiseType = NoiseTypes.FastNoise; } Engine.Effects.Noise.IModule module; // switch block : source and info at : https://libnoisedotnet.codeplex.com/downloads/get/720936 // and http://libnoise.sourceforge.net/tutorials/tutorial8.html switch (t_noiseType) { case NoiseTypes.Billow: module = new Engine.Effects.Noise.Billow(); ((Billow)module).Frequency = t_frequency; ((Billow)module).NoiseQuality = NoiseQuality.Standard; ((Billow)module).Seed = t_seed; ((Billow)module).OctaveCount = t_octaves; ((Billow)module).Lacunarity = t_lacunarity; ((Billow)module).Persistence = t_persistence; break; case NoiseTypes.FastBillow: module = new Engine.Effects.Noise.FastBillow(); ((FastBillow)module).Frequency = t_frequency; ((FastBillow)module).NoiseQuality = NoiseQuality.Standard; ((FastBillow)module).Seed = t_seed; ((FastBillow)module).OctaveCount = t_octaves; ((FastBillow)module).Lacunarity = t_lacunarity; ((FastBillow)module).Persistence = t_persistence; break; case NoiseTypes.FastNoise: module = new Engine.Effects.Noise.FastNoise(); ((FastNoise)module).Frequency = t_frequency; ((FastNoise)module).NoiseQuality = NoiseQuality.Standard; ((FastNoise)module).Seed = t_seed; ((FastNoise)module).OctaveCount = t_octaves; ((FastNoise)module).Lacunarity = t_lacunarity; ((FastNoise)module).Persistence = t_persistence; break; default: module = new Engine.Effects.Noise.Perlin(); ((Perlin)module).Frequency = t_frequency; ((Perlin)module).NoiseQuality = NoiseQuality.Standard; ((Perlin)module).Seed = t_seed; ((Perlin)module).OctaveCount = t_octaves; ((Perlin)module).Lacunarity = t_lacunarity; ((Perlin)module).Persistence = t_persistence; break; } t_imageProcessed = new Engine.Surface.Canvas(t_imageSource.Width, t_imageSource.Height); t_workflow.AllowInvalidate = true; Engine.Threading.ThreadedLoop loop = new Threading.ThreadedLoop(); Engine.Threading.ParamList paramList = new Threading.ParamList(); paramList.Add(paramName_module, typeof(Engine.Effects.Noise.IModule), module); loop.Loop(t_imageSource.Height, Threaded_Process, paramList); loop.Dispose(); base.PostProcess(); }