Я пытаюсь переместить сетку в блендере так, чтобы самая низкая z-точка была z = 0. Это сделало бы самую низкую точку на плоскости Z = 0. Это сложнее, так как я сначала масштабирую модель по ее наибольшей оси. Это не единственный случай, с которым я работаю, поэтому я пытаюсь сделать эту работу для какой-либо одной модели сетки.Blender - перемещайте сетку так, чтобы наименьшая точка Z находилась на плоскости Z = 0
Вот моя текущая попытка:
mesh_obj = bpy.context.scene.objects[0]
# I first find the min and max of the mesh. The largest and smallest points on the Z-axis
max_floats = [mesh_obj.data.vertices[0].co[0], mesh_obj.data.vertices[0].co[1], mesh_obj.data.vertices[0].co[2]]
min_floats = [mesh_obj.data.vertices[0].co[0], mesh_obj.data.vertices[0].co[1], mesh_obj.data.vertices[0].co[2]]
for vertex in mesh_obj.data.vertices:
if vertex.co[0] > max_floats[0]:
max_floats[0] = vertex.co[0]
if vertex.co[0] < min_floats[0]:
min_floats[0] = vertex.co[0]
if vertex.co[1] > max_floats[1]:
max_floats[1] = vertex.co[1]
if vertex.co[1] < min_floats[1]:
min_floats[1] = vertex.co[1]
if vertex.co[2] > max_floats[2]:
max_floats[2] = vertex.co[2]
if vertex.co[2] < min_floats[2]:
min_floats[2] = vertex.co[2]
max_float = max(max_floats)
min_float = min(min_floats)
# I then get the the point with the biggest magnitude
if max_float < math.fabs(min_float):
max_float = math.fabs(min_float)
recip = 1.0/max_float
# And use that point to scale the model
# This needs to be taken into account when moving the model by its min z_point
# since that point is now smaller
mesh_obj.scale.x = recip
mesh_obj.scale.y = recip
mesh_obj.scale.z = recip
# naive attempt at moving the model so the lowest z-point = 0
mesh_obj.location.z = -(min_floats[2] * recip/2.0)
Для блендера конкретной помощи, в том числе питона сценариев в блендере вы можете использовать [blender.stackexchange.com] (http://blender.stackexchange.com) – sambler