[英]Blender scripting resize after proportional translation
使用 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)
但是圆的局部坐标和全局坐标似乎都没有受到影响,即使我可以肯定地看到,运行脚本,比例转换已被应用! 错误在哪里? 帮助
好吧,我想我想通了。 事实是,您始终必须切换回对象模式以确保已应用转换。 所以我在每次转换后都切换了对象模式和编辑模式,它起作用了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.