繁体   English   中英

Blender 脚本在比例转换后调整大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM