【发布时间】:2020-10-31 01:09:57
【问题描述】:
使用 python 处理 Blender,我目前正在尝试按比例平移圆的两个顶点,然后将对象调整为其原始边界和中心。首先,我选择我想要的顶点,然后像这样进行比例平移:
bpy.context.scene.tool_settings.use_proportional_edit = True
bpy.ops.transform.translate(value=(0, smooth, 0), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(False, True, False), mirror=True, use_proportional_edit=True, proportional_edit_falloff='SMOOTH', proportional_size=2.71427, use_proportional_connected=True, use_proportional_projected=False, release_confirm=True)
bpy.context.scene.tool_settings.use_proportional_edit = False
normalize()
然后我调用我的手工函数 normalize 来调整我的对象的大小和中心:
def normalize():
obj = bpy.context.active_object
minX = 0
minY = 0
maxX = 0
maxY = 0
for v in obj.data.vertices:
vx = (obj.matrix_world @ v.co)[0]
print(str(v.co[0])+" "+str(vx))
if vx < minX:
minX = v.co[0]
if vx > maxX:
maxX = v.co[0]
vy = (obj.matrix_world @ v.co)[1]
print(str(v.co[1])+" "+str(vy))
if vy < minY:
minY = v.co[1]
if vy > maxY:
maxY = v.co[1]
scaleX = 2 / (maxX - minX)
scaleY = 2 / (maxY - minY)
# print(str(maxX)+" "+str(minX))
# print(str(maxY)+" "+str(minY))
# print(str(scaleX)+" "+str(scaleY))
bpy.ops.object.mode_set(mode = 'EDIT')
bpy.context.tool_settings.mesh_select_mode = (True, False, False)
bpy.ops.mesh.select_all(action = 'SELECT')
bpy.ops.transform.resize(value=(scaleX, scaleY, 1), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, True, False), mirror=True, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=2.71427, use_proportional_connected=True, use_proportional_projected=False, release_confirm=True)
maxX = 0
maxY = 0
for v in obj.data.vertices:
vx = (obj.matrix_world @ v.co)[0]
if vx > maxX:
maxX = v.co[0]
vy = (obj.matrix_world @ v.co)[1]
if vy > maxY:
maxY = v.co[1]
dx = 1 - maxX
dy = 1 - maxY
bpy.ops.transform.translate(value=(dx, dy, 0), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, True, False), mirror=True, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=2.71427, use_proportional_connected=True, use_proportional_projected=False, release_confirm=True)
但是圆的局部坐标和全局坐标似乎都保持不变,即使我可以肯定地看到,运行脚本,已经应用了比例平移! 错误在哪里?帮助
【问题讨论】: