在草hopper中重新编号路径时,如何解决具有相同键的条目?

时间:2019-10-22 06:52:44

标签: python grasshopper

在蚱hopper中编码,以尝试将我的树枝从{0},{1},....重新编号为分支{230},{234},...的差异索引。只有第一棵树更规则在命名时,第二棵树来自一棵更大的树,我根据需要选择了这些树枝来操纵它们。但是,在操作它们时,我不得不将分支索引从{230},{234} ....更改为以0开头的1的索引,以匹配传入数据的索引。结果,我尝试在python中处理数据以逆转以前完成的操作。

我在python中尝试了一个代码,接受了我需要的分支索引,并根据Rhino / Grasshopper语法输出修改后的索引

import rhinoscriptsyntax as rs
for i in x:
    a = y.RenumberPaths("%s" %i)

具有受控分支索引的数据树的预期输出。 错误: 运行时错误(ArgumentException):具有相同键的条目已存在。

跟踪:   脚本中的第13行

第13行只是显示a = y.Renumber...

的那一行

2 个答案:

答案 0 :(得分:0)

我不熟悉python API,但是在C#中,我会做类似的事情:

// inputDataTree is the tree you want to renumber, ideally you would change
// the DataTree<object> for your data type such as DataTree<Curve> or whatever.
DataTree<object> dataTree = new DataTree<object>();

for( int i = 0; i < inputDataTree.BranchCount; ++i )
{

    GH_Path path = new GH_Path(i);

    for( int j = 0; j < inputDataTree.Branch(i).Count; ++j )
    {

        // If you don't need the j index, you could compute the 
        // path in the outer loop. You can add logic to how you 
        // create branches.
        // GH_Path path = new GH_Path(i, j);

        dataTree.Add( inputDataTree.Branch(i)[j], path );

    }

}

答案 1 :(得分:0)

您可以使用GH Python的Tree Helper

from ghpythonlib import treehelpers as th

您可以从此处执行th.tree_to_list(tree)将树转换为数组数组;或th.list_to_tree(list)将数组数组转换为DataTree。

这将大大简化您的生活,因为在python中使用数据树有点痛苦...

来源:https://developer.rhino3d.com/guides/rhinopython/grasshopper-datatrees-and-python/