Event Handler Python Script to detect modifications to objects in layer

I’m looking for a solution to update a python script when objects in a specified layer in Rhino have been modified.

I found this topic with an event handler example that detects viewport changes:

Running a python script when changing the viewport - Scripting - McNeel Forum

And this example rhino-developer-samples/rhinopython/SampleEventHandler.py at 6 · mcneel/rhino-developer-samples · GitHub but I don’t know how to modify the scripts.

I added Rhino.RhinoDoc.SelectedObjects and tried a few other events but my modifications don’t seem to work. The script does not detect the events.

modify-select-event-handler.gh (6.4 KB)

import Rhino
import scriptcontext as sc
import rhinoscriptsyntax as rs

class SampleEventHandler():

    def __init__(self):
        Rhino.RhinoDoc.AddRhinoObject += self.OnAddRhinoObject
        Rhino.RhinoDoc.ReplaceRhinoObject += self.OnReplaceRhinoObject
        Rhino.RhinoDoc.DeleteRhinoObject += self.OnDeleteRhinoObject
        Rhino.RhinoDoc.UndeleteRhinoObject += self.OnUndeleteRhinoObject
        Rhino.RhinoDoc.SelectObjects += self.OnSelectObjects
        self.Enabled = True

    def Disable(self):
        Rhino.RhinoDoc.AddRhinoObject -= self.OnAddRhinoObject
        Rhino.RhinoDoc.ReplaceRhinoObject -= self.OnReplaceRhinoObject
        Rhino.RhinoDoc.DeleteRhinoObject -= self.OnDeleteRhinoObject
        Rhino.RhinoDoc.UndeleteRhinoObject -= self.OnUndeleteRhinoObject
        Rhino.RhinoDoc.SelectObjects -= self.OnSelectObjects
        self.Enabled = False

    def IsEnabled(self):
        return self.Enabled

    def OnAddRhinoObject(self, sender, e):
        print '> SampleEventHandler.OnAddRhinoObject'

    def OnReplaceRhinoObject(self, sender, e):
        print '> SampleEventHandler.OnReplaceRhinoObject'

    def OnDeleteRhinoObject(self, sender, e):
        print '> SampleEventHandler.OnDeleteRhinoObject'

    def OnUndeleteRhinoObject(self, sender, e):
        print '> SampleEventHandler.OnUndeleteRhinoObject'    

    def OnSelectObjects(self, sender, e):
        print '> SampleEventHandler.OnSelectObjects'  

def TestSampleEventHandler():
    if sc.sticky.has_key('sample_event_handler'):
        handler = sc.sticky.pop('sample_event_handler', None)
        if handler:
            handler.Disable()
            handler = None
            print ' SampleEventHandler disabled'  
    else:
        handler = SampleEventHandler()
        sc.sticky['sample_event_handler'] = handler       
        print ' SampleEventHandler enabled'  

if __name__ == '__main__':
    TestSampleEventHandler()

view = sc.doc.Views.ActiveView
view = (view.ActiveViewport.Name)

sc.doc = Rhino.RhinoDoc.ActiveDoc

sel = rs.SelectedObjects()

for obj in sel:
    layer = rs.ObjectLayer(obj)

sc.doc = ghdoc

I found a solution and I postedd the files in the more relevant topic.

1 Like