algorithmic modeling for Rhino
A quick and dirty way to handle this is to simply add a second python script with a single line script: A = x
The python script component is smart, and if you set A = to a single list, it will automatically give you back all the items of the list. However, if you give it a list of lists (as you are in this example) it doesn't know to extract the items in the internal lists. The script I suggest simply reinterprets each list as a single item, and relies on the component data processing to split out the items list by list. This also has the advantage (over 筑梦NARUTO's solution) of keeping each list in its own grasshopper data tree branch.
If you'd rather avoid the clunkiness of a second script component, you'll have to compose a datatree yourself. That will look something like this:
import math as m
import Rhino
from Grasshopper.Kernel.Data import GH_Path
from Grasshopper import DataTree
pi = m.pi
angle =0
pts = DataTree[Rhino.Geometry.Point3d]()
c=0
for i in rs.frange(0,5,0.5):
angle +=(pi/30)
layer = []
for j in rs.frange(0,2*pi,pi/15):
x= 5*m.sin(j+angle)
y= 5*m.cos(j+angle)
layer.append( Rhino.Geometry.Point3d(x,y,i))
pts.AddRange(layer,GH_Path(c))
c = c+1
a = pts
Thank you Andrew, your advice is very, very helpful to me. I also tried to say pts = DataTree[object]() and llayer.append( rs.AddPoint(x,y,i)) and it still works.
May I ask why sometimes we are using Rhino.Geometry instead of just using Rhinoscriptsyntax??
I prefer RhinoCommon to rhinoscriptsyntax - just feels more direct. Really more of a personal taste thing. In the example above though I was just sidestepping the fact that rs.AddPoint returns a Guid instead of a point - but I see your approach with DataTree[object] works just fine.
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by