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
でのみ機能します。この関数は、キーの仮想配列では定義されません。
キーを移動して、後続のキー時間と一致する時間または超過する時間に設定すると、タイムラインにエラーが発生し、3ds Maxがクラッシュする可能性があります。この問題が起こらないよう、キーを移動した後で sortKeys()
を呼び出すようにしてください。2 つのキーを同じ時間値に設定する動作は定義されていないため、使用しないでください。
例:
moveKeys $box01.pos.controller 5
moveKeys $box01.pos.track 5
moveKey <controller> <index_integer> <time>
指定された時間だけインデックスで指定されたキーを移動します。
キーを移動して、後続のキー時間と一致する時間または超過する時間に設定すると、タイムラインにエラーが発生し、3ds Maxがクラッシュする可能性があります。この問題が起こらないよう、キーを移動した後で sortKeys()
を呼び出すようにしてください。2 つのキーを同じ時間値に設定する動作は定義されていないため、使用しないでください。
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
引数を使用すると、コピーされたキーの範囲の長さに等しい時間の値で、コピーされたキーの挿入点(最初にコピーされたキーの場所)以後に配置されている未選択キーが右にシフトされます。