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); double dataSize = 0; DA.GetData <double>(4, ref dataSize); // Get image data. GH_Image inputImage = new GH_Image(); DA.GetData(4, ref inputImage); 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); // Prepare image data. //var image = convertImageListToArray(rawImage, width, height); //var image = Utils.generateRandomImage(width, height); var image = inputImage.Value.Brightness; 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, (int)iterations, backtrack, image); if (history.Elements.Count == 0) { continue; } // Get last element of the wfc run 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!"); } }
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); }