Mechanism for referenced Rhino geometry refresh


(Andrew Heumann) #1

So I’m a bit puzzled by something. Everything I try in my own component to construct geometry from an object reference in rhino, it only seems to get me halfway to normal “Referenced Object” behavior - it shows up as “Referenced Brep” or “Referenced mesh” and I can see it - but when the geometry changes, it does not update dynamically. if I just spit out the Guids and pass them through a geometry parameter in GH, everything behaves as expected - but if I try to construct the referenced geometry myself, no dice. What happens in that moment that tells the param to “expire” or refresh itself when the geometry is changed?


(David Rutten) #2

If you’re creating a new IGH_Param type which is supposed to respond to changes to Rhino objects, that parameter must override the RegisterRemoteIDs(GH_GuidTable) method. In that method, append all Rhino object IDs you care about to the table. The table will then expire your parameter when it detects a change relevant to you.

(did not test this code, but hopefully at least shows you what the method should look like)

foreach IGH_GeometricGoo goo in PersistentData
  if (goo != null && goo.IsReferencedGeometry)
    table.Add(goo.ReferenceID, this);

(Andrew Heumann) #3

I’m not trying to create a new type - I just want to harvest guids from a Rhino doc and pass them out to a geometry parameter and have them “behave” - possible?


(David Rutten) #4

Ah, you’re putting referenced geometry directly into an output? Typically only uninherited inputs (i.e. persistent data, not coming from some other param) will respond to Rhino id changes.

If your component is putting referenced goo into an output, you may have to override the RegisterRemoteIDs method on the component. This will also involve you keeping a list of IDs that pass through your fingers during SolveInstance.


(Andrew Heumann) #5

That I can do! Will give a try tomorrow and let you know. Thanks!!!


(Luis Fraguada) #6

@andheum did that solve your issue?