私は Python の初心者で、Grasshopper で使用するためのデータ構造の変換について質問があります。
Python コードからの出力として、キューブ (GUID) のグリッドがあり、これを「世代」と呼んでいます。それに加えて、各立方体が取得する色に関する情報を含むデータのグリッドを出力します。
例: i=3 で j=5 の場合、世代=5 で、立方体があります。他のリストでは、 i=3 の j=5 に対して、 Generation=5 で、文字列として 'green' があります。Grasshopper では、この「緑」の値を見本にリンクしてから、右の立方体に色を付けたいと考えています。
問題は、Python が 3 次元配列を出力するのに対し、Grasshopper はツリーで動作することです。そのため、最初のレベルが「世代」、2 番目のレベルが「i」、3 番目のレベルが「j」であるツリー構造に出力を変換する必要があります。
友人がこのコードを送ってくれたので、それが開始方法だと思います。
clr clr.AddReference("Grasshopper") from Grasshopper.Kernel.Data import GH_Path from Grasshopper import 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)
これはrenderfunctionです:
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」のリストが表示されます。