Using of Expiresolution from Rhino AddObject Event

Hi,

I would like to have custom GH component updated after Rhino AddObject event is fired.
I tried to use ExpireSolution(True) however doesn’t seem to work.
Any hint?

Thanks,
Dmitriy

1 Like

namespace AddObject
{
    public class AddObjectWatcher
    {
        public bool IsEnabled { get; private set; }
        public AddObjectWatcherComponent Target;
        private AddObjectWatcher()
        {
            IsEnabled = false;
        }
        private static AddObjectWatcher _myInstance;
        public static AddObjectWatcher Instance => _myInstance ?? (_myInstance = new AddObjectWatcher());
        public void Enable(bool enable)
        {
            if (enable != IsEnabled)
            {
                if (enable)
                    RhinoDoc.AddRhinoObject += RhinoDocOnAddRhinoObject;
                else
                    RhinoDoc.AddRhinoObject -= RhinoDocOnAddRhinoObject;
            }
            IsEnabled = enable;
        }
        private void RhinoDocOnAddRhinoObject(object sender, RhinoObjectEventArgs e)
        {
            Target.Geos.Add(e.TheObject.Geometry);
            Target.ExpireSolution(true);
        }
    }
}
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
    pManager.AddBooleanParameter("reset", "Reset", "Reset", GH_ParamAccess.item, false);
    pManager.AddBooleanParameter("Watch", "Watch", "Watch", GH_ParamAccess.item, true);
}
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{
    pManager.AddGeometryParameter("Geometry", "G", "Last added geometry", GH_ParamAccess.list);
}
protected override void SolveInstance(IGH_DataAccess DA)
{
    var reset = false;
    DA.GetData(0, ref reset);
    var watch = true;
    DA.GetData(1, ref watch);
    if(reset)
        Geos = new List<GeometryBase>();
    AddObjectWatcher.Instance.Target = this;
    AddObjectWatcher.Instance.Enable(watch);
    DA.SetDataList(0, Geos);
}

AddObject.gha (7 KB)
AddObject.zip (24.8 KB) (Source)

1 Like

Thanks @Mahdiyar
This is exactly what I was looking for. Great example.