0

我正在开发一个PyMEL 脚本,该脚本允许用户多次复制选定的对象,使用 CV 曲线及其点坐标将每个副本转换和旋转到空间中的某个点。为了实现这一点,我使用每个 CV(控制顶点)的相邻 2 个点来确定对象的旋转。

我设法检索了曲线 CV 的坐标

#Add all points of the curve to the cvDict dictionary
int=0
cvDict={}
while int<selSize:
    pointName='point%s' % int
    coords= pointPosition ('%s.cv[%s]' % (obj,int), w=1)

    #Setup the key for the current point
    cvDict[pointName]={}

    #add coords to x,y,z subkeys to dict
    cvDict[pointName]['x']= coords[0]
    cvDict[pointName]['y']= coords[1]
    cvDict[pointName]['z']= coords[2]

    int += 1

现在我遇到的问题是弄清楚如何获得每个 CV 的角度。我偶然发现了这个angleBetween()功能:

http://download.autodesk.com/us/maya/2010help/CommandsPython/angleBetween.html

理论上,这应该是我的解决方案,因为我可以找到每个曲线 CV 的“中间向量”(不确定这是否是数学术语)(使用相邻 CV 的坐标来找到第四个点)并使用上面的提到的函数来确定我必须使用参考向量(例如在 z 轴上)旋转对象的程度。

至少在理论上 - 问题是该函数只为每个向量使用一组坐标,我完全不知道如何将我的点坐标转换为该格式(因为我总是有至少 2 组坐标,一个用于每个点)。

谢谢。

4

2 回答 2

0

如果您要跳过数学,也许您应该只创建一个定位器,沿曲线对其进行路径动画处理,然后对结果进行采样。这将允许您沿曲线获得完全连续的方向。您上面概述的中点约束方法仅限于每个曲线段 1 个有效样本 - 如果您想要两个 cv 之间的 1/4 或 3/4 的方式,那么您的方向将被关闭。此外,您不必重新发明所有用于决定辅助旋转轴、使用时髦参数化读取曲线等的不同选项。

于 2013-08-11T19:30:17.267 回答
0

如果你想走很长的路而不是抓住曲线的世界变换,一定要使用 pymel 的数据类型模块。它具有 python 的本机数学模块所做的一切,以及一些特定于 Maya 的其他模块。此外,您可以在此处找到基于 CV 执行此操作所需的数学。

希望这能让你朝着正确的方向前进。

于 2013-08-11T16:51:43.380 回答