如何在 3Ds Max 中计算骨骼长度

How to calculate Bone Length in 3Ds Max

我正在创建一个脚本来帮助我加快装配工作流程。我正在尝试为分配给骨骼的助手创建一个自动大小调整。这样,较长的骨骼将拥有较大的助手,而较小的骨骼将拥有较小的助手。

我决定通过计算骨骼的长度来做到这一点,如下所示。

xyz1 = point3 $.pos.x $.pos.y $.pos.z --takes position from first bone
actionMan.executeAction 0 "40194" --moves to the next bone in chain
xyz2 = point3 $.pos.x $.pos.y $.pos.z --takes position from second bone

intensity = distance xyz2 xyz1 --calculate vector length

actionMan.executeAction 0 "40193" --moves to the previous bone in chain
loc = point()
loc.size = intensity*0.5 --defines the size of the helper
loc.position = $.position

有没有更简单的方法来做到这一点?因为我必须在 "for" 循环中使用它,所以当我 select 多个骨骼时,使用 actionMan 到 select 其他元素是不可能的,因为它会造成 selection 的问题。

除了骨骼的 length 属性(有什么理由不使用它吗?),你可以得到第一个子骨骼,并得到它的距离。也就是说,如果您选择了链的顶部父骨骼:

for b in #()+$ where isKindOf b BoneObj collect b.length

这也将包括最后一根骨头。或者通过测试亲子距离:

for b in #()+$ where isKindOf b BoneObj and b.children.count > 0 collect distance b b.children[1]