I’ve written a Python code in Grasshoppers Ghpython Script Component,
the code works fine in “Procedural Mode” but then after converting to “GH SDK mode” and compiling the component, I get this error: 'Global name ‘ghenv’ not defined.
PS. Why am i using ghenv and why?
for things like Adding Baloon Msg, Changing Name and NickName and Description of the component and …
PS II.
lines that work fine in procedural modes (but later cause problems) are like:
ghenv.Component.Name = “Mycomponent1”
ghenv.Component.NickName = ‘cmp1’
ghenv.Component.IconDisplayMode = ghenv.Component.IconDisplayMode.application
or
ghenv.Component.AddRuntimeMessage(gh.Kernel.GH_RuntimeMessageLevel.Warning, ‘Blah Blaaah’)
this has come up once before. I’ve noted it down here: RH-54351.
Did @chanley’s method help?
After compiling, ghenv.Component is simply self, because the script becomes the component.
–
In general, component Name and Nickname in SDK mode are taken from the class name of your component and from the Nickname of the GhPython component. So there’s no need to reset it later. On the other hand, are you sure that overriding your users’ choices for icon is a good idea? Adding runtime messages is sometimes needed – you should get it to work with the system above.
I tried changing ‘ghenv.Component’ to ‘self’ and then saving it as .py in the lib folder, but it still giving the warning, this time as the “global name “self” is not defined” when trying to call it from the lib.
from Grasshopper.Kernel import GH_RuntimeMessageLevel as RML
if Name == None:
print("Add a Name")
self.AddRuntimeMessage(RML.Warning,"Add a Name string")