gpt4 book ai didi

python - 将python中的数组列表转换为grasshopper中的树

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:42 24 4
gpt4 key购买 nike

我是 Python 的初学者,对转换数据结构有疑问,以便在 Grasshopper 中使用它。

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

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

问题是Python输出的是三维数组,而Grasshopper是做树的。因此,我必须将我的输出转换为树结构,其中第一层是“世代”,第二层是“i”,第三层是“j”。

一个 friend 发给我这段代码,所以我想这就是开始的方式:

导入 clrclr.AddReference("蚱蜢")从 Grasshopper.Kernel.Data 导入 GH_Path从 Grasshopper 导入数据树

希望大家帮帮忙!泰莎

这是我的主要功能:

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

在 Grasshopper 中,这给了我一个“Iron.Python.Runtime.List”列表。

最佳答案

我手头没有 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 函数中。

关于python - 将python中的数组列表转换为grasshopper中的树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com