You’ll be needing a `definition.NewSolution(True, GH_SolutionMode.Silent). Here is a simple addition example where each run sets different inputs, then gets solution:
inside_addition.gh (1.5 KB)
The GH file should live next to the .py file.
#tested with python3.7
import rhinoinside
from pathlib import Path
import clr
sysdir = Path(r"C:\Program Files\Rhino 7 WIP\System")
plugdir = Path(sysdir, "..", "Plug-ins").resolve()
rhinoinside.load(f"{sysdir}")
GrasshopperDll = f'{Path(plugdir, "Grasshopper", "Grasshopper.dll").resolve()}'
GH_IODll= f'{Path(plugdir, "Grasshopper", "GH_IO.dll")}'
GH_UtilDll= f'{Path(plugdir, "Grasshopper", "GH_Util.dll")}'
clr.AddReference(GrasshopperDll)
clr.AddReference(GH_IODll)
clr.AddReference(GH_UtilDll)
# Set up ready, now do the actual Rhino usage
import System
import Rhino
import Grasshopper
from Grasshopper.Kernel import GH_Document, GH_SolutionMode
from GH_IO.Serialization import GH_Archive
from Grasshopper.Kernel.Data import GH_Path
from Grasshopper.Kernel.Types import GH_Number
import random
definition = GH_Document()
archive = GH_Archive()
archive.ReadFromFile(r"N:\gh\inside_addition.gh")
archive.ExtractObject(definition, "Definition")
for ob in definition.Objects:
print(f"{ob.NickName}:")
for inp in ob.Params.Input:
inp.VolatileData.Clear()
n = float(random.randint(0, 100))
ghn = GH_Number(n)
inp.AddVolatileData(GH_Path(0), 0, GH_Number(n))
print(f"\tSet input {inp.NickName} to {ghn}")
definition.NewSolution(True, GH_SolutionMode.Silent)
for ob in definition.Objects:
for output in ob.Params.Output:
output.CollectData()
output.ComputeData()
pathcount = output.VolatileData.PathCount
idx = 0
while idx < pathcount:
b = output.VolatileData.get_Branch(idx)
for item in b:
print(f"\toutput {output.NickName} -> {item.Value}")
idx = idx + 1
Output of a test run:
D:\Dev\Rhino\rhinoinside_cpython_test> python .\test.py
InsideAddition:
Set input A to 34
Set input B to 100
output Result -> 134