如何使用 pymxs 获得 3ds max 中的最小 XYZ 值?
Posted
技术标签:
【中文标题】如何使用 pymxs 获得 3ds max 中的最小 XYZ 值?【英文标题】:How can I get the min XYZ values in 3ds max using pymxs? 【发布时间】:2021-10-29 10:09:48 【问题描述】:我正在编写一个python脚本来获取所选对象的西南顶点,并获取其坐标X、Y和Z。
从逻辑上讲,西南点将匹配具有最小 X、Y 和 Z 的顶点。如何在 python 中访问这些值?
到目前为止,我已经能够获得对象的最小 XYZ 值,但它导致的边界框值不是预期的结果。相反,我需要顶点值。
有人可以指导我吗?
from pymxs import runtime as rt
aSelect = rt.selection[0]
minX = aSelect.min.x
minY = aSelect.min.y
minZ = aSelect.min.z
【问题讨论】:
【参考方案1】:非常感谢剑客,它帮助我了解了如何访问顶点信息。
是的,你说得对,“西南”不一定包括 Z,但隐含地我需要具有最低值的 Z,并且对于我的目的,这个最小 Z 应该等于 0。
无论如何,现在我可以玩了,它完全符合我的需求,使用这些值将轴心位置移动到我对象的西南点:
from pymxs import runtime as rt
from operator import itemgetter
anchor = rt.point3(0,0,0)
if len(rt.selection) == 0:
print('no object selected! please select one object')
elif len(rt.selection) > 1:
print('too much objects selected! please select one object')
else:
aSelect = rt.selection[0]
mesh = rt.convertToMesh (aSelect)
vertices = list(mesh.verts)
positions = []
for i in range(len(vertices)):
positions.append(vertices[i].pos)
positions = sorted(positions, key=itemgetter(2,1,0))
minX = positions[0][0]
minY = positions[0][1]
minZ = positions[0][2]
anchor = rt.point3(minX,minY,minZ)
aSelect.pivot = anchor
print('anchor set @ minX: , minY: , minZ: '.format(minX,minY,minZ))
【讨论】:
【参考方案2】:'Southwestern' 点有点容易解释(例如,我没有看到名称中的 Z),为了争论,让我们选择最有可能的两个 - 一个得到最远离的顶点最大对象,以及获得x+y+x坐标总数最小的顶点:
from pymxs import runtime as rt
obj = rt.selection[0]
mesh = rt.snapshotAsMesh(obj)
minDiagonalVert = max(list(mesh.verts), key=lambda vert: rt.distance(vert.pos, obj.max))
minTotalVert = min(list(mesh.verts), key=lambda vert: vert.pos.x + vert.pos.y + vert.pos.z)
rt.delete(mesh)
很明显,这仅适用于某种网格,但在这种情况下,您可以自行设置要匹配的标准。
【讨论】:
以上是关于如何使用 pymxs 获得 3ds max 中的最小 XYZ 值?的主要内容,如果未能解决你的问题,请参考以下文章
如何将网游<天龙八部>中的人物和珍兽模型导入至3DS Max并进行编辑?
3ds Max 中的导航控件SteeringWheels入门介绍