algorithmic modeling for Rhino
Why would you keep on computing once the results are ready in the first place?
I'm sorry, I don't understand what you're trying to do.
--
David Rutten
david@mcneel.com
Tirol, Austria
Hi David,
The point is, even when computation is finished, the component (like any other component) consumes computation power and takes time, apparently because this is the way grasshopper can keep on previewing the results while they do not exit in Rhino yet? Please correct me if I'm mistaken. In any case, what I want is to store the results and, let's say, disconnect the inputs from the components, once the results are ready. Manually, I could put a Data Recorder component, and disable the main component once the container is not empty.
The point is, even when computation is finished, the component (like any other component) consumes computation power and takes time, apparently because this is the way grasshopper can keep on previewing the results while they do not exit in Rhino yet?
That's not how it works. Component solve themselves only once for the same inputs. The results are cached inside the component output parameter and they will not be recomputed until the inputs change (or maybe because you change the component options if there are any).
All data is cached, and when something happens (for example when you change a slider) then that slider and all components that depend on that slider will expire. These are the only components that are solved again.
Volatile data inside parameters can be converted into persistent data with the 'Internalise Data' option in the menu. Perhaps that's what you're looking for?
--
David Rutten
david@mcneel.com
Tirol, Austria
Thanks for taking the time to answer this David.
My input data is a network of curves and it doesn't change during the whole process. I know I can internalize the outputs of my component (into the input of another component following it) and disable it afterwards (once it has finished its heavy computation process). All I want to do is to automate this as follows: Once computation is finished, keep them as persistent data and disable the component. Is it possible to do so from within my custom code? Let me ask my question differently: what is persistent data technically? How can I create an array or a list of persistent data?
Most types of Parameter contain two data trees, one for volatile and one for persistent data. Volatile data is destroyed whenever the parameter expires, it will then have to be recreated during the next solution. This can happen in several ways:
I think your problem involves case #3 right? You have a component which computes a solution once, and then you just want to keep pushing that solution into the outputs without ever recalculating, correct?
If so, it's strange that you'd have to do anything special, because the component should never recalculate anyway unless you change the inputs, which you just said you don't do.
However, you can store your results in some local variables, and then with any subsequent call to SolveInstance you just copy the cached results into the output.
Oh, are you building a GHA or are you using the scripting components? There's a different approach required for these.
--
David Rutten
david@mcneel.com
Tirol, Austria
Hi David,
Yes my problem is related to case 3. "You have a component which computes a solution once, and then you just want to keep pushing that solution into the outputs without ever recalculating, correct?" yes exactly! I am in the last step of developing a GHA, but I wonder what the difference could be?
"However, you can store your results in some local variables, and then with any subsequent call to SolveInstance you just copy the cached results into the output." How can I do this technically in VB?
BTW, how would you interpret this from GH SDK on GH_Component..::..SolveInstance Method
"This function will be called (successively) from within the ComputeData method of this component."?
Thanks for your time.
You add a private variable to your component. Initially it will be set to Nothing.
Inside SolveInstance, you check whether this variable is Nothing. If it is, you do your computation and store the result inside your variable.
Next, you assign the variable to the relevant output parameter. I do not know whether you want to assign single values, or lists or datatrees, or how many outputs you want to assign.
You'll also only want to assign this cached data once, so you'll need to disable the gap logic and only assign your data during the first call to SolveInstance:
If (localData Is Nothing) Then
'Create localData
End IfDA.DisableGapLogic()
If (DA.Iteration = 0) Then
'Assign data
End If
--
David Rutten
david@mcneel.com
Tirol, Austria
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