我是 Python 的初学者,有一个关于转换数据结构的问题,以便在 Grasshopper 中使用它。
作为我的 python 代码的输出,我有一个立方体网格(GUID),按我所说的“世代”分层。除此之外,它还输出一个数据网格,其中包含有关每个立方体应该获得什么颜色的信息。
例如:对于 i=3 中的 j=5,在 generation=5 中,我有一个立方体。在另一个列表中,对于 i=3 中的 j=5 ,在 generation=5 中,我将 'green' 作为字符串。在蚱蜢中,我想将这个“绿色”值链接到一个样本,然后用它为正确的立方体着色。
问题是 Python 输出一个 3 维数组,而 Grasshopper 在树中工作。所以,我必须将我的输出转换为一个树结构,其中第一级是“世代”,第二级是“i”,第三级是“j”。
一个朋友给我发了这段代码,所以我想这是如何开始的:
从 Grasshopper.Kernel.Data 导入 clr clr.AddReference("Grasshopper") 从 Grasshopper 导入 GH_Path 导入 DataTree
我希望你们能帮忙!泰莎
这是我的主要功能:
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)
这是渲染函数:
def render(arrValues, z):
rs.EnableRedraw(False)
arrMeshes = []
for i in range(len(arrValues)):
arrRow = []
for j in range(len(arrValues[i])):
box = addMeshBox([(i-0.5),(len(arrValues[i])-j-0.5),z-0.5], [(i+0.5),(len(arrValues[i])-j+0.5),z+0.5])
arrRow.append(box)
arrMeshes.append(arrRow)
rs.EnableRedraw(True)
return arrMeshes
这是颜色函数:
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
最后,这就是我向 Grasshopper 输出的内容:
a = renderList
b = colorList
在蚱蜢中,这给了我一个“Iron.Python.Runtime.List”列表。