我正在开发一个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 组坐标,一个用于每个点)。
谢谢。