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);
        }
示例#2
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);
        }
示例#4
0
        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();
        }