private void Awake() { DontDestroyOnLoad(this); if (Instance != null && Instance != this) { Destroy(this.gameObject); } else { Instance = this; } }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { IGH_Goo goo = null; Image image = new Image(); if (!DA.GetData(0, ref goo)) { return; } if (!goo.TryGetImage(ref image)) { return; } int mode = 0; DA.GetData(1, ref mode); double numValA = 0.5; DA.GetData(2, ref numValA); double numValB = 0.5; DA.GetData(3, ref numValB); int numValC = 1; DA.GetData(4, ref numValC); Filter filter = new Filter(); int[] indices = new int[] { 2, 3, 4 }; switch ((FilterModes)mode) { case FilterModes.Otsu: filter = new Otsu(); ClearParameters(indices); image.Filters.Add(new Otsu()); break; case FilterModes.SIS: filter = new SIS(); ClearParameters(indices); image.Filters.Add(new SIS()); break; case FilterModes.Bradley: SetParameter(2, "B", "Brightness", "Brightness difference limit"); SetParameter(3, "S", "Size", "Window size"); SetParameter(4); filter = new Bradley(numValA, (int)numValB); image.Filters.Add(new Bradley(numValA, (int)numValB)); break; case FilterModes.Iterative: SetParameter(2, "M", "Minimum", "Minimum error value"); SetParameter(3, "T", "Threshold", "Threshold value"); SetParameter(4); filter = new Iterative(numValA, numValB); image.Filters.Add(new Iterative(numValA, numValB)); break; case FilterModes.Nilback: SetParameter(2, "C", "C", "Mean offset C"); SetParameter(3, "K", "K", "Parameter K"); SetParameter(4, "R", "Radius", "Filter convolution radius"); filter = new Nilback(numValA, numValB, numValC); image.Filters.Add(new Nilback(numValA, numValB, numValC)); break; case FilterModes.Sauvola: SetParameter(2, "R", "R", "Dynamic range"); SetParameter(3, "K", "K", "Parameter K"); SetParameter(4, "R", "Radius", "Filter convolution radius"); filter = new Sauvola(numValA, numValB, numValC); image.Filters.Add(new Sauvola(numValA, numValB, numValC)); break; case FilterModes.WolfJolion: SetParameter(2, "R", "R", "Dynamic range"); SetParameter(3, "K", "K", "Parameter K"); SetParameter(4, "R", "Radius", "Filter convolution radius"); filter = new WolfJolion(numValA, numValB, numValC); image.Filters.Add(new WolfJolion(numValA, numValB, numValC)); break; } message = ((FilterModes)mode).ToString(); UpdateMessage(); DA.SetData(0, image); DA.SetData(1, filter); }