2013-08-23 4 views
-1

Есть ли способ центрировать шарнир объекта без использования xform?Центр Pivot без xform

Я действительно хотел бы попытаться найти версию pyMel этого или maya api, поскольку xform обычно в 10 раз медленнее, чем решение pymel или api.

Очевидно, что вы можете достичь его с XForm как так:

xform(obj, cp=1)

Но я пытаюсь найти другой путь, кто-нибудь что-нибудь знает?

+0

Вы должны быть в состоянии возиться с атрибутами трансформирования напрямую, но мне больше любопытно основы для вашего комментария «10x slower». Как вы пришли к этому номеру? Должно быть, это связано с другой проблемой, так как в этом случае у вас нет другого решения, с которым нужно сначала ориентироваться ... (я предполагаю, что независимо от того, что вы делали раньше, команда xform не была медленная часть, но MEL, окружающая ее, была. В этом случае просто вызов xform из Python должен много помочь.) –

+0

xform triggers undo, который всегда немного медленный. Но не обновлять отмену является проблематичным, вы можете приостановить отмену на время. Но это делает его проблемой удобства использования. Api может сделать это быстрее, если вы заинтересованы в реализации своего собственного отменить. В любом случае, если вы действительно так чувствительны к производительности (преждевременная оптимизация?), Ваш единственный вариант - использовать C++ для всего. – joojaa

+0

@ MarkR.Wilkins, я читал несколько раз, что xForm всегда медленнее, чем альтернатива, а также то, что JooJaa говорит о функции функции отмены функции xForm, хотя я думаю, что мне нужно копать в api для более чистого кодирования следующим образом:) –

ответ

1

Вы хотите найти версию PyMEL? Или объектно-ориентированный способ сделать это? xform(obj, cp=1) находится в пределах PyMEL. Однако метод объектно-ориентированные, чтобы произвести тот же результат очень похож на ответ theodox, в котором вы могли бы сделать следующее:

obj.setScalePivot(obj.c.get()) 
obj.setRotatePivot(obj.c.get()) 

центрирования объектов стержня основан на центре ограничительной рамки. obj.c.get вернется к вам именно это. Просто подключите это к методам выше.

+0

Считаете ли вы, что это будет быстрее, чем xform (cp = 1)? –

+0

@ShannonHochkins Нет, скорее всего, он будет работать немного медленнее. – joojaa

+0

Не возражаете, я спрашиваю, почему @joojaa? Разве xForm не должен выполнять ту же задачу? –

1

В API он будет вызывать mfnTransform.setRotatePivotTranslation и setScalePivotTranslation с включенным «балансом». Недостаточно накладных расходов, чтобы гарантировать обходное решение - трудно понять, как это может быть узким местом.

+0

Я не уверен, как вы это реализуете, сможете ли вы продемонстрировать это с помощью своего кода? –

+0

длинный бит превращает объект сцены в mfnTransform, что обычно означает получение его из mfnDagNode, который, в свою очередь, обычно поступает из примера mfnSelectionlistt ... наполовину вниз по этой странице: http://www.akeric.com/blog /? р = 1 067. Это очень большая работа, чтобы не увеличивать скорость. не надоело – theodox

+0

Ну, я уже использую api для других вещей, поэтому его не так много работает. Было бы здорово, если бы вы могли использовать время, чтобы увидеть, какой из них занимает самый длинный. –

Смежные вопросы