如何查询关节sao(次轴世界方向)?玛雅Python

2024-10-03 06:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想查询一个关节的sao,以便将其分配给另一个关节。 在本例中,我通过.jot得到了LowArmoj,我正试图用sao做一些类似的事情。在

mc.joint ('L_Hand_JNT', e=1, oj=mc.getAttr ('L_LowArm_JNT.jot'), sao='yup', zso=1)

任何帮助或建议都会很棒的,谢谢!在


Tags: mc事情saohandyup关节getattr本例
2条回答

我不认为关节具有“sao”属性:该标志允许您在对齐关节时指定次轴,因为单个方向无法为maya提供足够的信息来布局关节:就像目标约束一样,您需要告诉maya如何为给定目标解算,因为存在无限数量的有效对象解决。在

但是,可以通过解析关节的世界空间矩阵或使用定位器来获取关节的每个“轴”。在

如果使用

worldMat =  cmds.xform(q=True, m=True, ws=True)

然后关节的X轴将指向世界向量worldMat[0:3],局部Y将是worldMat[4:7],局部z将是worldMat[8:11]。在

如果要以图形方式执行此操作,请创建一个定位器,将其作为沿着要检查的轴的关节1单位的父对象,然后获取其世界位置-关节的世界位置。在

我不认为你可以恢复传递给sao标志的原始参数-而关节可能仍然指向那样的方向,它可能不会。在

当然,您可以始终将原始sao参数保存在一个自定义属性中,以便以后检索,如果您知道您还需要它的话。在

我已经想出了一种方法来获得我想要的结果,那就是创建一个shadingNode,它有一个以用于特定关节(在本例中是肩部)的“定向关节”命令命名的枚举。在

if mc.objExists ('L_ShoulderOrient_NODE'): mc.delete ('L_ShoulderOrient_NODE')
mc.shadingNode ('transform', au=1, n='L_ShoulderOrient_NODE')
mc.addAttr ('L_ShoulderOrient_NODE', ln='jointOrient', at='enum', en='yup', k=1)

我在“创建关节”阶段添加了上述内容,之后使用了以下脚本:

^{pr2}$

WOB3是基于主方向和辅助方向的方向选项向上或向下,WOB4是从“定向关节”菜单中选择的向上或向下。 这个mc.ls公司('L'u Shoulder_JNT',sl=1)确保此脚本仅在选择和更改此特定关节时有效。在

然后我可以运行这个脚本:

JOX = mc.attributeQuery( 'jointOrient', n='L_ShoulderOrient_NODE', le=1 )
mc.joint ('L_Hand_JNT', e=1, oj=mc.getAttr ('L_LowArm_JNT.jot'), sao=JOX[0], zso=1)

它将所有元素集合在一起,根据用户随机选择的关节,为新创建的关节提供上/下向量。在

现在只剩下在进程结束时删除节点。 如果有人想出另一种方法来获得一个预先存在的关节的上方向向量,并按上述方式应用,请在下面告诉我!在

非常感谢, 亚当

相关问题 更多 >