algorithmic modeling for Rhino
I'm wondering if it's possible to update real-time in Grasshopper a set of points that are defined in Rhino?
I'm working on a Voronoi system at the moment and want to be able to deselect point and regenerate the solution. The ideal would be:
- Have a set of points fully defined within Rhino
- Have a point component in Grasshopper
- Select all the points in Rhino and Grasshopper detects accordingly
- Deselect one point in Rhino and Grasshopper detects accordingly and recalculates
- Can reselect that point or continue to deselect points
I know Kangaroo uses a timer switch but I can't see how to implement it in this situation. When bringing points from Rhino to Grasshopper, I always right-click in the Grasshopper window and choose "set multiple points". I can't see how to do this automatically.
I have a basic knowledge of vb.net but only so far as using it for loops and conditions.
This requires handling of Rhino selection events, which I currently don't do. I tried writing a small script, but it's clear that either I made a mistake or the Deselection events are currently not properly handled in Rhino.
Create a new VB component and paste the following code into the RunScript subroutine:
Private Sub RunScript(ByVal x As Object, ByRef A As Object)
Dim points As New List(Of Point3d)
For Each ro As DocObjects.RhinoObject In doc.Objects.GetSelectedObjects(False, False)
If (ro Is Nothing) Then Continue For
If (ro.ObjectType = DocObjects.ObjectType.Point ) Then
A = points
then paste the following code into the <Custom additional code> section:
Private Sub DestroyHandlers()
RemoveHandler RhinoDoc.SelectObjects, AddressOf RhinoSelectObjects
RemoveHandler RhinoDoc.DeselectObjects, AddressOf RhinoSelectObjects
Private Sub AssignHandlers()
AddHandler RhinoDoc.SelectObjects, AddressOf RhinoSelectObjects
AddHandler RhinoDoc.DeselectObjects, AddressOf RhinoSelectObjects
Private Sub RhinoSelectObjects(ByVal sender As Object, _
ByVal e As DocObjects.RhinoObjectSelectionEventArgs)
If (owner.OnPingDocument() Is Nothing) Then
It seems to work with selecting objects, but not with deselecting them. Also, when you drag the points around, you get Selection events (and thus new solutions) for every single point.
For me, it works for selection, deselection and moving. I'm running v0.8.0010 if that might make any difference.
Just when I think I'm coming to grips with Grasshopper, I see the VB code like above and realise I've only scratched the surface!
Are you doing this on Rhino5? That might explain the difference.
No. Rhino4 & Win7.
I've found one bug (not really), which may be the same as you found earlier.
If I've selected a group of points and click off them, Rhino deselects them but Grasshopper still registers them. However, when I deselect using the control button, everything can be deselected.
Perhaps Rhino sees the clicking off the points as different to a 'deselection' - maybe a 'selection of nothing'. I might be completely wrong with this though.