2012年1月28日土曜日

MAXScript ルートボーンの移動アニメを変更してみる(2)

あるモデルのルートボーンの移動アニメを無効にしたい
/*
 選択したボーンの全フレームの座標変更
 pos: セットする座標

    使用方法
 トラックビュー選択ダイアログが表示されるので
 変更したいボーンの"Transform : Position/Rotation/Scale"
 を選択してOKボタンを押す
 */
fn SetSelectBonePosAllKey pos =
(
 -- ダイアログ表示オプション
 dlgOpt = 0
 dlgOpt = bit.set dlgOpt 1 true --アニメトラックのみ
-- dlgOpt = bit.set dlgOpt 3 true   --選択したノードのみ

 -- ダイアログを表示
 tvp = trackview.pickTrackDlg options:dlgOpt

 if tvp == undefined then return -1 -- 未選択
 
 format "tvp.name %\n" tvp.name -- 選択した項目の名前
 if "Transform" != tvp.name then return 1
 
 c0 = tvp.client -- 選択項目の親のMAXWrapper
 if c0 != undefined then
 (
  cname = getClassName c0
  format "c0.className %\n" cname
  if cname != "Bone" then return 2
 )
 
 -- 選択項目のサブアニメを取得
 subAni = tvp.anim
 if subAni == undefined  then return 3

 -- サブアニメ数
 format "subAni.numSubs %\n" subAni.numSubs
 ret = 4
 for i = 1 to subAni.numSubs do
 (
  -- サブアニメの名前
  n =  getSubAnimName subAni i
  format "subAnim name %\n" n

  -- Positionのみ変更
  if 0 != stricmp n "position" then continue
   
  -- コントローラーの取得
  c = subAni[i].Controller
  if c == undefined  then continue

  -- コントローラーからキーの配列を取得
  keys = c.keys
  -- キーフレーム数
  format "key_array count %\n" keys.count
    
  -- 全キーフレームの座標を変更
  for j = 1 to keys.count do
  (
   keys[j].value = pos
  )
  ret = 0
 )
 return ret
)

gPos = [0, 0, 0] -- セットする座標
SetSelectBonePosAllKey gPos

0 件のコメント:

コメントを投稿