2013-08-11 2 views
0

Я работаю над PyMEL скриптом, который позволяет пользователю дублировать выбранный объект несколько раз, используя кривую CV и ее координаты точек для преобразования & вращать каждую копию в определенную точку в пространстве. Для этого Im использует смежные 2 точки каждого CV (контрольная вершина) для определения поворота объекта.Преобразование 2 точечных коордов в векторные коорды для angleBetween()?

мне удалось получить координаты резюме кривой в

#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 

Теперь проблема, у меня есть выяснить, как получить угол для каждого резюме. я наткнулся на angleBetween() функции:

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

В теории, это должно быть мое решение, так как я мог бы найти «средний вектор» (не уверен, если это математический термин) каждого из резюме кривой в (используя координаты смежных CVs, чтобы найти четвертую точку), и используйте указанную выше функцию, чтобы определить, сколько мне придется вращать объект, используя опорный вектор, например, на оси z.

По крайней мере теоретически - проблема в том, что функция принимает только один набор коордов для каждого вектора, и у меня нет абсолютно никакой идеи, как преобразовать мои точечные координаты в этот формат (так как у меня всегда есть как минимум 2 набора координат, по одному для каждой точки).

Спасибо.

+0

Это, кажется, математический вопрос, но он очень неясен для всех, кто не знает PyMEL. Что такое CV? Кажется, вы используете синонимы «CV» и «point» - они одинаковы? Что это связано с дублированием чего-то? Вы пытаетесь определить, как вращать что-то, двигаясь вдоль кривой? – Beta

+0

Ах, извините. На самом деле это вопрос Майи. CV относится к управляющим вершинам кривой, которая запрашивается (что, по существу, является точкой в ​​пространстве). Im, используя координаты каждого cv, чтобы преобразовать дублированный объект в этот cv - однако я также хочу повернуть его так, чтобы он оказался в правильном направлении. Однако это не анимируется - объект будет дублироваться один раз за cv, а также перемещаться и поворачиваться в соответствии с этим cv. Никакая анимация не происходит и не предназначена. Я отредактирую сообщение, хотя, чтобы сделать его более ясным. – gh057

+0

Хорошо, теперь как вы хотите представить поворот? Я имею в виду, хотите ли вы угол и ось, или набор (явно определенных) углов Эйлера, или что? – Beta

ответ

0

Если вы хотите пройти долгий путь и не захватить мировые преобразования кривой, обязательно используйте модуль datatypes pymel. В нем есть все, что делает собственный математический модуль python, и несколько других, которые являются специфическими для Maya. Также вы можете найти математику, которую вы должны будете сделать на основе резюме, here.

Надеюсь, что это поможет вам в правильном направлении.

+0

Ребята, я просто понял, что могу использовать среднюю точку из двух точек, смежных с CV im, которые хотят повернуть объект, чтобы создать локатор в этой позиции, и прицелиться, чтобы ограничить этот объект локатором. который делает именно то, что я хочу. Спасибо за предоставленные ссылки tho, они были полезны по-своему :) Спасибо всем за ваше терпение! проблема решена! : D – gh057

0

Если вы собираетесь пропустить математику, возможно, вам нужно просто создать локатор, анимировать его вдоль кривой, а затем пробовать результат. Это позволило бы получить полностью непрерывные ориентации вдоль кривой. Выбранный выше метод ограничения средней точки ограничен одним действительным образцом на сегмент кривой - если вы хотите 1/4 пути или 3/4 пути между двумя cv, ваша ориентация будет отключена. Кроме того, вам не нужно изобретать все ману различные варианты решения на вторичной оси вращения, кривые чтения с фанковой параметризацией и т. Д.