Пример #1
0
        public CylinderPalletAnalysis CreateNewCylinderPalletAnalysisUI()
        {
            FormNewAnalysisCylinder form = new FormNewAnalysisCylinder(this);

            form.Cylinders   = Cylinders.ToArray();
            form.Pallets     = Pallets.ToArray();
            form.Interlayers = Interlayers.ToArray();

            if (DialogResult.OK == form.ShowDialog())
            {
                // build constraint set
                CylinderPalletConstraintSet constraintSet = new CylinderPalletConstraintSet();
                // interlayer period
                constraintSet.HasInterlayer         = form.HasInterlayer;
                constraintSet.InterlayerPeriod      = form.InterlayerPeriod;
                constraintSet.HasInterlayerAntiSlip = form.HasInterlayerAntiSlip;
                // stop criterion
                constraintSet.UseMaximumPalletHeight  = form.UseMaximumPalletHeight;
                constraintSet.MaximumPalletHeight     = form.MaximumPalletHeight;
                constraintSet.UseMaximumPalletWeight  = form.UseMaximumPalletWeight;
                constraintSet.MaximumPalletWeight     = form.MaximumPalletWeight;
                constraintSet.UseMaximumNumberOfItems = form.UseMaximumNumberOfItems;
                constraintSet.MaximumNumberOfItems    = form.MaximumNumberOfItems;

                return(CreateNewCylinderPalletAnalysis(form.AnalysisName, form.AnalysisDescription
                                                       , form.SelectedCylinder, form.SelectedPallet
                                                       , form.SelectedInterlayer, form.SelectedInterlayerAntiSlip
                                                       , constraintSet
                                                       , new CylinderSolver()));
            }
            return(null);
        }
Пример #2
0
        protected override ModuleBase CreateAndReadyModule()
        {
            Cylinders cylinders = new Cylinders();

            cylinders.Frequency = frequency;
            return(cylinders);
        }
