Exemple #1
0
        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);
        }