コントローラ キー関数

> MAXWrapper > コントローラ > キー 関数

 

   

アニメーション コントローラ - クイック ナビゲーション

   

addNewKey <controller> <time> [#select] 	 

指定された時間のコントローラ トラックに新規キーを追加します。新規キーの値は、指定された時間に補間されたコントローラ値です。 #select オプション引数が指定されると、新規キーも選択されます。新規キーの値は、その時間に補間されたコントローラ値です。 addNewKey() は、指定された時間に既にキーが存在する場合には、キーを追加しません。この場合の戻り値は、指定された時間に位置するキーです。

注:コントローラが複合コントローラ( Position_XYZ コントローラなど)の場合は、 OK の値が返されます。 addNewKey はサブコントローラごとにキーを作成するため、単一のキー値を返すことはできません。

この関数は、そのキーを表す MAXKey 値を返すので、その値をさまざまなプロパティに設定できます。詳細は、「MAXKey 値」を参照してください。

   

deleteKeys <controller> [#allKeys | #selection]   

追加指定した記号引数により、コントローラからキーを削除します。

#allKeys (既定値): コントローラ内のすべてのキーを削除します。

#selection : 現在選択されているキーを削除します。

   

deleteKey <controller> <index> 

インデックスで指定されたキーを削除します。キー インデックスは、基数 1 です。

   

selectKeys <controller> [ <interval> | <time> ] 

トラック ビュー内の指定されたキーを選択します。間隔が指定されていれば、その間隔内のすべてのキーが選択されます。時間が 1 つ指定されていれば、その時間上のキーが選択されます。時間も間隔も指定されていなければ、すべてのキーが選択されます。

   

deselectKeys <controller> [ <interval> | <time> ] 

指定したキーの選択を解除します。引数については、 selectKeys() の場合と同様です。

   

selectKey <controller> <index_integer> 

インデックスで指定されたキーを選択します。キー インデックスは、基数 1 です。

   

isKeySelected <controller> <index_integer> 

インデックスで指定されたキーが選択されている場合は true を、それ以外の場合は false を返します。キー インデックスは、基数 1 です。

   

deselectKey <controller> <index_integer> 

インデックスで指定されたキーの選択を解除します。キー インデックスは、基数 1 です。

   

moveKeys <controller> <time> [#selection] 

指定された時間だけ指定したキーを移動します。 #selection が指定されている場合はそのときの選択を移動し、指定されていない場合はすべてのキーを移動します。 moveKeys 関数は、トラックのプロパティ、 .controller および .track でのみ機能します。この関数は、キーの仮想配列上では定義されません。

moveKeys $box01.pos.controller 5
moveKeys $box01.pos.track 5

   

moveKey <controller> <index_integer> <time> 

指定された時間だけインデックスで指定されたキーを移動します。

   

numKeys <controller> 

コントローラ内のキーの数を返します。キーフレーム処理をサポートしていないコントローラ上で呼び出した場合は、-1 を返します。

   

getKey <controller> <index_integer> 

インデックス付きキーを MAXKey インスタンスとして返します。MAXKey クラスについては、「コントローラ キー関数」を参照してください。

   

getKeyTime <controller> <index_integer> 

インデックスで指定されたキーの時間を返します。

   

getKeyIndex <controller> <time> 

指定された時間のキーのインデックスを返します。

   

numSelKeys <controller> 

トラック ビュー内でそのとき選択されているキーの数を返します。

   

sortKeys <controller> 

キーを、その時間によりソートし直します。MAXKey 演算がうまくいかない場合があるため、この関数は正しく整列キーに対して呼び出してください。MAXKey のプロパティについては、「コントローラ キーとキー プロパティ」を参照してください。

   

createLockKey <controller> <time> <rot_or_pos_integer> 

このメソッドは、指定された時間にロックするキーを作成するために呼び出されます。このキーは、前のキーを確認して指定された時間で、前のキー値と同じ値を使って新規キーを作成します。また、前のキーと新規キーの値が同じになるように、キーのパラメータも調整します。たとえば、TCB コントローラでは、前のキーと新規キーの連続性は 0 に設定されます。ベジェ コントローラでは、前のキーのアウト接線タイプは線形に、新規キーのイン接線タイプは線形に設定されます。

このメソッドに渡されるコントローラが変換レベル コントローラである場合、 <rot_or_pos_integer> に、変換コントローラ内または回転(またはロール角度)サブコントローラ内のどちらでキーを作成するかを指定します。 rot_or_pos_integer が 0 の場合、キーは位置コントローラ内で作成されます。それ以外の値の場合、キーは回転 (またはロール角度) コントローラ内で作成されます。

このメソッドに渡されるコントローラが変換レベル コントローラでない場合、 <rot_or_pos_integer> 値は使用されません。

キーの作成に成功した場合は true を、それ以外の場合は false を返します。

次のスクリプトは、上記メソッドの例を示しています。

-- controller test bed 2
b=box height:10
at time 5 animate on b.height=50
at time 10 animate on b.height=100
bhc=b.height.controller
bhk=bhc.keys
addnewkey bhc 7
addnewkey bhc 9
for k in bhk do format "%:%\n" k.time k.value
selectKeys bhc (interval 7 9)
deleteKeys bhc #selection
bhk
addnewkey bhc 7
addnewkey bhc 9
selectKeys bhc (interval 7 9)
deleteKeys bhc #selection #slide
bhk
addnewkey bhc 7
addnewkey bhc 9
selectKeys bhc (interval 7 9)
deleteKeys bhc #selection #slide #rightToLeft
bhk
addnewkey bhc 8
i=getKeyIndex bhc 8
selectKey bhc i
moveKey bhc i 10
bhk
getKeyTime bhc 4
b.width.controller=noise_float()
numkeys b.width.controller

   

appendKey <key_array> <max_key> 

所定のキーを、指定されたキー配列のキーの元の時間のところに追加します。

例:

--Create a Box and a Sphere
source_obj = box()
target_obj = sphere()
-- Animate the position of the Box on frames 50 and 100.
with animate on
(
at time 50 source_obj.pos.controller.x_position = 100
at time 100 source_obj.pos.controller.x_position = 200
)
--Animate the position of the Sphere on frames 40 and 80
with animate on
(
at time 40 target_obj.pos.controller.x_position = 50
at time 80 target_obj.pos.controller.x_position = 60
)
--Print keys of both controllers
format "Source Keys X Pos: %\n"source_obj.pos.x_position.controller.keys
format "Target Keys X Pos: %\n"target_obj.pos.x_position.controller.keys
--Get the 2nd key from the X axis controller of the position transformation
source_key = source_obj.pos.x_position.controller.keys[2]
--Get the X axis position controller keys array of the target object
target_keys = target_obj.pos.x_position.controller.keys
--Assign the key from the source to the target controller
appendKey target_keys source_key
--The Sphere now has a 3rd key on frame 50 with the value 100
format "Target Keys After appendKey: %\n" target_obj.pos.x_position.controller.keys

出力

$Box:Box008 @ [0.000000,0.000000,0.000000]
$Sphere:Sphere001 @ [0.000000,0.000000,0.000000]
200
60
Source Keys X Pos: #keys(0f, 50f, 100f)
OK
Target Keys X Pos: #keys(0f, 40f, 80f)
OK
#Bezier Float key(2 @ 50f)
#keys(0f, 40f, 80f)
#Bezier Float key(3 @ 50f)
Target Keys After appendKey: #keys(0f, 40f, 50f, 80f)
OK

   

assignKey <key_array> <max_key> <index> 

<index> で指定されたキーをターゲット キー配列から削除し、ソース キーをターゲット キー配列のソース キーの時間のところに挿入します。

注:

最初にソース キーが <index> で指定されたターゲット キーを上書きし、その結果出来上がった配列が時間でソートされます。結果は上記の説明と同じです。

--Create a Box and a Sphere
source_obj = box()
target_obj = sphere()
-- Animate the position of the Box on frames 50 and 100.
with animate on
(
at time 50 source_obj.pos.controller.x_position = 100
at time 100 source_obj.pos.controller.x_position = 200
)
--Animate the position of the Sphere on frames 10 and 20
with animate on
(
at time 10 target_obj.pos.controller.x_position = 50
at time 20 target_obj.pos.controller.x_position = 60
)
--Print keys of both controllers
format"Source Keys X Pos: %\n" source_obj.pos.x_position.controller.keys
format"Target Keys X Pos: %\n" target_obj.pos.x_position.controller.keys
--Get the 2nd key from the X axis controller of the position transformation
source_key = source_obj.pos.x_position.controller.keys[2]
--Get the X axis position controller keys array of the target object
target_keys = target_obj.pos.x_position.controller.keys
--Assign the key from the source to the target controller,
--delete original sourcekey 3
assignKey target_keys source_key 3
--The Sphere now has a 3rd key on frame 50 with the value 100,
--original 3rd key on frame 20 has been deleted:
format "Target Keys After assignKey: %\n" target_obj.pos.x_position.controller.keys

リスナー出力

$Box:Box009 @ [0.000000,0.000000,0.000000]
$Sphere:Sphere002 @ [0.000000,0.000000,0.000000]
200
60
Source Keys X Pos: #keys(0f, 50f, 100f)
OK
Target Keys X Pos: #keys(0f, 10f, 20f)
OK
#Bezier Float key(2 @ 50f)
#keys(0f, 10f, 20f)
#Bezier Float key(3 @ 50f)
Target Keys After assignKey: #keys(0f, 10f, 50f)
OK
注:

appendKey assignKey は、キーフレームを直接サポートするコントローラでのみ機能します。同じタイプのソースとターゲットが必要になります。コントローラ レベルのプロパティ<control>. supportsKeys (ブール値、読み取り専用)は、コントローラに I_KEYCONTROL インタフェースが実装されているために、 appendKey および assignKey 関数の引数として使用できる場合、 true を返します。「supportsKeys」を参照してください。

コントローラ間でキーをコピーするには:

  • ソース コントローラとターゲット コントローラを同じ形式にする必要があります。

  • これらが、. supportsKeys プロパティを使用するキーをサポートしているかどうかを確認します。

    • サポートしていない場合、subanim が存在するかどうか確認します。

    • 存在している場合、subanim に再帰させます。

  • subanim に関するチェックなどを繰り返します。

   

copyPasteKeys <controller> (<map_struct> | <fn> <arg>) [#replacekeys] [#insertkeys] 

この関数は既存の mapKeys()メソッドによく似ていますが、いくつかのキーが選択されていることを前提としています。 copyPasteKeys() を呼び出すと、「mapKeys() メソッド」で説明されている map_struct またはマッピング関数が使用され、選択されているキーが最初にコピーされてから、コピーされたキーが選択されて貼り付けられます。3ds Max 8 以降で使用可能です。

#replacekeys 引数を使用すると、コピーされたキーの範囲内にある未選択キーが削除されます。さらに、 #insertkeys 引数を使用すると、コピーされたキーの範囲の長さに等しい時間の値で、コピーされたキーの挿入点(最初にコピーされたキーの場所)以後に配置されている未選択キーが右にシフトされます。

関連事項