Пример #3
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Label")] Cylinders cylinders)
        {
            if (id != cylinders.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(cylinders);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CylindersExists(cylinders.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index"));
            }
            return(View(cylinders));
        }
Пример #4
0
        public HCylinderPalletAnalysis CreateNewHCylinderPalletAnalysisUI()
        {
            FormNewAnalysisHCylinder form = new FormNewAnalysisHCylinder(this);

            form.Cylinders = Cylinders.ToArray();
            form.Pallets   = Pallets.ToArray();

            if (DialogResult.OK == form.ShowDialog())
            {
                // build constraint set
                HCylinderPalletConstraintSet constraintSet = new HCylinderPalletConstraintSet();
                // stop criterion
                constraintSet.MaximumPalletHeight     = form.MaximumPalletHeight;
                constraintSet.UseMaximumPalletHeight  = form.UseMaximumPalletHeight;
                constraintSet.MaximumPalletWeight     = form.MaximumPalletWeight;
                constraintSet.UseMaximumPalletWeight  = form.UseMaximumPalletWeight;
                constraintSet.MaximumNumberOfItems    = form.MaximumNumberOfItems;
                constraintSet.UseMaximumNumberOfItems = form.UseMaximumNumberOfItems;
                constraintSet.SetAllowedPatterns(form.AllowPatternDefault, form.AllowPatternStaggered, form.AllowPatternColumn);
                constraintSet.RowSpacing = form.RowSpacing;

                return(CreateNewHCylinderPalletAnalysis(
                           form.AnalysisName, form.AnalysisDescription,
                           form.SelectedCylinder, form.SelectedPallet,
                           constraintSet,
                           new HCylinderSolver()));
            }
            return(null);
        }
Пример #5
0
        public void EditHCylinderPalletAnalysis(HCylinderPalletAnalysis analysis)
        {
            bool recomputeRequired        = false;
            FormNewAnalysisHCylinder form = new FormNewAnalysisHCylinder(this, analysis);

            form.Cylinders = Cylinders.ToArray();
            form.Pallets   = Pallets.ToArray();

            if (recomputeRequired = (DialogResult.OK == form.ShowDialog()))
            {
                analysis.CylinderProperties = form.SelectedCylinder;
                analysis.PalletProperties   = form.SelectedPallet;
                // analysis name / description
                analysis.ID.SetNameDesc(form.AnalysisName, form.AnalysisDescription);
                // constraint set
                HCylinderPalletConstraintSet constraintSet = analysis.ConstraintSet;
                // overhang / underhang
                constraintSet.OverhangX = form.OverhangX;
                constraintSet.OverhangY = form.OverhangY;
                // stop criterions
                constraintSet.MaximumPalletHeight     = form.MaximumPalletHeight;
                constraintSet.UseMaximumPalletHeight  = form.UseMaximumPalletHeight;
                constraintSet.MaximumPalletWeight     = form.MaximumPalletWeight;
                constraintSet.UseMaximumPalletWeight  = form.UseMaximumPalletWeight;
                constraintSet.MaximumNumberOfItems    = form.MaximumNumberOfItems;
                constraintSet.UseMaximumNumberOfItems = form.UseMaximumNumberOfItems;
                // allowed patterns
                constraintSet.SetAllowedPatterns(form.AllowPatternDefault, form.AllowPatternStaggered, form.AllowPatternColumn);
                constraintSet.RowSpacing = form.RowSpacing;
            }
            if (recomputeRequired)
            {
                analysis.OnEndUpdate(null);
            }
        }
Пример #6
0
        public async Task <IActionResult> Create([Bind("Id,Label")] Cylinders cylinders)
        {
            if (ModelState.IsValid)
            {
                _context.Add(cylinders);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(cylinders));
        }
Пример #7
0
    private ModuleBase chooseModuleBase(NoiseType moduleType)
    {
        ModuleBase moduleBase;

        switch (moduleType)
        {
        case NoiseType.Billow:
            moduleBase = new Billow();
            break;

        case NoiseType.RiggedMultifractal:
            moduleBase = new RiggedMultifractal();
            break;

        case NoiseType.Voronoi:
            moduleBase = new Voronoi();
            break;

        case NoiseType.Checker:
            moduleBase = new Checker();
            break;

        case NoiseType.Cylinders:
            moduleBase = new Cylinders();
            break;

        case NoiseType.Spheres:
            moduleBase = new Spheres();
            break;

        case NoiseType.Mix:
            Perlin             perlin = new Perlin();
            RiggedMultifractal rigged = new RiggedMultifractal();
            moduleBase = new Add(perlin, rigged);
            break;


        case NoiseType.RiggedMChecker:
            Checker            checker = new Checker();
            RiggedMultifractal rigged2 = new RiggedMultifractal();
            moduleBase = new Add(checker, rigged2);
            break;

        default:
            moduleBase = new Perlin();
            break;
        }

        return(moduleBase);
    }
Пример #8
0
        public void EditCylinderPalletAnalysis(CylinderPalletAnalysis analysis)
        {
            bool recomputeRequired       = false;
            FormNewAnalysisCylinder form = new FormNewAnalysisCylinder(this, analysis);

            form.Cylinders   = Cylinders.ToArray();
            form.Pallets     = Pallets.ToArray();
            form.Interlayers = Interlayers.ToArray();

            if (recomputeRequired = (DialogResult.OK == form.ShowDialog()))
            {
                analysis.CylinderProperties           = form.SelectedCylinder;
                analysis.PalletProperties             = form.SelectedPallet;
                analysis.InterlayerProperties         = form.SelectedInterlayer;
                analysis.InterlayerPropertiesAntiSlip = form.SelectedInterlayerAntiSlip;
                // analysis name / description
                analysis.Name        = form.AnalysisName;
                analysis.Description = form.AnalysisDescription;
                // constraint set
                CylinderPalletConstraintSet constraintSet = analysis.ConstraintSet;
                // interlayers
                constraintSet.HasInterlayer         = form.HasInterlayer;
                constraintSet.InterlayerPeriod      = form.InterlayerPeriod;
                constraintSet.HasInterlayerAntiSlip = form.HasInterlayerAntiSlip;
                // overhang / underhang
                constraintSet.OverhangX = form.OverhangX;
                constraintSet.OverhangY = form.OverhangY;
                // stop criterions
                constraintSet.UseMaximumPalletHeight        = form.UseMaximumPalletHeight;
                constraintSet.MaximumPalletHeight           = form.MaximumPalletHeight;
                constraintSet.UseMaximumPalletWeight        = form.UseMaximumPalletWeight;
                constraintSet.MaximumPalletWeight           = form.MaximumPalletWeight;
                constraintSet.UseMaximumNumberOfItems       = form.UseMaximumNumberOfItems;
                constraintSet.MaximumNumberOfItems          = form.MaximumNumberOfItems;
                constraintSet.UseMaximumLoadOnLowerCylinder = form.UseMaximumLoadOnLowerCylinder;
                constraintSet.MaximumLoadOnLowerCylinder    = form.MaximumLoadOnLowerCylinder;
            }
            if (recomputeRequired)
            {
                analysis.OnEndUpdate(null);
            }
        }
Пример #9
0
        public IModule3D CreateModule(int globalSeed)
        {
            PrimitiveModule primitiveModule = null;

            switch (primative)
            {
            case NoisePrimitive.Constant:
                primitiveModule = new Constant(offset);
                break;

            case NoisePrimitive.Cylinders:
                primitiveModule = new Cylinders(offset);
                break;

            case NoisePrimitive.Spheres:
                primitiveModule = new Spheres(offset);
                break;

            case NoisePrimitive.BevinsGradient:
                primitiveModule = new BevinsGradient();
                break;

            case NoisePrimitive.BevinsValue:
                primitiveModule = new BevinsValue();
                break;

            case NoisePrimitive.ImprovedPerlin:
                primitiveModule = new ImprovedPerlin();
                break;

            case NoisePrimitive.SimplexPerlin:
                primitiveModule = new SimplexPerlin();
                break;
            }
            primitiveModule.Quality = quality;
            primitiveModule.Seed    = globalSeed + seed;
            return((IModule3D)primitiveModule);
        }
Пример #10
0
    ModuleBase CreateNoiseModule()
    {
        ModuleBase noiseModule = null;

        switch (_noiseType)
        {
        case NoiseType.Perlin:
            noiseModule = new Perlin(_frequency, _lancuraity, _persistence, _octaves, 2, QualityMode.Low);
            break;

        case NoiseType.Voronoi:
            noiseModule = new Voronoi(_frequency, _displacement, 0, false);
            break;

        case NoiseType.RidgedMultifractal:
            noiseModule = new RidgedMultifractal(_frequency, _lancuraity, _octaves, 0, QualityMode.Low);
            break;

        case NoiseType.Billow:
            noiseModule = new Billow(_frequency, _lancuraity, _persistence, _octaves, 0, QualityMode.Low);
            break;

        case NoiseType.Spheres:
            noiseModule = new Spheres(_frequency);
            break;

        case NoiseType.Checker:
            noiseModule = new Checker();
            break;

        case NoiseType.Cylinders:
            noiseModule = new Cylinders(_frequency);
            break;
        }
        return(noiseModule);
    }
Пример #11
0
        public static void CreateTestModuleTree(TestContext context)
        {
            var baseWood = new Cylinders
            {
                Frequency = 16,
            };

            var woodGrainNoise = new Perlin
            {
                Seed        = 2135,
                Frequency   = 48,
                Persistence = 0.5,
                Lacunarity  = 2.20703125,
                OctaveCount = 3,
                Quality     = NoiseQuality.Standard,
            };

            var scaledBaseWoodGrain = new ScalePoint
            {
                Source0 = woodGrainNoise,
                YScale  = 0.25,
            };

            var woodGrain = new ScaleBias
            {
                Source0 = scaledBaseWoodGrain,
                Scale   = 0.25,
                Bias    = 0.125,
            };

            var combinedWood = new Add
            {
                Source0 = baseWood,
                Source1 = woodGrain,
            };

            var perturbedWood = new Turbulence
            {
                Source0   = combinedWood,
                Seed      = 1,
                Frequency = 4,
                Power     = 1.0 / 256.0,
                Roughness = 4,
            };

            var translatedWood = new TranslatePoint
            {
                Source0      = perturbedWood,
                ZTranslation = 1.48,
            };

            var rotatedWood = new RotatePoint
            {
                Source0 = translatedWood,
            };

            rotatedWood.SetAngles(84, 0, 0);

            var finalWood = new Turbulence
            {
                Source0   = rotatedWood,
                Seed      = 2,
                Frequency = 2,
                Power     = 1.0 / 64.0,
                Roughness = 4,
            };

            testModule = finalWood;
        }
        private static List<LoadedModule> GetModules(XmlNodeList moduleList)
        {
            List<LoadedModule> loadedModules = new List<LoadedModule>();

            foreach (XmlNode node in moduleList)
            {
                string id = node.Attributes["guid"].Value;
                Point position = new Point(double.Parse(node.Attributes["position"].Value.Split(',')[0]), double.Parse(node.Attributes["position"].Value.Split(',')[1]));
                ModuleBase module = null;

                List<string> links = new List<string>();

                switch (node.Attributes["type"].Value)
                {
                    case "Billow":
                        Billow billow = new Billow();
                        billow.Frequency = double.Parse(node.SelectSingleNode("Frequency").InnerText);
                        billow.Lacunarity = double.Parse(node.SelectSingleNode("Lacunarity").InnerText);
                        billow.OctaveCount = int.Parse(node.SelectSingleNode("OctaveCount").InnerText);
                        billow.Persistence = double.Parse(node.SelectSingleNode("Persistence").InnerText);
                        billow.Quality = (QualityMode)Enum.Parse(typeof(QualityMode), node.SelectSingleNode("Quality").InnerText);
                        billow.Seed = int.Parse(node.SelectSingleNode("Seed").InnerText);
                        module = billow;
                        break;
                    case "Checker":
                        module = new Checker();
                        break;
                    case "Const":
                        Const con = new Const();
                        con.Value = double.Parse(node.SelectSingleNode("Value").InnerText);
                        module = con;
                        break;
                    case "Cylinders":
                        Cylinders cylinder = new Cylinders();
                        cylinder.Frequency = double.Parse(node.SelectSingleNode("Frequency").InnerText);
                        module = cylinder;
                        break;
                    case "Perlin":
                        Perlin perlin = new Perlin();
                        perlin.Frequency = double.Parse(node.SelectSingleNode("Frequency").InnerText);
                        perlin.Lacunarity = double.Parse(node.SelectSingleNode("Lacunarity").InnerText);
                        perlin.OctaveCount = int.Parse(node.SelectSingleNode("OctaveCount").InnerText);
                        perlin.Persistence = double.Parse(node.SelectSingleNode("Persistence").InnerText);
                        perlin.Quality = (QualityMode)Enum.Parse(typeof(QualityMode), node.SelectSingleNode("Quality").InnerText);
                        perlin.Seed = int.Parse(node.SelectSingleNode("Seed").InnerText);
                        module = perlin;
                        break;
                    case "RidgedMultifractal":
                        RidgedMultifractal ridgedMF = new RidgedMultifractal();
                        ridgedMF.Frequency = double.Parse(node.SelectSingleNode("Frequency").InnerText);
                        ridgedMF.Lacunarity = double.Parse(node.SelectSingleNode("Lacunarity").InnerText);
                        ridgedMF.OctaveCount = int.Parse(node.SelectSingleNode("OctaveCount").InnerText);
                        ridgedMF.Quality = (QualityMode)Enum.Parse(typeof(QualityMode), node.SelectSingleNode("Quality").InnerText);
                        ridgedMF.Seed = int.Parse(node.SelectSingleNode("Seed").InnerText);
                        module = ridgedMF;
                        break;
                    case "Spheres":
                        Spheres spheres = new Spheres();
                        spheres.Frequency = double.Parse(node.SelectSingleNode("Frequency").InnerText);
                        module = spheres;
                        break;
                    case "Voronoi":
                        Voronoi voronoi = new Voronoi();
                        voronoi.Frequency = double.Parse(node.SelectSingleNode("Frequency").InnerText);
                        voronoi.Displacement = double.Parse(node.SelectSingleNode("Displacement").InnerText);
                        voronoi.UseDistance = bool.Parse(node.SelectSingleNode("UseDistance").InnerText);
                        voronoi.Seed = int.Parse(node.SelectSingleNode("Seed").InnerText);
                        module = voronoi;
                        break;
                    case "Abs":
                        module = new Abs();
                        XmlNode absInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(absInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Add":
                        module = new Add();
                        XmlNode addInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(addInputs.SelectSingleNode("Left").InnerText);
                        links.Add(addInputs.SelectSingleNode("Right").InnerText);
                        break;
                    case "Blend":
                        module = new Blend();
                        XmlNode blendInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(blendInputs.SelectSingleNode("Left").InnerText);
                        links.Add(blendInputs.SelectSingleNode("Right").InnerText);
                        links.Add(blendInputs.SelectSingleNode("Operator").InnerText);
                        break;
                    case "Cache":
                        module = new Cache();
                        XmlNode cacheInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(cacheInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Clamp":
                        Clamp clamp = new Clamp();
                        clamp.Maximum = double.Parse(node.SelectSingleNode("Maximum").InnerText);
                        clamp.Minimum = double.Parse(node.SelectSingleNode("Minimum").InnerText);
                        module = clamp;

                        XmlNode clampInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(clampInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Curve":
                        Curve curve = new Curve();
                        module = curve;

                        foreach (XmlNode cpNode in node.SelectSingleNode("ControlPoints").ChildNodes)
                        {
                            double x = double.Parse(cpNode.InnerText.Split(',')[0]);
                            double y = double.Parse(cpNode.InnerText.Split(',')[1]);
                            curve.Add(x, y);
                        }

                        XmlNode curveInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(curveInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Displace":
                        module = new Displace();
                        XmlNode displaceInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(displaceInputs.SelectSingleNode("Primary").InnerText);
                        links.Add(displaceInputs.SelectSingleNode("X").InnerText);
                        links.Add(displaceInputs.SelectSingleNode("Y").InnerText);
                        links.Add(displaceInputs.SelectSingleNode("Z").InnerText);
                        break;
                    case "Exponent":
                        Exponent exponent = new Exponent();
                        exponent.Value = double.Parse(node.SelectSingleNode("Value").InnerText);
                        module = exponent;

                        XmlNode exponentInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(exponentInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Invert":
                        module = new Invert();
                        XmlNode invertInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(invertInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Max":
                        module = new Max();
                        XmlNode maxInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(maxInputs.SelectSingleNode("Left").InnerText);
                        links.Add(maxInputs.SelectSingleNode("Right").InnerText);
                        break;
                    case "Min":
                        module = new Min();
                        XmlNode minInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(minInputs.SelectSingleNode("Left").InnerText);
                        links.Add(minInputs.SelectSingleNode("Right").InnerText);
                        break;
                    case "Multiply":
                        module = new Multiply();
                        XmlNode multiplyInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(multiplyInputs.SelectSingleNode("Left").InnerText);
                        links.Add(multiplyInputs.SelectSingleNode("Right").InnerText);
                        break;
                    case "Power":
                        module = new Power();
                        XmlNode powerInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(powerInputs.SelectSingleNode("Left").InnerText);
                        links.Add(powerInputs.SelectSingleNode("Right").InnerText);
                        break;
                    case "Rotate":
                        Rotate rotate = new Rotate();
                        rotate.X = double.Parse(node.SelectSingleNode("X").InnerText);
                        rotate.Y = double.Parse(node.SelectSingleNode("Y").InnerText);
                        rotate.Z = double.Parse(node.SelectSingleNode("Z").InnerText);
                        module = rotate;

                        XmlNode rotateInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(rotateInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Scale":
                        Scale scale = new Scale();
                        scale.X = double.Parse(node.SelectSingleNode("X").InnerText);
                        scale.Y = double.Parse(node.SelectSingleNode("Y").InnerText);
                        scale.Z = double.Parse(node.SelectSingleNode("Z").InnerText);
                        module = scale;

                        XmlNode scaleInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(scaleInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "ScaleBias":
                        ScaleBias scaleBias = new ScaleBias();
                        scaleBias.Scale = double.Parse(node.SelectSingleNode("Scale").InnerText);
                        scaleBias.Bias = double.Parse(node.SelectSingleNode("Bias").InnerText);
                        module = scaleBias;

                        XmlNode scaleBiasInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(scaleBiasInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Select":
                        Select select = new Select();
                        select.Minimum = double.Parse(node.SelectSingleNode("Minimum").InnerText);
                        select.Maximum = double.Parse(node.SelectSingleNode("Maximum").InnerText);
                        select.FallOff = double.Parse(node.SelectSingleNode("FallOff").InnerText);
                        module = select;

                        XmlNode selectInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(selectInputs.SelectSingleNode("Primary").InnerText);
                        links.Add(selectInputs.SelectSingleNode("Secondary").InnerText);
                        links.Add(selectInputs.SelectSingleNode("Controller").InnerText);
                        break;
                    case "Subtract":
                        module = new Subtract();
                        XmlNode subtractInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(subtractInputs.SelectSingleNode("Left").InnerText);
                        links.Add(subtractInputs.SelectSingleNode("Right").InnerText);
                        break;
                    case "Terrace":
                        Terrace terrace = new Terrace();
                        module = terrace;

                        foreach (XmlNode cpNode in node.SelectSingleNode("ControlPoints").ChildNodes)
                        {
                            terrace.Add(double.Parse(cpNode.InnerText));
                        }

                        XmlNode terraceInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(terraceInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Translate":
                        Translate translate = new Translate();
                        translate.X = double.Parse(node.SelectSingleNode("X").InnerText);
                        translate.Y = double.Parse(node.SelectSingleNode("Y").InnerText);
                        translate.Z = double.Parse(node.SelectSingleNode("Z").InnerText);
                        module = translate;

                        XmlNode translateInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(translateInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Turbulence":
                        Turbulence turbulence = new Turbulence();
                        turbulence.Frequency = double.Parse(node.SelectSingleNode("Frequency").InnerText);
                        turbulence.Power = double.Parse(node.SelectSingleNode("Power").InnerText);
                        turbulence.Roughness = int.Parse(node.SelectSingleNode("Roughness").InnerText);
                        turbulence.Seed = int.Parse(node.SelectSingleNode("Seed").InnerText);
                        module = turbulence;

                        XmlNode turbulenceInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(turbulenceInputs.SelectSingleNode("Input").InnerText);
                        break;
                    case "Final":
                        module = new Final();
                        XmlNode finalInputs = node.SelectSingleNode("ModuleInputs");
                        links.Add(finalInputs.SelectSingleNode("Input").InnerText);
                        break;
                    default:
                        break;
                }

                LoadedModule lm = new LoadedModule(id, module, position, links);
                loadedModules.Add(lm);
            }

            return loadedModules;
        }
Пример #13
0
        /// <summary>
        /// Draw all entities stored in buffer
        /// </summary>
        public void Flush()
        {
            // initialize
            Vector3D vLight = CameraPosition - Target; vLight.Normalize();

            CurrentTransf = null;
            System.Drawing.Graphics g = Graphics;
            g.Clear(BackgroundColor);

            if (EnableFaceSorting)
            {
                // sort face list
                FaceComparison faceComparer = new FaceComparison(GetWorldToEyeTransformation());
                Faces.Sort(faceComparer);
            }
            // draw background segments
            foreach (Segment s in SegmentsBackground)
            {
                Draw(s);
            }
            // draw background faces
            foreach (Face face in _facesBackground)
            {
                Draw(face, FaceDir.FRONT);
            }
            // draw all faces using solid / transparency
            foreach (Face face in Faces)
            {
                Draw(face, FaceDir.BACK);
            }
            // draw triangles
            foreach (Triangle tr in Triangles)
            {
                Draw(tr, FaceDir.FRONT);
            }

            var boxesImage1 = new List <BoxGeneric>();

            foreach (var imageInst in ListImageInst)
            {
                var b = imageInst.ToBox();
                boxesImage1.Add(b);
            }
            // sort box list
            if (UseBoxelOrderer)
            {
                BoxelOrderer boxelOrderer = new BoxelOrderer(Boxes, ViewDirection);
                Boxes = boxelOrderer.GetSortedList();

                var boxelOrderer2 = new BoxelOrderer(boxesImage1, ViewDirection);
                boxesImage1 = boxelOrderer2.GetSortedList();
            }
            else
            {
                Boxes.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
            }

            // sort cylinder list
            Cylinders.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));

            if (Cylinders.Count > 0)
            {
                // sort by Z
                var drawableList = new List <Drawable>();
                drawableList.AddRange(Boxes);
                drawableList.AddRange(Cylinders);
                drawableList.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));

                var boxes         = new List <BoxGeneric>();
                var cylinders     = new List <Cyl>();
                var processingBox = drawableList[0] is Box;
                foreach (Drawable drawable in drawableList)
                {
                    if ((drawable is Box box) && processingBox)
                    {
                        boxes.Add(box);
                    }
                    else if (drawable is Cyl cyl && !processingBox)
                    {
                        cylinders.Add(cyl);
                    }
Пример #14
0
    void Generate()
    {
        // { Perlin, Billow, RidgedMultifractal, Voronoi, Checker, Const, Cylinders, Spheres };
        for (int n = 0; n <= 1; n++)
        {
            switch ((NoiseType)selectionGridInt[n])
            {
            case NoiseType.Perlin:
                moduleBases[n] = new Perlin(n_freq[n], n_lacun[n], n_persist[n], n_octaves[n], n, QualityMode.Medium);
                break;

            case NoiseType.Billow:
                moduleBases[n] = new Billow(n_freq[n], n_lacun[n], n_persist[n], n_octaves[n], n, QualityMode.Medium);
                break;

            case NoiseType.RidgedMultifractal:
                moduleBases[n] = new RidgedMultifractal(n_freq[n], n_lacun[n], n_octaves[n], n, QualityMode.Medium);
                break;

            case NoiseType.Voronoi:
                moduleBases[n] = new Voronoi(n_freq[n], n_displaces[n], n, n_distance[n]);
                break;

            case NoiseType.Checker:
                moduleBases[n] = new Checker();
                break;

            case NoiseType.Const:
                moduleBases[n] = new Const(n_freq[n]);
                break;

            case NoiseType.Cylinders:
                moduleBases[n] = new Cylinders(n_freq[n]);
                break;

            case NoiseType.Spheres:
                moduleBases[n] = new Spheres(n_freq[n]);
                break;
            }
        }
        ModuleBase moduleBase = new Const();

        // { "Add", "Blend", "Max", "Min", "Multiply", "Power", "Select", "Subtract", "Terrace"};
        switch (operatorGridInt)
        {
        case 0:
            moduleBase = new Add(moduleBases[0], moduleBases[1]);
            break;

        case 1:
            moduleBase = new Blend(moduleBases[0], moduleBases[1], new Perlin());
            break;

        case 2:
            moduleBase = new Max(moduleBases[0], moduleBases[1]);
            break;

        case 3:
            moduleBase = new Min(moduleBases[0], moduleBases[1]);
            break;

        case 4:
            moduleBase = new Multiply(moduleBases[0], moduleBases[1]);
            break;

        case 5:
            moduleBase = new Power(moduleBases[0], moduleBases[1]);
            break;

        case 6:
            moduleBase = new Subtract(moduleBases[0], moduleBases[1]);
            break;

        case 7:
            moduleBase = new Terrace(false, moduleBases[0]);
            break;

        case 8:
            moduleBase = moduleBases[0];
            break;
        }


        //case NoiseType.Mix:
        //	Perlin perlin = new Perlin(freq, lacun, persist, octvs, seed, QualityMode.High);
        //	RidgedMultifractal rigged = new RidgedMultifractal(freq, lacun, octvs, seed, QualityMode.High);
        //	Cylinders cyls = new Cylinders(freq);
        //	//moduleBase = new Add(perlin, rigged);
        //	moduleBase = new Blend(perlin, rigged, new Billow());
        //	break;

        // Initialize the noise map
        //moduleBase = new Scale(2, 2, 2, moduleBase);
        //moduleBase = new Translate(-1, -1, -1, moduleBase);
        this.m_noiseMap = new Noise2D(resolution, resolution, moduleBase);
        this.m_noiseMap.GeneratePlanar(
            offset + -1 * 1 / zoom,
            offset + offset + 1 * 1 / zoom,
            offset + -1 * 1 / zoom,
            offset + 1 * 1 / zoom);

        // Generate the textures
        this.m_textures[0]            = this.m_noiseMap.GetTexture(GradientPresets.Grayscale);
        this.m_textures[0].filterMode = FilterMode.Point;
        //this.m_textures[0] = this.m_noiseMap.GetTexture(LibNoise.Unity.Gradient.Terrain);

        this.m_textures[0].Apply();

        this.m_textures[1] = this.m_noiseMap.GetTexture(GradientPresets.Terrain);
        this.m_textures[1].Apply();

        this.m_textures[2] = this.m_noiseMap.GetNormalMap(3.0f);
        this.m_textures[2].Apply();

        //display on plane
        GetComponent <Renderer>().material.mainTexture = m_textures[0];


        //write images to disk
        //File.WriteAllBytes(Application.dataPath + "/../Gray.png", m_textures[0].EncodeToPNG());
        //File.WriteAllBytes(Application.dataPath + "/../Terrain.png", m_textures[1].EncodeToPNG());
        //File.WriteAllBytes(Application.dataPath + "/../Normal.png", m_textures[2].EncodeToPNG());
    }
Пример #15
0
 /// <summary>
 /// Calculates the hash code for this object.
 /// </summary>
 /// <returns>The hash code.</returns>
 public override int GetHashCode()
 {
     return(Cylinders.GetHashCode() ^ HeadsPerCylinder.GetHashCode()
            ^ SectorsPerTrack.GetHashCode() ^ BytesPerSector.GetHashCode());
 }
Пример #16
0
 public void AddCylinder(Cyl cylinder) => Cylinders.Add(cylinder);
Пример #17
0
        /// <summary>
        /// Draw all entities stored in buffer
        /// </summary>
        public void Flush()
        {
            // initialize
            Vector3D vLight = CameraPosition - Target; vLight.Normalize();

            CurrentTransf = null;
            System.Drawing.Graphics g = Graphics;
            g.Clear(BackgroundColor);

            if (EnableFaceSorting)
            {
                // sort face list
                FaceComparison faceComparer = new FaceComparison(GetWorldToEyeTransformation());
                Faces.Sort(faceComparer);
            }
            // draw background segments
            foreach (Segment s in SegmentsBackground)
            {
                Draw(s);
            }
            // draw background faces
            foreach (Face face in _facesBackground)
            {
                Draw(face, FaceDir.FRONT);
            }
            // draw all faces using solid / transparency
            foreach (Face face in Faces)
            {
                Draw(face, FaceDir.BACK);
            }
            // draw triangles
            foreach (Triangle tr in Triangles)
            {
                Draw(tr, FaceDir.FRONT);
            }

            List <Box> boxesImage1 = new List <Box>();

            foreach (ImageInst imageInst in ListImageInst)
            {
                Box b = imageInst.ToBox();
                boxesImage1.Add(b);
            }
            // sort box list
            if (UseBoxelOrderer)
            {
                BoxelOrderer boxelOrderer = new BoxelOrderer(Boxes, ViewDirection);
                Boxes = boxelOrderer.GetSortedList();

                BoxelOrderer boxelOrderer2 = new BoxelOrderer(boxesImage1, ViewDirection);
                boxesImage1 = boxelOrderer2.GetSortedList();
            }
            else
            {
                Boxes.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
            }

            // sort cylinder list
            Cylinders.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));

            if (Cylinders.Count > 0)
            {
                // sort by Z
                List <Drawable> drawableList = new List <Drawable>();
                drawableList.AddRange(Boxes);
                drawableList.AddRange(Cylinders);
                drawableList.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));

                List <Box> boxes         = new List <Box>();
                List <Cyl> cylinders     = new List <Cyl>();
                bool       processingBox = drawableList[0] is Box;
                foreach (Drawable drawable in drawableList)
                {
                    Box b = drawable as Box;
                    Cyl c = drawable as Cyl;

                    if ((null != b) && processingBox)
                    {
                        boxes.Add(b);
                    }
                    else if ((null == b) && !processingBox)
                    {
                        cylinders.Add(c);
                    }
                    else
                    {
                        if (boxes.Count > 0)
                        {
                            BoxelOrderer boxelOrderer = new BoxelOrderer(boxes, ViewDirection);
                            boxes = boxelOrderer.GetSortedList();
                            // draw boxes
                            foreach (Box bb in boxes)
                            {
                                bb.Draw(this);
                            }
                            // clear
                            boxes.Clear();
                        }
                        if (cylinders.Count > 0)
                        {
                            cylinders.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
                            // draw cylinders
                            foreach (Cyl cc in cylinders)
                            {
                                cc.Draw(this);
                            }
                            // clear
                            cylinders.Clear();
                        }
                        if (null != b)
                        {
                            boxes.Add(b);
                            processingBox = true;
                        }
                        else
                        {
                            cylinders.Add(c);
                            processingBox = false;
                        }
                    }
                }

                // remaining boxes
                BoxelOrderer boxelOrdererRem = new BoxelOrderer(boxes, ViewDirection);
                boxes = boxelOrdererRem.GetSortedList();
                // draw boxes
                foreach (Box bb in boxes)
                {
                    bb.Draw(this);
                }

                // remaining cylinders
                cylinders.Sort(new DrawableComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
                // draw cylinders
                foreach (var cc in cylinders)
                {
                    cc.Draw(this);
                }
                // clear
                boxes.Clear();
            }
            else
            {
                // draw all boxes
                foreach (Box box in Boxes)
                {
                    box.Draw(this);
                }
                // draw all triangles
                foreach (Triangle tr in Triangles)
                {
                    Draw(tr, FaceDir.FRONT);
                }
            }
            // images inst
            if (ListImageInst.Count > 0)
            {
                // --- sort image inst
                List <ImageInst> listImageInstSorted = new List <ImageInst>();
                foreach (Box b in boxesImage1)
                {
                    var imageInst = ListImageInst.Find(i => i.PickId == b.PickId);
                    listImageInstSorted.Add(new ImageInst(b.PickId, imageInst.Content, b.Dim, b.BPosition));
                }

                // draw image inst
                foreach (ImageInst im in listImageInstSorted)
                {
                    Draw(im);
                }
                ListImageInst.Clear();
            }
            // draw faces : end
            foreach (Face face in Faces)
            {
                Draw(face, FaceDir.FRONT);
            }

            // draw segment list (e.g. hatching)
            foreach (Segment seg in Segments)
            {
                Draw(seg);
            }

            // draw cotation cubes
            if (ShowDimensions)
            {
                foreach (DimensionCube qc in Dimensions)
                {
                    qc.Draw(this);
                }
            }
        }
Пример #18
0
        /// <summary>
        ///
        /// </summary>
        protected void GenerateNoise()
        {
            EnabledInterface(false);

            // Parse input ------------------------------------------------------------------------------------
            int    seed        = ParseInt(_tbxSeed.Text, PrimitiveModule.DefaultSeed);
            double frequency   = ParseDouble(_tbxFrequency.Text, FilterModule.DEFAULT_FREQUENCY);
            double lacunarity  = ParseDouble(_tbxLacunarity.Text, FilterModule.DEFAULT_LACUNARITY);
            double gain        = ParseDouble(_tbxGain.Text, FilterModule.DEFAULT_GAIN);
            double offset      = ParseDouble(_tbxOffset.Text, FilterModule.DEFAULT_OFFSET);
            double exponent    = ParseDouble(_tbxExponent.Text, FilterModule.DEFAULT_SPECTRAL_EXPONENT);
            var    octaveCount = (int)_nstpOctave.Value;
            bool   seamless    = _chkbx.Checked;

            GradientColor gradient  = GradientColors.Grayscale;
            NoiseQuality  quality   = PrimitiveModule.DefaultQuality;
            var           primitive = NoisePrimitive.ImprovedPerlin;
            var           filter    = NoiseFilter.SumFractal;

            try
            {
                quality = (NoiseQuality)Enum.Parse(typeof(NoiseQuality), _cbxQuality.Text);
            }
            catch
            {
                MessageBox.Show(
                    String.Format("Unknown quality '{0}'", _cbxQuality.Text),
                    "Libnoise Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error
                    );

                EnabledInterface(true);

                return;
            }

            try
            {
                primitive = (NoisePrimitive)Enum.Parse(typeof(NoisePrimitive), _cbxPrimitive.Text);
            }
            catch
            {
                MessageBox.Show(
                    String.Format("Unknown primitive '{0}'", _cbxPrimitive.Text),
                    "Libnoise Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error
                    );

                EnabledInterface(true);

                return;
            }

            try
            {
                filter = (NoiseFilter)Enum.Parse(typeof(NoiseFilter), _cbxFilter.Text);
            }
            catch
            {
                MessageBox.Show(
                    String.Format("Unknown filter '{0}'", _cbxFilter.Text),
                    "Libnoise Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error
                    );

                EnabledInterface(true);

                return;
            }

            switch (_cbxGradient.Text)
            {
            case "Grayscale":
                gradient = GradientColors.Grayscale;
                break;

            case "Terrain":
                gradient = GradientColors.Terrain;
                break;
            }

            // Create module tree ------------------------------------------------------------------------------------

            PrimitiveModule pModule = null;

            switch (primitive)
            {
            case NoisePrimitive.Constant:
                pModule = new Constant(offset);
                break;

            case NoisePrimitive.Cylinders:
                pModule  = new Cylinders(offset);
                seamless = false;
                break;

            case NoisePrimitive.Spheres:
                pModule  = new Spheres(offset);
                seamless = false;
                break;

            case NoisePrimitive.BevinsGradient:
                pModule = new BevinsGradient();
                break;

            case NoisePrimitive.BevinsValue:
                pModule = new BevinsValue();
                break;

            case NoisePrimitive.ImprovedPerlin:
                pModule = new ImprovedPerlin();
                break;

            case NoisePrimitive.SimplexPerlin:
                pModule = new SimplexPerlin();
                break;
            }

            pModule.Quality = quality;
            pModule.Seed    = seed;

            FilterModule fModule = null;
            ScaleBias    scale   = null;

            switch (filter)
            {
            case NoiseFilter.Pipe:
                fModule = new Pipe();
                break;

            case NoiseFilter.SumFractal:
                fModule = new SumFractal();
                break;

            case NoiseFilter.SinFractal:
                fModule = new SinFractal();
                break;

            case NoiseFilter.MultiFractal:
                fModule = new MultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(fModule, 1, -0.8);
                break;

            case NoiseFilter.Billow:
                fModule = new Billow();
                ((Billow)fModule).Bias  = -0.2;
                ((Billow)fModule).Scale = 2;
                break;

            case NoiseFilter.HeterogeneousMultiFractal:
                fModule = new HeterogeneousMultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(fModule, -1, 2);
                break;

            case NoiseFilter.HybridMultiFractal:
                fModule = new HybridMultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(fModule, 0.7, -2);
                break;

            case NoiseFilter.RidgedMultiFractal:
                fModule = new RidgedMultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(fModule, 0.9, -1.25);
                break;

            case NoiseFilter.Voronoi:
                fModule = new Voronoi();
                break;
            }

            fModule.Frequency   = frequency;
            fModule.Lacunarity  = lacunarity;
            fModule.OctaveCount = octaveCount;
            fModule.Offset      = offset;
            fModule.Offset      = offset;
            fModule.Gain        = gain;
            fModule.Primitive3D = (IModule3D)pModule;

            IModule3D finalModule;

            if (scale == null)
            {
                finalModule = (IModule3D)fModule;
            }
            else
            {
                finalModule = scale;
            }

            NoiseMapBuilder projection;

            switch (_cbxProjection.Text)
            {
            case "Spherical":
                projection = new NoiseMapBuilderSphere();
                ((NoiseMapBuilderSphere)projection).SetBounds(-90, 90, -180, 180);      // degrees
                break;

            case "Cylindrical":
                projection = new NoiseMapBuilderCylinder();
                ((NoiseMapBuilderCylinder)projection).SetBounds(-180, 180, -10, 10);
                break;

            case "Planar":
            default:
                double bound = 2;
                projection = new NoiseMapBuilderPlane(bound, bound * 2, bound, bound * 2, seamless);
                //projection = new NoiseMapBuilderPlane(-bound, bound, -bound, bound, seamless);
                //projection = new NoiseMapBuilderPlane(0, bound, 0, bound, seamless);
                break;
            }

            int width  = 0;
            int height = 0;

            switch (_cbxSize.Text)
            {
            case "256 x 256":
                width  = 256;
                height = 256;
                break;

            case "512 x 512":
                width  = 512;
                height = 512;
                break;

            case "1024 x 1024":
                width  = 1024;
                height = 1024;
                break;

            case "256 x 128":
                width  = 256;
                height = 128;
                break;

            case "512 x 256":
                width  = 512;
                height = 256;
                break;

            case "1024 x 512":
                width  = 1024;
                height = 512;
                break;

            case "2048 x 1024":
                width  = 2048;
                height = 1024;
                break;

            default:

            case "128 x 128":
                width  = 128;
                height = 128;
                break;
            }

            // ------------------------------------------------------------------------------------------------
            // 0 - Initializing
            _prbarRenderProgression.Visible = true;
            _lblProgressPercent.Visible     = true;
            _prbarRenderProgression.Value   = 0;
            ;
            _lblProgressPercent.Text = "";

            _lblLog.Text = String.Format("Create a {0} image with a {1} projection\n", _cbxSize.Text,
                                         _cbxProjection.Text);

            var      watchDog = new Stopwatch();
            TimeSpan ts;
            double   elaspedTime = 0;

            //
            // ------------------------------------------------------------------------------------------------
            // 1 - Build the noise map
            watchDog.Reset();

            _prbarRenderProgression.Value = 0;
            _lblLog.Text += "Building noise map ... ";

            var noiseMap = new NoiseMap();

            /*
             *          // ShapeFilter test
             *          Bitmap bmpShape = new Bitmap("smileyShape.bmp");
             *          BitmapAdaptater bmShapeAdaptater = new BitmapAdaptater(bmpShape);
             *
             *          ShapeFilter shapeFilter = new ShapeFilter();
             *          shapeFilter.Shape = bmShapeAdaptater;
             *
             *          projection.Filter = shapeFilter;
             */

            projection.SetSize(width, height);
            projection.SourceModule = finalModule;
            projection.NoiseMap     = noiseMap;
            projection.CallBack     = delegate(int line)
            {
                line++;

                watchDog.Stop();

                //Process message
                Application.DoEvents();

                _prbarRenderProgression.Value = (line * 100 / height);
                _lblProgressPercent.Text      = String.Format("{0} % - {1} line(s)", _prbarRenderProgression.Value, line);

                watchDog.Start();
            };

            watchDog.Start();
            projection.Build();
            watchDog.Stop();

            ts           = watchDog.Elapsed;
            elaspedTime += ts.TotalMilliseconds;

            _lblLog.Text += String.Format("{0:00}:{1:00} {2:00},{3:0000}\n",
                                          ts.Hours, ts.Minutes,
                                          ts.Seconds, ts.Milliseconds * 10
                                          );

            // ------------------------------------------------------------------------------------------------
            // 2 - Render image
            // Create a renderer, BitmapAdaptater create a System.Drawing.Bitmap on the fly
            watchDog.Reset();
            _prbarRenderProgression.Value = 0;
            _lblLog.Text += "Rendering image ... ";

            var renderer = new ImageRenderer();

            renderer.NoiseMap        = noiseMap;
            renderer.Gradient        = gradient;
            renderer.LightBrightness = 2;
            renderer.LightContrast   = 8;
            //renderer.LightEnabled = true;

            // Libnoise image struct strategy
            //Graphics.Tools.Noise.Renderer.Image image = new Graphics.Tools.Noise.Renderer.Image();
            //renderer.Image = image;

            // Dotnet Bitmap Strategy
            var bmpAdaptater = new BitmapAdaptater(width, height);

            renderer.Image = bmpAdaptater;

            renderer.CallBack = delegate(int line)
            {
                line++;

                watchDog.Stop();

                //Process message
                Application.DoEvents();

                _prbarRenderProgression.Value = (line * 100 / height);
                _lblProgressPercent.Text      = String.Format("{0} % - {1} line(s)", _prbarRenderProgression.Value, line);

                watchDog.Start();
            };

            // Render the texture.
            watchDog.Start();
            renderer.Render();
            watchDog.Stop();

            ts           = watchDog.Elapsed;
            elaspedTime += ts.TotalMilliseconds;

            _lblLog.Text += String.Format("{0:00}:{1:00} {2:00},{3:0000}\n",
                                          ts.Hours, ts.Minutes,
                                          ts.Seconds, ts.Milliseconds * 10
                                          );

            //----------------------------------------
            // Normalmap rendering test
            //

            /*
             *          BitmapAdaptater nmapAdaptater = new BitmapAdaptater(width, height);
             *          NormalMapRenderer nmap = new NormalMapRenderer();
             *          nmap.Image = nmapAdaptater;
             *          nmap.BumpHeight = 30.0;
             *          nmap.NoiseMap = noiseMap;
             *          nmap.Render();
             *          nmapAdaptater.Bitmap.Save("normalMap.png", ImageFormat.Png);
             */
            //----------------------------------------

            /*
             *          Heightmap8 heightmap8 = new Heightmap8();
             *          Heightmap8Renderer heightmapRenderer = new Heightmap8Renderer();
             *          heightmapRenderer.Heightmap = heightmap8;
             */

            /*
             *          Heightmap16 heightmap16 = new Heightmap16();
             *          Heightmap16Renderer heightmapRenderer = new Heightmap16Renderer();
             *          heightmapRenderer.Heightmap = heightmap16;
             */

            /*
             *          Heightmap32 heightmap32 = new Heightmap32();
             *          Heightmap32Renderer heightmapRenderer = new Heightmap32Renderer();
             *          heightmapRenderer.Heightmap = heightmap32;
             */

            /*
             *          heightmapRenderer.NoiseMap = noiseMap;
             *          heightmapRenderer.ExactFit();
             *          heightmapRenderer.Render();
             */

            /*
             *          Heightmap16RawWriter rawWriter = new Heightmap16RawWriter();
             *          rawWriter.Heightmap = heightmap16;
             *          rawWriter.Filename = "heightmap16.raw";
             *          rawWriter.WriteFile();
             */

            // ------------------------------------------------------------------------------------------------
            // 3 - Painting

            // Save the file
            //bmpAdaptater.Bitmap.Save("rendered.png",ImageFormat.Png);
            _imageRendered.Width  = width;
            _imageRendered.Height = height;

            //_imageRendered.Image = _bitmap;
            _imageRendered.Image = bmpAdaptater.Bitmap;

            if (_imageRendered.Width > _panImageViewport.Width)
            {
                _imageRendered.Left = 0;
            }
            else
            {
                _imageRendered.Left = (_panImageViewport.Width - _imageRendered.Width) / 2;
            }

            if (_imageRendered.Height > _panImageViewport.Height)
            {
                _imageRendered.Top = 0;
            }
            else
            {
                _imageRendered.Top = (_panImageViewport.Height - _imageRendered.Height) / 2;
            }

            if (_imageRendered.Width > _panImageViewport.Width || _imageRendered.Height > _panImageViewport.Height)
            {
                _imageRendered.Anchor        = (AnchorStyles.Left | AnchorStyles.Top);
                _panImageViewport.AutoScroll = true;
            }
            else
            {
                _panImageViewport.AutoScroll = false;
            }

            // ----------------------------------------------------------------

            ts = TimeSpan.FromMilliseconds(elaspedTime);

            // Format and display the TimeSpan value.
            _lblLog.Text += String.Format("Duration : {0:00}:{1:00} {2:00},{3:0000}\n",
                                          ts.Hours, ts.Minutes,
                                          ts.Seconds, ts.Milliseconds * 10
                                          );

            EnabledInterface(true);

            _prbarRenderProgression.Value   = 0;
            _lblProgressPercent.Text        = "";
            _prbarRenderProgression.Visible = false;
            _lblProgressPercent.Visible     = false;
        }
Пример #19
0
        public static float GetBurstValue(ModuleType type, float x, float y, float z, NativeArray <ModuleData> data, int dataIndex)
        {
            switch (type)
            {
            case ModuleType.Billow:
                return(Billow.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Checker:
                return(Checker.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Const:
                return(Const.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Cylinders:
                return(Cylinders.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Perlin:
                return(Perlin.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.RidgedMultifractal:
                return(RidgedMultifractal.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Spheres:
                return(Spheres.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Voronoi:
                return(Voronoi.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Abs:
                return(Abs.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Add:
                return(Add.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Blend:
                return(Blend.GetBurstValue(x, y, z, data, dataIndex));

            // case ModuleType.Cache:
            //     return Cache.GetBurstValue(x, y, z, data, dataIndex);
            case ModuleType.Clamp:
                return(Clamp.GetBurstValue(x, y, z, data, dataIndex));

            // case ModuleType.Curve:
            //     return Curve.GetBurstValue(x, y, z, data, dataIndex);
            case ModuleType.Displace:
                return(Displace.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Exponent:
                return(Exponent.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Invert:
                return(Invert.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Max:
                return(Max.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Min:
                return(Min.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Multiply:
                return(Multiply.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Power:
                return(Power.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Rotate:
                return(Rotate.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Scale:
                return(Scale.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.ScaleBias:
                return(ScaleBias.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Select:
                return(Select.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Subtract:
                return(Subtract.GetBurstValue(x, y, z, data, dataIndex));

            // case ModuleType.Terrace:
            //     return Terrace.GetBurstValue(x, y, z, data, dataIndex);
            case ModuleType.Translate:
                return(Translate.GetBurstValue(x, y, z, data, dataIndex));

            case ModuleType.Turbulence:
                return(Turbulence.GetBurstValue(x, y, z, data, dataIndex));

            default:
                // Debug.LogError("Not a valid module type");
                return(0);
            }
        }
Пример #20
0
 public void AddCylinder(Cylinder cylinder)
 {
     Cylinders.Add(cylinder);
 }
Пример #21
0
        public NoiseMap Render()
        {
            PrimitiveModule primitive = null;

            switch (this.Primitive)
            {
            case NoisePrimitive.Constant:
                primitive = new Constant(this.Offset);
                break;

            case NoisePrimitive.Cylinders:
                primitive     = new Cylinders(this.Offset);
                this.Seamless = false;
                break;

            case NoisePrimitive.Spheres:
                primitive     = new Spheres(this.Offset);
                this.Seamless = false;
                break;

            case NoisePrimitive.BevinsGradient: primitive = new BevinsGradient(); break;

            case NoisePrimitive.BevinsValue: primitive = new BevinsValue(); break;

            case NoisePrimitive.ImprovedPerlin: primitive = new ImprovedPerlin(); break;

            case NoisePrimitive.SimplexPerlin: primitive = new SimplexPerlin(); break;
            }

            primitive.Seed    = this.Seed;
            primitive.Quality = this.NoiseQuality;

            FilterModule filter = null;
            ScaleBias    scale  = null;

            switch (this.Filter)
            {
            case NoiseFilter.Pipe: filter = new Pipe(); break;

            case NoiseFilter.SumFractal: filter = new SumFractal(); break;

            case NoiseFilter.SinFractal: filter = new SinFractal(); break;

            case NoiseFilter.MultiFractal:
                filter = new MultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(filter, 1f, -0.8f);
                break;

            case NoiseFilter.Billow:
                filter = new Billow();
                ((Billow)filter).Bias  = -0.2f;
                ((Billow)filter).Scale = 2f;
                break;

            case NoiseFilter.HeterogeneousMultiFractal:
                filter = new HeterogeneousMultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(filter, -1f, 2f);
                break;

            case NoiseFilter.HybridMultiFractal:
                filter = new HybridMultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(filter, 0.7f, -2f);
                break;

            case NoiseFilter.RidgedMultiFractal:
                filter = new RidgedMultiFractal();
                // Used to show the difference with our gradient color (-1 + 1)
                scale = new ScaleBias(filter, 0.9f, -1.25f);
                break;

            case NoiseFilter.Voronoi: filter = new Voronoi(); break;
            }

            filter.Frequency   = this.Frequency;
            filter.Lacunarity  = this.Lacunarity;
            filter.OctaveCount = this.OctaveCount;
            filter.Offset      = this.Offset;
            filter.Gain        = this.Gain;
            filter.Primitive3D = (IModule3D)primitive;

            IModule3D final = scale ?? (IModule3D)filter;

            NoiseMapBuilder projection;

            switch (this.Projection)
            {
            case NoiseMapProjection.Spherical:
                projection = new NoiseMapBuilderSphere();
                ((NoiseMapBuilderSphere)projection).SetBounds(-90f, 90f, -180f, 180f);     // degrees
                break;

            case NoiseMapProjection.Cylindrical:
                projection = new NoiseMapBuilderCylinder();
                ((NoiseMapBuilderCylinder)projection).SetBounds(-180f, 180f, -10f, 10f);
                break;

            case NoiseMapProjection.Planar:
            default:
                float bound = 2f;
                projection = new NoiseMapBuilderPlane(bound, bound * 2, bound, bound * 2, this.Seamless);
                break;
            }

            NoiseMap noise = new NoiseMap();

            projection.SetSize(this.Width, this.Height);
            projection.SourceModule = final;
            projection.NoiseMap     = noise;
            projection.Build();

            float min, max;

            noise.MinMax(out min, out max);

            this.Map = noise;
            return(noise);
        }
Пример #22
0
        /// <summary>
        /// Draw all entities stored in buffer
        /// </summary>
        public void Flush()
        {
            // initialize
            Vector3D vLight = CameraPosition - Target; vLight.Normalize();

            _boxDrawingCounter = 0;
            CurrentTransf      = null;
            System.Drawing.Graphics g = Graphics;
            g.Clear(BackgroundColor);

            if (EnableFaceSorting)
            {
                // sort face list
                FaceComparison faceComparer = new FaceComparison(GetWorldToEyeTransformation());
                Faces.Sort(faceComparer);
            }
            // draw background segments
            foreach (Segment s in SegmentsBackground)
            {
                Draw(s);
            }
            // draw background faces
            foreach (Face face in _facesBackground)
            {
                Draw(face, FaceDir.FRONT);
            }
            // draw all faces using solid / transparency
            foreach (Face face in Faces)
            {
                Draw(face, FaceDir.BACK);
            }
            // draw triangles
            foreach (Triangle tr in Triangles)
            {
                Draw(tr, FaceDir.FRONT);
            }

            // sort box list
            if (UseBoxelOrderer)
            {
                BoxelOrderer boxelOrderer = new BoxelOrderer(Boxes)
                {
                    Direction = Target - CameraPosition
                };
                Boxes = boxelOrderer.GetSortedList();
            }
            else
            {
                Boxes.Sort(new BoxComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
            }

            // sort cylinder list
            Cylinders.Sort(new CylinderComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));

            if (Cylinders.Count > 0)
            {
                // sort by Z
                List <Drawable> drawableList = new List <Drawable>();
                drawableList.AddRange(Boxes);
                drawableList.AddRange(Cylinders);
                drawableList.Sort(new DrawableComparerSimplifiedPainterAlgo());

                List <Box>      boxes         = new List <Box>();
                List <Cylinder> cylinders     = new List <Cylinder>();
                bool            processingBox = drawableList[0] is Box;
                foreach (Drawable drawable in drawableList)
                {
                    Box      b = drawable as Box;
                    Cylinder c = drawable as Cylinder;

                    if ((null != b) && processingBox)
                    {
                        boxes.Add(b);
                    }
                    else if ((null == b) && !processingBox)
                    {
                        cylinders.Add(c);
                    }
                    else
                    {
                        if (boxes.Count > 0)
                        {
                            BoxelOrderer boxelOrderer = new BoxelOrderer(boxes)
                            {
                                Direction = Target - CameraPosition
                            };
                            boxes = boxelOrderer.GetSortedList();
                            // draw boxes
                            foreach (Box bb in boxes)
                            {
                                Draw(bb);
                            }
                            // clear
                            boxes.Clear();
                        }
                        if (cylinders.Count > 0)
                        {
                            cylinders.Sort(new CylinderComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
                            // draw cylinders
                            foreach (Cylinder cc in cylinders)
                            {
                                Draw(cc);
                            }
                            // clear
                            cylinders.Clear();
                        }
                        if (null != b)
                        {
                            boxes.Add(b);
                            processingBox = true;
                        }
                        else
                        {
                            cylinders.Add(c);
                            processingBox = false;
                        }
                    }
                }

                // remaining boxes
                BoxelOrderer boxelOrdererRem = new BoxelOrderer(boxes)
                {
                    Direction = Target - CameraPosition
                };
                boxes = boxelOrdererRem.GetSortedList();
                // draw boxes
                foreach (Box bb in boxes)
                {
                    Draw(bb);
                }

                // remaining cylinders
                cylinders.Sort(new CylinderComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
                // draw cylinders
                foreach (Cylinder cc in cylinders)
                {
                    Draw(cc);
                }
                // clear
                boxes.Clear();
            }
            else
            {
                // draw all boxes
                foreach (Box box in Boxes)
                {
                    Draw(box);
                }
                // draw all triangles
                foreach (Triangle tr in Triangles)
                {
                    Draw(tr, FaceDir.FRONT);
                }
            }
            // images inst
            if (_listImageInst.Count > 0)
            {
                // --- sort image inst
                AnalysisHomo analysis   = _listImageInst[0].Analysis;
                BBox3D       bbox       = analysis.Solution.BBoxGlobal;
                List <Box>   boxesImage = new List <Box>();
                foreach (ImageInst imageInst in _listImageInst)
                {
                    boxesImage.Add(imageInst.ToBox());
                }

                if (UseBoxelOrderer && false) // NOT WORKING ?
                {
                    BoxelOrderer boxelOrderer = new BoxelOrderer(boxesImage)
                    {
                        TuneParam = 10.0,
                        Direction = Target - CameraPosition
                    };
                    boxesImage = boxelOrderer.GetSortedList();
                }
                else
                {
                    boxesImage.Sort(new BoxComparerSimplifiedPainterAlgo(GetWorldToEyeTransformation()));
                }
                // ---

                List <ImageInst> listImageInstSorted = new List <ImageInst>();
                foreach (Box b in boxesImage)
                {
                    listImageInstSorted.Add(new ImageInst(analysis, new Vector3D(b.Length, b.Width, b.Height), b.BPosition));
                }

                // draw image inst
                foreach (ImageInst im in listImageInstSorted)
                {
                    Draw(im);
                }
            }
            // draw faces : end
            foreach (Face face in Faces)
            {
                Draw(face, FaceDir.FRONT);
            }

            // draw segment list (e.g. hatching)
            foreach (Segment seg in Segments)
            {
                Draw(seg);
            }

            // draw cotation cubes
            if (ShowDimensions)
            {
                foreach (DimensionCube qc in _dimensions)
                {
                    qc.Draw(this);
                }
            }
        }
Пример #23
0
        public unsafe static void Generate(Level lvl, string type, int seed, bool useSeed)
        {
            int index = 0, width = lvl.Width, height = lvl.Height, length = lvl.Length;

            byte[]          blocks = lvl.blocks;
            int             half = height / 2;
            RealisticMapGen generator = new RealisticMapGen();
            IModule         module2D = null, module3D = null;

            switch (type)
            {
            case "flat":
                int grassHeight = height / 2;
                if (useSeed && seed >= 0 && seed < height)
                {
                    lvl.EdgeLevel = (short)seed;
                    grassHeight   = seed;
                }

                fixed(byte *ptr = blocks)
                {
                    if (grassHeight > 0)
                    {
                        MapSet(lvl.Width, lvl.Length, ptr, 0, grassHeight - 1, Block.dirt);
                    }
                    if (grassHeight < lvl.Height)
                    {
                        MapSet(lvl.Width, lvl.Length, ptr, grassHeight, grassHeight, Block.grass);
                    }
                }

                return;

            case "pixel":
                for (int y = 0; y < height; ++y)
                {
                    for (int z = 0; z < length; ++z)
                    {
                        for (int x = 0; x < width; ++x)
                        {
                            if (y == 0)
                            {
                                blocks[index] = Block.blackrock;
                            }
                            else if (x == 0 || x == width - 1 || z == 0 || z == length - 1)
                            {
                                blocks[index] = Block.white;
                            }
                            index++;
                        }
                    }
                }
                return;

            case "empty":
                for (int z = 0; z < length; ++z)
                {
                    for (int x = 0; x < width; ++x)
                    {
                        blocks[index++] = Block.blackrock;
                    }
                }
                return;

            case "space":
                Random random = useSeed ? new Random(seed) : new Random();
                for (int y = 0; y < height; ++y)
                {
                    for (int z = 0; z < length; ++z)
                    {
                        for (int x = 0; x < width; ++x)
                        {
                            if (y == 0)
                            {
                                blocks[index] = Block.blackrock;
                            }
                            else if (x == 0 || x == width - 1 || z == 0 || z == length - 1 || y == 1 || y == height - 1)
                            {
                                blocks[index] = random.Next(100) == 0 ? Block.iron : Block.obsidian;
                            }
                            index++;
                        }
                    }
                }
                break;

            case "rainbow":
                Random random2 = useSeed ? new Random(seed) : new Random();
                for (int y = 0; y < height; ++y)
                {
                    for (int z = 0; z < length; ++z)
                    {
                        for (int x = 0; x < width; ++x)
                        {
                            if (y == 0 || y == height - 1 || x == 0 || x == width - 1 || z == 0 || z == length - 1)
                            {
                                blocks[index] = (byte)random2.Next(Block.red, Block.white);
                            }
                            index++;
                        }
                    }
                }
                return;

            case "hell":
                Random random3 = useSeed ? new Random(seed) : new Random();
                for (int y = 0; y < height; ++y)
                {
                    for (int z = 0; z < length; ++z)
                    {
                        for (int x = 0; x < width; ++x)
                        {
                            if (y == 0)
                            {
                                blocks[index] = Block.blackrock;
                            }
                            else if (x == 0 || x == width - 1 || z == 0 || z == length - 1 || y == 0 || y == height - 1)
                            {
                                blocks[index] = Block.obsidian;
                            }
                            else if (x == 1 || x == width - 2 || z == 1 || z == length - 2)
                            {
                                if (random3.Next(1000) != 7)
                                {
                                    index++; continue;
                                }
                                int colIndex = z * width + x;
                                for (int i = 1; i < (height - y); ++i)
                                {
                                    int yy = height - i;
                                    blocks[colIndex + yy * width * length] = Block.lava;
                                }
                            }
                            index++;
                        }
                    }
                }
                generator.GenerateMap(lvl, type, seed, useSeed); return;

            case "billow":
                module2D = new Billow();
                ((Billow)module2D).Seed = useSeed ? seed : new Random().Next(); break;

            case "ridgedmultifractal":
                module2D = new RidgedMultifractal();
                ((RidgedMultifractal)module2D).Seed = useSeed ? seed : new Random().Next(); break;

            case "perlin":
                module2D = new Perlin();
                ((Perlin)module2D).Seed = useSeed ? seed : new Random().Next(); break;

            case "checkerboard":
                module2D = new Checkerboard(); break;

            case "spheres":
                module2D = new Spheres(); break;

            case "cylinders":
                module2D = new Cylinders(); break;

            case "voronoi":
                module2D = new Voronoi();
                ((Voronoi)module2D).Seed = useSeed ? seed : new Random().Next(); break;

            case "perlin3d":
                module3D = new Perlin();
                ((Perlin)module3D).Seed = useSeed ? seed : new Random().Next(); break;

            case "perlin3dyadjust":
                Perlin adjNoise = new Perlin();
                adjNoise.Seed = useSeed ? seed : new Random().Next();
                for (int y = 0; y < height; y++)
                {
                    for (int z = 0; z < length; ++z)
                    {
                        for (int x = 0; x < width; ++x)
                        {
                            double value = System.Math.Floor((adjNoise.GetValue(x / 100.0, y / 100.0, z / 100.0) + 2) * 10);
                            if (value > 30 * y / height)
                            {
                                lvl.SetTile((ushort)x, (ushort)y, (ushort)z, Block.grass);
                            }
                        }
                    }
                }
                break;

            case "billow3d":
                module3D = new Billow();
                ((Billow)module3D).Seed = useSeed ? seed : new Random().Next(); break;

            case "island":
            case "mountains":
            case "ocean":
            case "forest":
            case "desert":
                generator.GenerateMap(lvl, type, seed, useSeed); return;
            }

            if (module2D != null)
            {
                int waterlvl = half - 1;
                for (int z = 0; z < length; ++z)
                {
                    for (int x = 0; x < width; ++x)
                    {
                        double noise         = module2D.GetValue(x / 100.0, 0.1, z / 100.0);
                        int    height2D      = (int)System.Math.Floor((noise + 2) * 10) + (half - 20);
                        int    height2Dtex01 = (int)System.Math.Floor((noise + 2) * 15) + (half - 30);
                        byte   topBlock      = height2D < height2Dtex01 ? Block.grass : Block.sand;
                        lvl.SetTile((ushort)x, (ushort)height2D, (ushort)z, topBlock);

                        if (height2D < waterlvl)
                        {
                            for (int y = waterlvl; y >= height2D; y--)
                            {
                                lvl.SetTile((ushort)x, (ushort)y, (ushort)z, Block.water);
                            }
                        }
                        for (int y = height2D - 1; y >= 0; y--)
                        {
                            byte block = (y > height2D * 3 / 4) ? Block.dirt : Block.rock;
                            lvl.SetTile((ushort)x, (ushort)y, (ushort)z, block);
                        }
                    }
                }
            }

            if (module3D != null)
            {
                for (int y = 0; y < height; y++)
                {
                    for (int z = 0; z < length; ++z)
                    {
                        for (int x = 0; x < width; ++x)
                        {
                            double value = System.Math.Floor((module3D.GetValue(x / 100.0, y / 100.0, z / 100.0) + 2) * 10);
                            if (value > 20)
                            {
                                lvl.SetTile((ushort)x, (ushort)y, (ushort)z, Block.grass);
                            }
                        }
                    }
                }
            }
        }