ZBLOG

Python: Traceback (most recent call last): File "Text", line 17, in File "C:\Program Files\Blender Foundation\blender-3.5.0-windows x64)3.5\scripts\modules\bpy\ops.py", line 113, in_ call_ ret =_ op callself.idname py(), None, kw

这个错误是由于运行脚本时的上下文环境不正确导致的。在Blender中,许多操作需要特定的上下文环境才能正常工作。您可以尝试将以下代码添加到您的脚本中,以确保正确的上下文环境:

  1. # 设置上下文环境
  2. bpy.context.area.type = 'VIEW_3D'
  3. bpy.context.space_data.viewport_shade = 'SOLID'
  4. # 选择和激活场景对象
  5. bpy.ops.object.select_all(action='SELECT')
  6. bpy.ops.object.delete()
  7. # 添加一个Cube对象作为空间范围
  8. bpy.ops.mesh.primitive_cube_add(size=2)
  9. # 添加一个Sphere对象作为模板
  10. bpy.ops.mesh.primitive_uv_sphere_add(radius=0.1, location=(0, 0, 0))
  11. # 创建一组球体并随机分布在空间范围内
  12. for i in range(100):
  13. x = random.uniform(-1, 1)
  14. y = random.uniform(-1, 1)
  15. z = random.uniform(-1, 1)
  16. # 激活复制前面创建的球体
  17. bpy.ops.object.select_all(action='DESELECT')
  18. bpy.data.objects['Sphere'].select_set(True)
  19. bpy.context.view_layer.objects.active = bpy.data.objects['Sphere']
  20. # 复制球体并设置位置
  21. bpy.ops.object.duplicate()
  22. obj = bpy.context.active_object
  23. obj.location = (x, y, z)
  24. # 连接距离小于1厘米的球体
  25. spheres = [obj for obj in bpy.data.objects if obj.name.startswith('Sphere')]
  26. for i, sphere1 in enumerate(spheres):
  27. for j, sphere2 in enumerate(spheres[i+1:]):
  28. dist = (sphere1.location - sphere2.location).length
  29. if dist < 0.01:
  30. bpy.ops.object.select_all(action='DESELECT')
  31. sphere1.select_set(True)
  32. sphere2.select_set(True)
  33. bpy.ops.object.join()

这里我们添加了设置上下文环境的代码,并使用bpy.context.view_layer.objects.active激活之前创建的球体对象,以便正确地进行复制操作。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=4311

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?