protected override void SolveInstance(IGH_DataAccess DA) { GH_PatternsFromSample gh_patterns = new GH_PatternsFromSample(); DA.GetData <GH_PatternsFromSample>(0, ref gh_patterns); List <Point3d> wavePoints = new List <Point3d>(); DA.GetDataList <Point3d>(1, wavePoints); double dataSize = 0; DA.GetData <double>(2, ref dataSize); bool backtrack = false; DA.GetData <bool>(3, ref backtrack); double iterations = 0; DA.GetData <double>(4, ref iterations); var patterns = gh_patterns.Value.Patterns; var weights = gh_patterns.Value.TilesWeights; var N = gh_patterns.Value.N; // Get width and height based on 2d array of points int width = Utils.GetNumberofPointsInOneDimension(wavePoints[0].X, wavePoints[wavePoints.Count - 1].X); int height = Utils.GetNumberofPointsInOneDimension(wavePoints[0].Y, wavePoints[wavePoints.Count - 1].Y); List <WaveCollapseHistoryElement> outputs = new List <WaveCollapseHistoryElement>(); var return_value = new GH_WaveCollapseResults(); for (int i = 0; i < (int)dataSize; i++) { // RUN WAVEFUNCION COLLAPSE var wfc = new WaveFunctionCollapseRunner(); var history = wfc.Run(patterns, N, width, height, weights, backtrack, (int)iterations); if (history.Elements.Count == 0) { continue; } var historyEndElement = history.Elements[history.Elements.Count - 1]; outputs.Add(historyEndElement); return_value.Value.AddToList(historyEndElement); } if (true) { DA.SetData(0, return_value); } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Check the inputs you idiot!"); } }
StringBuilder getContradictionData(List <int> outputSizes, int iterations, List <Pattern> patterns, int N, float[] weights, ref List <int> successfulRuns) { // Export to .csv file StringBuilder sb = new StringBuilder(); int successfulIterations_nobacktrack = 0; int successfulIterations_backtrack = 0; // Titles sb.AppendFormat("{0}, {1}, {2}", "Dimension", "No Backtracking", "Backtracking"); sb.AppendLine(); for (int size = 14; size < 26; size += 2) { outputSizes.Add(size); successfulIterations_nobacktrack = 0; successfulIterations_backtrack = 0; for (int i = 0; i < (int)iterations; i++) { // Count all successful iterations without backtracking. var wfc_nobacktrack = new WaveFunctionCollapseRunner(); var history_nobacktrack = wfc_nobacktrack.Run(patterns, N, size, size, weights, false, 1); if (history_nobacktrack.Elements.Count != 0) { successfulIterations_nobacktrack++; } // Count all successfull iterations with backtracking. var wfc_backtrack = new WaveFunctionCollapseRunner(); var history_backtrack = wfc_backtrack.Run(patterns, N, size, size, weights, true, 1); if (history_backtrack.Elements.Count != 0) { successfulIterations_backtrack++; } } sb.AppendFormat("{0}, {1}, {2}", size, successfulIterations_nobacktrack, successfulIterations_backtrack); sb.AppendLine(); successfulRuns.Add(successfulIterations_nobacktrack); successfulRuns.Add(successfulIterations_backtrack); } return(sb); }
// INSIDE protected override void SolveInstance(IGH_DataAccess DA) { GH_PatternsFromSample gh_patterns = new GH_PatternsFromSample(); DA.GetData <GH_PatternsFromSample>(0, ref gh_patterns); List <Point3d> wavePoints = new List <Point3d>(); DA.GetDataList <Point3d>(1, wavePoints); bool backtrack = false; DA.GetData <bool>(2, ref backtrack); double iterations = 0; DA.GetData <double>(3, ref iterations); var patterns = gh_patterns.Value.Patterns; var weights = gh_patterns.Value.TilesWeights; var N = gh_patterns.Value.N; int width = Utils.GetNumberofPointsInOneDimension(wavePoints[0].X, wavePoints[wavePoints.Count - 1].X); int height = Utils.GetNumberofPointsInOneDimension(wavePoints[0].Y, wavePoints[wavePoints.Count - 1].Y); // RUN WAVEFUNCION COLLAPSE var wfc = new WaveFunctionCollapseRunner(); var history = wfc.Run(patterns, N, width, height, weights, backtrack, (int)iterations); var return_value = new GH_WaveCollapseHistory(history); var patternsOccurence = wfc.GetPatternCounts(); var collapseAverage = wfc.GetAverageCollapseStep(); if (true) { DA.SetData(0, patterns.Count); DA.SetData(1, return_value); DA.SetDataList(2, patternsOccurence); DA.SetData(3, collapseAverage); } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Check the inputs you idiot!"); } }
protected override void SolveInstance(IGH_DataAccess DA) { // Get wave function collapse data GH_PatternsFromSample gh_patterns = new GH_PatternsFromSample(); DA.GetData <GH_PatternsFromSample>(0, ref gh_patterns); List <Point3d> wavePoints = new List <Point3d>(); DA.GetDataList <Point3d>(1, wavePoints); bool backtrack = false; DA.GetData <bool>(2, ref backtrack); double iterations = 0; DA.GetData <double>(3, ref iterations); // Get image data. GH_Image inputImage = new GH_Image(); DA.GetData(4, ref inputImage); List <double> newWeights = new List <double>(); DA.GetDataList(5, newWeights); bool applyWeights = false; DA.GetData(6, ref applyWeights); // Extract parameters to run Wave Function Collapse. var patterns = gh_patterns.Value.Patterns; var weights = gh_patterns.Value.TilesWeights; var N = gh_patterns.Value.N; int width = Utils.GetNumberofPointsInOneDimension(wavePoints[0].X, wavePoints[wavePoints.Count - 1].X); int height = Utils.GetNumberofPointsInOneDimension(wavePoints[0].Y, wavePoints[wavePoints.Count - 1].Y); // Prepare image data. //var image = convertImageListToArray(rawImage, width, height); //var image = Utils.generateRandomImage(width, height); var image = inputImage.Value.Brightness; // Run Wave Function Collapse. var wfc = new WaveFunctionCollapseRunner(); var history = new WaveCollapseHistory(); if (applyWeights) { history = wfc.Run(patterns, N, width, height, weights, (int)iterations, backtrack, image, newWeights); } else { history = wfc.Run(patterns, N, width, height, weights, (int)iterations, backtrack, image); } var return_value = new GH_WaveCollapseHistory(history); DA.SetData(0, return_value); }