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
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
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)
Thanks @Mahdiyar
This is exactly what I was looking for. Great example.