Ghpythonlib tree helpers

I’m trying to figure out how to use ghpythonlib’s tree helpers to move between trees in grasshopper and nested lists in Python. However, I can’t seem to convert a tree to a list and back within Python (of course what I’m trying to ultimately do is more complex, but I need to get this to work first). Can anyone tell what I’m doing wrong here?

treehelpers.gh (5.8 KB)

Hi,

Have you set the TreeIn input to Tree Access? At first glance, I don’t see what else could be wrong with your code.

Yes, I have

Hm, something seems to be askew with the path numbering of your input data. I tried flattening and re-grafting the data and it worked fine!

Maybe @piac could shine a light on this. If I remember correctly from a while back, it was he, who came up with the amazing treehelper functions for GHPython!?

try:

test = th.tree_to_list(TreeIn, lambda x:x[3])

There may be a better way, but the documentation states the following:

| tree_to_list(input, retrieve_base=<function <lambda$33> at 0x0000000000000089>) | Returns a list representation of a Grasshopper DataTree.
| Inputs:
| input: A tree to be transformed.
|
| retrieve_base= lambda x: x[0]:
| Most trees start with a [0] path that is never changed.
| That is rendered as a list with a single item. However, for simplicity, most users
| will want to start using the first branch in that path. Therefore, retrieve_base
| defaults to a function that will just return the first item in the output.
|
| If a tree is created manually or edited,
| then it can also have paths starting with [1] etc. In this case, retrieve_base can
| be set to None. In this case, the entire result is returned, inside a single list.
| This is the equivalent of the “source” input for list_to_tree.
|
| Returns:
| A list object

it’s a result of your data tree structure starting with 3.

2 Likes

Thanks for the replies. To be honest I’m having a hard time understanding your quote from the documentation, but it also works to use Path Mapper to just add a 0 in the front of all my paths, then simplify after things come out of python.

try this:

TreeIn.SimplifyPaths()
test = th.tree_to_list(TreeIn, None)
2 Likes

Thank you all for the replies. It was indeed the weird paths that were causing the issue, I ended up fixing that upstream but it’s great to know these fixes for future reference.