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