setToolTo "Move";
float $piv[0] = `manipMoveContext -q -p "Move"`;
這一招主要是用來取得 被選取的元件 (selected component) 的中心位子(pivot position).
譬如說我們想縮放控制器,但又不希望改到scale值(因為已經設定好 constraint/driven key 的連結)。那一般來說都會用 cv 模式去把那些 cv 點縮放。但如果要一次處理很多個控制器的時候(而且要是同一個縮放值),就需要知道每個控制器cv的中心位子。這時候就可以用類似以下的程式來快速達到這件事。
mel 範例:
string $tmp[] = `ls -sl`;
for($ctl in $tmp)
{
select -r ($ctl+".cv[*]");
setToolTo "Move";
float $piv[0] = `manipMoveContext -q -p "Move"`;
scale -r -p $piv[0] $piv[1] $piv[2] 0.5 0.5 0.5;
}
select -r $tmp;
pymel 範例 :
import pymel.core as pm
sel = pm.ls(sl=1)
for ctl in sel:
pm.select(str(ctl)+'.cv[*]',r=1)
pm.setToolTo('Move')
pivotPos = pm.manipMoveContext('Move',q=1,p=1)
pm.scale([0.5,0.5,0.5],r=1,p=pivotPos)
pm.select(sel,r=1)
那為何不直接用物件的pivot (xform -q -ws -rp) 來當 scale 的 pivot 呢 ? 原因很簡單,就是因為控制器的 pivot很多時候都不是在中心位子!
沒有留言:
張貼留言