You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pymxs获取3ds Max中对象顶点的最小XYZ值?

3ds Max pymxs 获取网格对象最小坐标顶点方法

你之前获取的aSelect.min.x/y/z是3ds Max对象轴对齐包围盒的计算边界值,不属于真实存在的网格顶点,所以不符合需求。要获取真实顶点的对应数值,需要遍历对象的所有顶点后筛选,具体实现如下:

from pymxs import runtime as rt

# 校验选中对象存在
if rt.selection.count > 0:
    aSelect = rt.selection[0]
    # 生成临时网格副本读取顶点,不会修改原对象属性
    mesh_obj = rt.snapshotAsMesh(aSelect)
    # 读取所有顶点的世界坐标,需要局部坐标可加参数inWorldSpace=False
    all_vertices = [rt.getVert(mesh_obj, i, asInt=False) for i in range(1, mesh_obj.numverts + 1)]
    
    # 分别获取所有顶点各维度的最小值
    min_x_verts = min(v.x for v in all_vertices)
    min_y_verts = min(v.y for v in all_vertices)
    min_z_verts = min(v.z for v in all_vertices)
    # 匹配X/Y/Z同时为最小值的顶点
    target_vertices = [v for v in all_vertices if v.x == min_x_verts and v.y == min_y_verts and v.z == min_z_verts]
    
    if target_vertices:
        target_point = target_vertices[0]
        print(f"西南侧顶点坐标:X={target_point.x}, Y={target_point.y}, Z={target_point.z}")
    else:
        # 不存在三值同时最小的顶点时,按X→Y→Z优先级排序取首位
        all_vertices.sort(key=lambda p: (p.x, p.y, p.z))
        target_point = all_vertices[0]
        print(f"无三值同时最小顶点,按优先级取首项:X={target_point.x}, Y={target_point.y}, Z={target_point.z}")
    
    # 释放临时网格避免内存泄露
    rt.delete(mesh_obj)
else:
    print("未选中任何对象")

补充说明

  • 如果需要获取局部坐标,把rt.getVert(mesh_obj, i, asInt=False)修改为rt.getVert(mesh_obj, i, asInt=False, inWorldSpace=False)即可
  • 如果你需要的是各维度单独的最小顶点值,直接取min_x_verts/min_y_verts/min_z_verts即可

内容的提问来源于stack exchange,提问作者lionel_here

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:09:02