在Blender Python中生成多维数据集



我在Ubuntu 21,10上使用Blender 3.0为什么这个代码不起作用?我正在尝试随机生成一个立方体的六个顶点的x、y和z值并创建它

这个代码的灵感来自Chris Holt的https://youtu.be/mljWBuj0Gho

进口bpy导入随机name=";"新对象";verts=[]edges=[]面=[]

床=300#,单位:mm打印("床="+str(床))

xmin=-床/2ymin=-床/2zmin=-床/2xmax=床/2ymax=床/2zmax=床/2

print("xmin"+str(xmin))print("xmax"+str(xmax))print("ymin"+str(ymin))print("ymax"+str(ymax))print("zmin"+str(zmin))print("zmax"+str(zmax))

生成坐标

左上角

a1=随机随机随机点(xmin,0)a2=随机随机随机点(ymin,0)a3=随机随机随机点(0,zmax)

右上角

b1=随机随机随机点(xmin,0)b2=随机随机随机点(0,ymax)b3=随机随机随机点(0,zmax)

右上前部

c1=随机随机随机点(0,xmax)c2=随机随机随机点(0,ymax)c3=随机随机随机点(0,zmax)

左上前部

d1=随机随机随机点(0,xmax)d2=随机随机随机点(ymin,0)d3=随机随机随机点(0,zmax)

左下角

e1=随机随机随机点(xmin,0)e2=随机随机随机点(ymin,0)e3=随机随机随机点(zmin,0)

右下角

f1=随机随机随机点(xmin,0)f2=随机随机随机点(0,ymax)f3=随机随机随机点(zmin,0)

右下前部

g1=随机随机随机点(0,xmax)g2=随机随机随机点(0,ymax)g3=随机随机随机点(zmin,0)xmax

左下前部

h1=随机随机随机点(0,xmax)h2=随机随机随机点(ymin,0)h3=随机随机随机点(zmin,0)

打印("\n")打印("\n")print("a1="+str(a1))print("a2="+str(a2))print("a3="+str(a3))

打印("\n")print("b1="+str(b1))print("b2="+str(b2))print("b3="+str(b3))

打印("\n")print("c1="+str(c1))print("c2="+str(c2))print("c3="+str(c3))

打印("\n")print("d1="+str(d1))print("d2="+str(d2))print("d3="+str(d3))

打印("\n")print("e1="+str(a1))print("e2="+str(e2))print("e3="+str(e3))

打印("\n")print("f1="+str(f1))print("f2="+str(f2))print("f3="+str(f3))

打印("\n")print("g1="+str(g1))print("g2="+str(g2))print("g3="+str(g3))

打印("\n")print("h1="+str(h1))print("h2="+str(h2))print("h3="+str(h3))打印("结束")

#8个顶点verts.append([#index 0a1,#xa2,#ya3#z])verts.append([#index 1b1,#xb2,#yb3#z])verts.append([#index 2c1,#xc2,#yc3#z])verts.append([#index 3d1#d2,#yd3#z])verts.append([#index 4e1,#xe2,#ye3#z])verts.append([#index 5f1,#xf2,#yf3#z])verts.append([#index 6g1,#xg2,#yg3#z])verts.append([#index 7h1,#xh2,#yh3#z])

#12个边缘#顶部edges.append([0,1])edges.append([1,2])edges.append([2,3])edges.append([3,0])#底部edges.append([4,5])edges.append([5,6])edges.append([6,7])edges.append([7,4])#连接edges.append([0,4])edges.append([1,5])edges.append([2,6])edges.append([3,7])

打印(vert[7])打印(边缘[0])

#6面#顶部faces.append([0,1,2,3])#底部faces.append([4,5,6,7])#侧面

背面

faces.append([2,6,10,11])

前部

faces.append([0,1,4,5])

右侧

faces.append([1,2,5,6])

左侧

faces.append([0,3,7])

打印";faces[1]="+"str(faces[1]))#不起作用

打印(面[1])

mesh=bpy.data.meshs.new(名称)print("mesh="+str(mesh))obj=bpy.data.objects.new(名称,网格)print("obj="+str(obj))col=bpy.data.collections.get("集合")print("col="+str(col))col.objects.link(obj)bpy.context.view_layer.objects.active=对象#mesh.from_pydata(verts,edges,faces)mod_skin=obj.modifiers.new('skin','skin')

我收到的错误信息是

追踪(最近一次通话):文件"/"dem.py";,第188行,inAttributeError:"NoneType"对象没有属性"objects"错误:Python脚本失败,请检查系统控制台中的消息

bpy.data.collections返回一个bpy.prop_collection,您可以使用get()方法按关键字在其中进行搜索。在这里,您似乎正在搜索一个不存在的密钥。它返回None,因此返回您的错误。

使用for循环迭代bpy.data.collections对象

for collection in bpy.data.collections:
print(collection)

你可以看到唯一的会员是

<bpy_struct, Collection("Collection") at 0x7f20e4359848>

当你打开一个新项目时,这只是blender的默认集合。如果您创建一个名为";集合2";或者for循环将为您提供另一个集合对象。

也许你的意思是

bpy.data.collections.get("Collection")

哪个将为您提供默认集合?

最新更新