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 の座標を使用して 4 番目の点を見つける) を見つけ、上記を使用できるためです。たとえば、z軸上で参照ベクトルを使用してオブジェクトをどれだけ回転させる必要があるかを判断するための前述の関数。

少なくとも理論的には、問題は、関数が各ベクトルに対して 1 セットの座標しかとらず、ポイント座標をその形式に変換する方法がまったくわからないことです (ポイントごとに 1 つずつ、少なくとも 2 セットの座標を常に持っているため) )。

ありがとう。

4

2 に答える 2

0

遠くまで行きたいが、曲線のワールド変換を取得したくない場合は、間違いなく pymel のデータ型モジュールを使用してください。これには、Python のネイティブ数学モジュールが行うすべての機能と、Maya 固有のその他の機能がいくつか含まれています。また、CV に基づいてこれを行うために必要な計算は、ここにあります。

それがあなたを正しい方向に導くことを願っています。

于 2013-08-11T16:51:43.380 に答える