algorithmic modeling for Rhino
Well I do not understand why this does not work and the information I found on the Internet has confused me more, so I ask...
Then, what I want is to make a loop with an input variable, internal variables for equations and an output variable, whose data are put into input variable. Can this be done? To explain better, the pseudocode...
> list of original values.
> Start loop.
> Equations.
> New list of values.
> End loop. -> The new values replace the original values and the loop repeats.
I have somthing like this:
ByVal x as list(of double) 'input values like range10 0 to 1.
Dim xloop As New list (Of Double) 'temporal variable.
Dim xout As New List (Of Double) 'exit values.
For i As int32 = 0 To limit
xloop.clear()
xout.clear()
xloop = x
For j As int32 = 0 To x.count - 1
xout.add(xloop.item(j) + 1) 'this represent in my real code a lot of variables and formulas, but I think for this problem case is the same thing.
Next
x = xout
Next
A = x
But this does not work. Could anyone help me?
Thank you so much.
Tags:
Do you mean that you have a fixed length list that you want to update repeatedly? If so, you can just change the objects directly in your starting list.
For i As Int = 0 to Limit
For j as Int = 0 to LoopList.Count -1
LoopList(j) = LoopList(j) * whatever you're doing to it
Next j
Next i
A = LoopList
Thank you very much David, has been helpful to me.
Unfortunately, my problem now (and before) is to link the loop with a counter and the corresponding timer component. It seems that doing this:
ByVal iter as integer 'input value for example 20.
Dim counter as int32 = 0
counter = counter + iter
For i as int32 = 0 to counter '(0 to 20, 0 to 40, 0 to 60...)
(,,,) 'loop
Next
At each new timer iteration, resets all, increasing exponentially runtime. In contrast with this:
For i as int32 = counter to counter + iter '(0 to 20, 20 to 40, 40 to 60....)
(,,,) 'loop
Next
In each timer iteration is repeated with the same values, so it is not a loop, is a loop repeteción.
So what I need is that each new timer iteration, the loop runs "iter" times (such as 0 to 20, 20 to 40, 40 to 60 ....), but the output values of previous loop starting the new loop. This is possible?
If I understand what you're trying to do correctly, then it's this. The key for using the timer within the GH scripting components is to declare the variables you want to remain from iteration to iteration in the '<Custom additional code> section.
Here, with LoopRange = 5, it will output:
at Counter = 0: (0,1,2,3,4,5)
at Counter = 1: (0,1,2,3,4,5,0,2,4,6,8,10)
etc...
Private Sub RunScript(ByVal Reset As Boolean, ByVal LoopRange As Object, ByRef C As Object, ByRef D As Object)
If Reset = True Then
Counter = 0
Output.Clear
Else
Counter += 1
For I As Int32 = 0 To LoopRange
Output.Add(I * Counter) 'just to see the separation between each iteration
Next
End If
C = Counter
D = Output
End Sub
'<Custom additional code>
Dim Counter As Int32
Dim Output As New List(Of Double)
Is this what you're looking for?
No, that was not what I needed. Imagine you have a list of n values, which transform with some operations in a new list of values, then this new list is stored, and re-run operations with this new list of values and rerun operations the new list of new values...
I broke my head to find a solution, but for my little experience is very dirty. What I did was store each new values in a tree, extracting the last branch to take at the beginning of the loop, and clear the tree to avoid unnecessary data store. That said, I do not know if my script will be understood, because I found the solution after trying and error, in a fucking loop mind!
But many thanks for your help David :)
Private Sub RunScript(ByVal dat As List(Of Double), ByVal play As Boolean, ByVal pause As Boolean, ByRef R As Object)
If play = True And pause = False Then
count = count + 1
pararTimer = False
Else If play = False Then
count = 0
outpath.clear()
tree.clear()
pararTimer = True
Else pause = True
pararTimer = True
End If
(...)
'----------------------------------------------------
print(count)
For iter As Int32 = count To count
x.clear()
xl.clear()
If tree.Pathexists(0) Then
print("existe")
For i As int32 = 0 To dat.count - 1
x.add(tree.branch(0).item(i))
Next
Else
print("no existe")
x.addRange(dat)
End If
For i As int32 = 0 To dat.count - 1
x(i) = x(i) + 1 'representing operations.
Next
For i As int32 = 0 To dat.count - 1
xl.add(x(i) * (iter + 1)) 'representing operations and changing variable list.
Next
outPath.addRange(xl, New gh_path(iter))
tree.clear()
If outPath.branchCount > 0 Then
tree.addRange(outPath.branch(outPath.branchCount - 1), New gh_path (0))
End If
R = tree
outpath.clear()
Next
End Sub
'<Custom additional code>
Dim tree As New datatree (Of Double)
Dim outPath As New datatree (Of Double)
Dim xl As New list (Of Double)
Dim x As New list (Of Double)
Dim count As Integer = 0
Dim timer As New System.Windows.Forms.Timer
Dim pararTimer As Boolean
This is what I am looking for. Any idea how to accomplish this for python?
I just need to buckle down and get into C# already but I'm in a Nash Equilibrium.
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