algorithmic modeling for Rhino
Hi everybody,
I created a new component in Visual Studio for Grasshopper.
The component gets two inputs, the first one could be a list of NumberSliders and the second input accepts a BooleanTugle.
I wanted to make it in a way when the BooleanTugle is 'true' the values of the sliders start to be changed for 10 times with some random numbers between the lower and upper bounds of the NumberSliders.
Problem: When I run the component in Grasshopper, it does not stop after 10 iterations and continue changing the NumberSliders values till I switch the BooleanTugle on 'false' again.
The code is below.
I would appreciate it if someone could tell me where I am doing wrong.
Thank you very much in advance.
code:
protected override void SolveInstance(IGH_DataAccess DA)
{
bool Run = false;
if (!DA.GetData(1, ref Run)) return;
if (Run == true)
{
ReadSetSliders();
}
}
public void ReadSetSliders()
{
List<GH_NumberSlider> sliders = new List<GH_NumberSlider>();
foreach (IGH_Param src in Params.Input[0].Sources)
{
if (src.GetType() == typeof(GH_NumberSlider))
{
GH_NumberSlider nslider = (GH_NumberSlider)src;
sliders.Add(nslider);
}
}
double[] LowerBand = new double[sliders.Count];
double[] UpperBand = new double[sliders.Count];
for (int i = 0; i < sliders.Count; i++)
{
LowerBand[i] = (double)sliders[i].Slider.Minimum;
UpperBand[i] = (double)sliders[i].Slider.Maximum;
}
Random rnd = new Random();
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < sliders.Count; j++)
{
decimal newVal = (decimal)(LowerBand[j] + ((UpperBand[j] - LowerBand[j]) * rnd.NextDouble()));
GH_NumberSlider bslider = (GH_NumberSlider)Params.Input[0].Sources[j];
bslider.Slider.Value = newVal;
}
}
}
Tags:
You are not allowed to modify sliders during a solution. An added problem here is that these new solutions you trigger will also trigger your component to run again, thus getting stuck in a recursive spiral.
Updates to the state of the document have to happen 'from the outside'. This is usually accomplished in one of two ways:
Thank you very much David.
since I need to use the new component in a bigger script, it has to be in a way that could be run without any extra menu or user clicks. Then, I think the second solution would be a better option for me.
But I did not understand how should I do that; would you please show me in a simple example how I can do that.
Thank you very much in advance.
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by