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); }
protected override ModuleBase CreateAndReadyModule() { Cylinders cylinders = new Cylinders(); cylinders.Frequency = frequency; return(cylinders); }
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)); }
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); }
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); } }
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)); }
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); }
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); } }
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); }
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); }
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; }
/// <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); }
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()); }
/// <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()); }
public void AddCylinder(Cyl cylinder) => Cylinders.Add(cylinder);
/// <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); } } }
/// <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; }
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); } }
public void AddCylinder(Cylinder cylinder) { Cylinders.Add(cylinder); }
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); }
/// <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); } } }
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); } } } } } }