【问题标题】:Generate a cube in Blender Python在 Blender Python 中生成一个立方体
【发布时间】:2022-01-08 20:26:30
【问题描述】:

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

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

导入 bpy 随机导入 名称="新对象" 顶点=[] 边=[] 面孔=[]

床 = 300 #in mm print("床 = " + str(床))

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

打印("xmin" + str(xmin)) 打印("xmax" + str(xmax)) 打印(“ymin” + str(ymin)) 打印(“ymax” + str(ymax)) 打印(“zmin” + str(zmin)) print("zmax" + str(zmax))

生成坐标

左上角

a1=random.randint(xmin,0) a2 = random.randint(ymin,0) a3 = random.randint(0,zmax)

右上角

b1 = random.randint(xmin,0) b2 = random.randint(0,ymax) b3 = random.randint(0,zmax)

右上角

c1 = random.randint(0,xmax) c2 = random.randint(0,ymax) c3 = random.randint(0,zmax)

左上角

d1 = random.randint(0,xmax) d2 = random.randint(ymin,0) d3 = random.randint(0,zmax)

左下角

e1 = random.randint(xmin,0) e2 = random.randint(ymin,0) e3 = random.randint(zmin,0)

右下角

f1 = random.randint(xmin,0) f2 = random.randint(0,ymax) f3 = random.randint(zmin,0)

右下角

g1 = random.randint(0,xmax) g2 = random.randint(0,ymax) g3 = random.randint(zmin,0) xmax

左前下方

h1 = random.randint(0,xmax) h2 = random.randint(ymin,0) h3 = random.randint(zmin,0)

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

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

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

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

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

打印("\n") 打印(“f 1 =” + str(f1)) 打印(“f 2 =” + str(f2)) 打印("f3 = " + str(f3))

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

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

#8 个顶点 verts.append([# index 0 a1, #x a2, #y a3 #z ]) verts.append([# 索引 1 b1, #x b2, #y b3 #z ]) verts.append([# 索引 2 c1, #x c2, #y c3 #z ]) verts.append([# 索引 3 d1, # d2, #y d3 #z ]) verts.append([# 索引 4 e1, #x e2, #y e3 #z ]) verts.append([# index 5 f1, #x f2, #y f3 #z ]) verts.append([# 索引 6 g1, #x g2, #y g3 #z ]) verts.append([# 索引 7 h1, #x h2, #y h3 #z ])

#12 边 #最佳 edge.append([0,1]) edge.append([1,2]) edge.append([2,3]) edge.append([3,0]) #底部 edge.append([4,5]) edge.append([5,6]) edge.append([6,7]) edge.append([7,4]) #连接 edge.append([0,4]) edge.append([1,5]) edge.append([2,6]) edge.append([3,7])

打印(垂直[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,4,7])

print"faces[1] = " + str(faces[1])) # 不起作用

打印(面孔[1])

mesh=bpy.data.meshes.new(名称) 打印(“网格=”+ str(网格)) obj=bpy.data.objects.new(名称,网格) 打印(“obj =” + str(obj)) col=bpy.data.collections.get("收藏") 打印(“col =” + str(col)) col.objects.link(obj) bpy.context.view_layer.objects.active=obj #mesh.from_pydata(verts,edges,faces)mod_skin = obj.modifiers.new('Skin', 'SKIN')

我得到的错误信息是

Traceback(最近一次调用最后一次): 文件“/dem.py”,第 188 行,在 AttributeError:“NoneType”对象没有属性“对象” 错误:Python脚本失败,在系统控制台查看消息

【问题讨论】:

  • 我假设bpy.data.collections.get("Collections") 返回None。尝试查看他们的文档。
  • 是的,它确实返回无。谢谢你看这个。它早些时候工作。我会看看文档。谢谢

标签: python blender


【解决方案1】:

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 的默认集合。如果您创建一个名为“Collection 2”的新集合,for 循环将为您提供另一个集合对象。

也许你的意思是

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

哪个会给你默认集合?

【讨论】:

  • mesh=bpy.data.meshes.new(name) print("mesh = " + str(mesh)) obj=bpy.data.objects.new(name,mesh) print("obj = " + str(obj)) col=bpy.data.collections.get("Collection") print("col = " + str(col)) col.objects.link(obj) bpy.context.view_layer.objects。 active=obj #mesh.from_pydata(verts,edges,faces)mod_skin = obj.modifiers.new('Skin', 'SKIN') 是的,将 Collections 更改为Collection 有效。但它似乎没有在 3d 视图中绘制任何东西,或者它太小了。
  • 没有错误,但它没有创建正确大小的立方体,因此我可以在 3D 视口中看到它,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
相关资源
最近更新 更多