Разместите объекты случайным образом в пределах диапазона в Blender Python - PullRequest
0 голосов
/ 27 марта 2020

У меня есть 10 объектов, я хотел бы разместить эти объекты случайным образом в пределах диапазона x, y, z (с минимальным и максимальным). Примерно так:

import bpy
import bpy_extras
import random
import math

bpy.data.objects["Sasso_1"].select_set(True)
bpy.ops.rigidbody.objects_add(type='ACTIVE')
bpy.context.object.rigid_body.mass = 0.25

for obj in bpy.data.collections['Sassi'].all_objects:
    obj.select_set(True)
    bpy.ops.rigidbody.object_settings_copy()

bpy.ops.transform.translate(value=random.uniform(12,27), orient_axis='X')
bpy.ops.transform.translate(value=random.uniform(-15,15), orient_axis='Y')
bpy.ops.transform.translate(value=random.uniform(13,28), orient_axis='Z')

for obj in bpy.data.collections['Sassi'].all_objects:
    bpy.ops.transform.rotate(value=random.uniform(0,360), orient_axis='X')
    bpy.ops.transform.rotate(value=random.uniform(0,360), orient_axis='Y')

В моем скрипте объекты "сасси" вращаются и перемещаются случайным образом, но не в нужном мне диапазоне. В результате объекты непредсказуемы. Tnx за внимание. :)

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Я решил проблему с помощью функции рандомизации trasform. это код для этого:

bpy.ops.object.randomize_transform(random_seed = random.randint(0,100), loc=(6, 6, 6), scale=(1, 1, 1))
0 голосов
/ 29 марта 2020

Оператор перевода выполняет относительное движение: https://docs.blender.org/api/blender_python_api_2_67_1/bpy.ops.transform.html

В вашем случае вы хотите установить абсолютную позицию. Как это сделать, объясняется здесь: https://blender.stackexchange.com/a/89581

bpy.data.objects["Cube"].location.x = 3.0
bpy.data.objects["Cube"].location.y = 2.0
bpy.data.objects["Cube"].location.z = 1.0
bpy.context.scene.update()
...