【问题标题】:Blender scripting resize after proportional translationBlender 脚本在按比例翻译后调整大小
【发布时间】: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)

但是圆的局部坐标和全局坐标似乎都保持不变,即使我可以肯定地看到,运行脚本,已经应用了比例平移! 错误在哪里?帮助

【问题讨论】:

    标签: python resize blender


    【解决方案1】:

    好吧,我想我明白了。事实上,您总是必须切换回对象模式以确保您的转换已被应用。所以我只是在每次转换后切换了对象模式和编辑模式,它就起作用了!

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 2011-07-11
      • 2011-09-20
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      相关资源
      最近更新 更多