将python中的数组列表转换为grasshopp中的tree

2024-09-27 00:19:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者,有一个关于转换数据结构的问题,因为在Grasshopper中使用它。

作为python代码的输出,我有一个立方体网格(GUID),在我称之为“代”的层中进行分层。除此之外,它输出一个数据网格,其中包含每个立方体应该获得什么颜色的信息。

例如:对于i=3中的j=5,在generation=5中,我有一个立方体。在另一个列表中,对于i=3中的j=5,在generation=5中,我将'green'作为一个字符串。在grasshopper中,我想将这个“绿色”值链接到一个样例,然后用它给正确的立方体上色。

问题是Python输出一个三维数组,而Grasshopper在树上工作。所以,我必须把我的输出转换成树状结构,其中第一级是“代”,第二级是“I”,第三级是“j”。

一个朋友给我发了这段代码,我想这就是开始的方法:

导入clr clr.AddReference(“蚱蜢”) 从Grasshopper.Kernel.Data导入GH_路径 从蚱蜢导入数据树

希望你们能帮忙! 泰莎

这是我的主要职能:

def Main():
    intLength = input1
    intWidth  = input2
    intGen    = input3
arrValues = randomizeArray01(intLength,intWidth)        
arrDensity = densityfunction(arrValues)
arrMeshes = render(arrValues,-1)                        
for k in range(intGen):
    arrValues = applyGOL(arrValues,arrDensity)          
    arrDensity = densityfunction(arrValues)
    genC = colorObject(arrValues)
    colorList.append(genC)
    genR = render(arrValues,k)   
    renderList.append(genR)

其中这是renderfunction:

^{pr2}$

这是颜色函数:

def colorObject(arrValues):
    arrColor = []
    for i in range(len(arrValues)):
        rowColor= []
        for j in range(len(arrValues[i])):
            if arrValues[i][j] == 0:
                color = green
                rowColor.append(color)
            elif arrValues[i][j] ==1:
                color = residential
                rowColor.append(color)
            elif arrValues[i][j] ==100:
                color = retail
                rowColor.append(color)
            elif arrValues[i][j] ==1000:
                color = road
                rowColor.append(color)
        arrColor.append(rowColor)
    return arrColor

最后,这是我输出给蚱蜢的:

a = renderList
b = colorList

在蚱蜢里,这给了我一个Iron.Python.Runtime.运行时“列表”。


Tags: 数据代码in网格forrangecolorelif
1条回答
网友
1楼 · 发布于 2024-09-27 00:19:32

我手上没有一个工作版本的grasshopper,但我的代码是:

import rhinoscriptsyntax as rs

import Rhino.Geometry as rg
from clr import AddReference as addr
addr("Grasshopper")

from System import Object
from Grasshopper import DataTree
from Grasshopper.Kernel.Data import GH_Path


def raggedListToDataTree(raggedList):
    rl = raggedList
    result = DataTree[object]()
    for i in range(len(rl)):
        temp = []
        for j in range(len(rl[i])):
            temp.append(rl[i][j])
        #print i, " - ",temp
        path = GH_Path(i)
        result.AddRange(temp, path)
    return result

这个here的要点还有一个将树转换为列表的函数。在

这仍然有很多错误,没有递归,没有错误检查,没有分支魔术,但它在大多数情况下都能起作用。我很乐意看到它得到改进!在

在您的例子中,您可以通过管道将输出提供给您一个运行时列表到raggedListToDataTree函数中。在

相关问题 更多 >

    热门问题