2013-08-23 46 views
-1

有沒有辦法在不使用xform的情況下居中對象的pivot?沒有xform的Center Pivot

我真的很想嘗試找到pyMel版本或maya api,因爲xform通常比pymel或api解決方案慢10倍。

很明顯,你可以像這樣的XForm實現它:

xform(obj, cp=1)

但我試圖找到另一種方式,沒有人知道什麼?

+0

您應該能夠直接處理轉換屬性,但我更關心「10倍慢」評論的基礎。你是如何到達這個數字的?它一定是在引用一個不同的問題,因爲在這種情況下,你並沒有一個不同的解決方案來對其進行基準測試......(我猜測,無論你之前做什麼,xform命令都不是緩慢的部分,但是MEL圍繞它,在這種情況下,從Python調用xform應該會有很大幫助。) –

+0

xform觸發器撤消,它總是有點慢。但不更新撤消是有問題的,您可以暫時撤消撤消。但是這使得它成爲一個可用性問題。如果您有興趣實現自己的撤消操作,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

long bit將場景對象轉換爲mfnTransform,通常意味着從mfnDagNode獲取它,而mfnDagNode通常來自mfnSelectionlistt ...示例,位於此頁面一半的位置:http://www.akeric.com/blog/p = 1067。對於很少或沒有速度增益而言,這是很多工作。不要打擾 – theodox

+0

嗯,我已經在使用api來處理其他事情了,所以它沒有太多的工作,如果你可以通過函數來​​查看哪些時間最長,那將是很酷的 –