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>
で指定されたキーをターゲット キー配列から削除し、ソース キーをターゲット キー配列のソース キーの時間のところに挿入します。
最初にソース キーが
例
--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
引数を使用すると、コピーされたキーの範囲の長さに等しい時間の値で、コピーされたキーの挿入点(最初にコピーされたキーの場所)以後に配置されている未選択キーが右にシフトされます。