editMAでアニメーションを書き出したい

Mayaでアニメーションを読み書きする方法は幾つかあるのですが、editMAを使った読み書きをやってみます。

書き出し
--

exportEditsというコマンドがありました。
これを使ってやってみます。

https://help.autodesk.com/cloudhelp/2022/JPN/Maya-Tech-Docs/CommandsPython/exportEdits.html

選択したノードのアニメーションキーだけを書き出す場合であればこんな感じでしょうか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/56a07fcf-0350-9d5e-6d6f-7a966b1044be.png)

```python
import maya.cmds as cmds
exportFilePath = "D:/test/testAnimation.editMA"
cmds.exportEdits(
                            exportFilePath,
                            type = "editMA",
                            selected =True,
                            includeAnimation =True,
                            f =True
                        )
```

書き出せてますね。
```
//Maya ASCII 2022 scene
//Name: testAnimation.editMA
//Last modified: Sun, Dec 01, 2024 02:45:03 PM
//Codeset: 932
requires maya "2022";
requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.0.0.4";
requires "stereoCamera" "10.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "fileCreationSource" "ExportEdits";
createNode animCurveTA -n "pSphere1_rotateY";
	rename -uid "4791779C-4CEF-EF31-DECD-ABAE55E28704";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 0;
createNode animCurveTA -n "pSphere1_rotateZ";
	rename -uid "C25A9C42-48BB-726B-F329-418F3E6482E3";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 0;
createNode animCurveTA -n "pSphere1_rotateX";
	rename -uid "2F0CE1C7-4E03-64A2-C2E4-3DB2E72EAC1F";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 0;
createNode animCurveTL -n "pSphere1_translateZ";
	rename -uid "0CF890E7-47FA-C5EE-AF1B-03854F71FA86";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 0;
createNode animCurveTU -n "pSphere1_visibility";
	rename -uid "0E898703-4A7E-EF90-7FD5-8CBAC512F603";
	setAttr ".tan" 9;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 1;
	setAttr ".kot[0]"  5;
createNode animCurveTU -n "pSphere1_scaleX";
	rename -uid "792E4EB4-4BB4-E439-AC71-34B9854F8247";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 1;
createNode animCurveTU -n "pSphere1_scaleY";
	rename -uid "031AEBC5-485B-42DD-E583-24AE8FE40D15";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 1;
createNode animCurveTU -n "pSphere1_scaleZ";
	rename -uid "6723FC29-4730-9A89-F952-128D6A6F9C53";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 1;
createNode animCurveTL -n "pSphere1_translateX";
	rename -uid "68623C64-4443-50BB-3889-8FB915D885CC";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 0;
createNode animCurveTL -n "pSphere1_translateY";
	rename -uid "861B8D53-4DA8-1367-850D-C09DF3CA5B83";
	setAttr ".tan" 18;
	setAttr ".wgt" no;
	setAttr ".ktv[0]"  1 0;
connectAttr "pSphere1_rotateY.o" "<main>:pSphere1.ry";
connectAttr "pSphere1_rotateZ.o" "<main>:pSphere1.rz";
connectAttr "pSphere1_rotateX.o" "<main>:pSphere1.rx";
connectAttr "pSphere1_translateZ.o" "<main>:pSphere1.tz";
connectAttr "pSphere1_visibility.o" "<main>:pSphere1.v";
connectAttr "pSphere1_scaleX.o" "<main>:pSphere1.sx";
connectAttr "pSphere1_scaleY.o" "<main>:pSphere1.sy";
connectAttr "pSphere1_scaleZ.o" "<main>:pSphere1.sz";
connectAttr "pSphere1_translateX.o" "<main>:pSphere1.tx";
connectAttr "pSphere1_translateY.o" "<main>:pSphere1.ty";
// End of testAnimation.editMA

```

ネームスペース部分が <main> に書き換わってますね。
読み込み時にnamespaceを指定するのかなぁ？


読み込み
--

これを読み込んでみます。

読み込みはー・・・・・importEditsとかあるのかと思ったらないですね。
とりあえずfileコマンドを覗いてみます。

https://help.autodesk.com/cloudhelp/2022/JPN/Maya-Tech-Docs/CommandsPython/file.html

関係ありそうなフラグはこれですがー

> applyTo(at)
オフライン編集ファイルの読み込み時または参照時に、それを指定のリファレンスに適用します(<main> のマップ先を決定します)。引数としてリファレンス ノード名を指定します。メイン シーン(ルート ネームスペース)のノードに編集を適用するには、「:」で渡します。<main> を折り畳むには(つまり、「なし」にマップするには)、"" に渡します。ファイル -i/import または -r/reference フラグと一緒に使用した場合のみ使用できます。

シンプルにやってみます。

```python
import maya.cmds as cmds
exportFilePath = "D:/test/testAnimation.editMA"
cmds.file(exportFilePath,
        type = "editMA",
        i =True,
        applyTo = "sampleAsset_v01RN"
        )
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/59bda139-dd7b-4321-1249-cfd531fb4fda.png)

お、無事読み込めました。
applyToで指定するのが namespaceではなく、リファレンスノード名　というのが注意ポイントですね。

シンプルなアニメーションの読み書きは割と簡単でした。

アニメーションが読み込み済みのシーンに同じアニメーションを読み込んでみます。

```
# Error: file: D:/test/testAnimation.editMA line 61: ':sampleAsset_v01:pSphere1.rotateY' already has an incoming connection from ':pSphere1_rotateY.output'. # 
# Error: file: D:/test/testAnimation.editMA line 62: ':sampleAsset_v01:pSphere1.rotateZ' already has an incoming connection from ':pSphere1_rotateZ.output'. # 
# Error: file: D:/test/testAnimation.editMA line 63: ':sampleAsset_v01:pSphere1.rotateX' already has an incoming connection from ':pSphere1_rotateX.output'. # 
# Error: file: D:/test/testAnimation.editMA line 64: ':sampleAsset_v01:pSphere1.translateZ' already has an incoming connection from ':pSphere1_translateZ.output'. # 
# Error: file: D:/test/testAnimation.editMA line 65: ':sampleAsset_v01:pSphere1.visibility' already has an incoming connection from ':pSphere1_visibility.output'. # 
# Error: file: D:/test/testAnimation.editMA line 66: ':sampleAsset_v01:pSphere1.scaleX' already has an incoming connection from ':pSphere1_scaleX.output'. # 
# Error: file: D:/test/testAnimation.editMA line 67: ':sampleAsset_v01:pSphere1.scaleY' already has an incoming connection from ':pSphere1_scaleY.output'. # 
# Error: file: D:/test/testAnimation.editMA line 68: ':sampleAsset_v01:pSphere1.scaleZ' already has an incoming connection from ':pSphere1_scaleZ.output'. # 
# Error: file: D:/test/testAnimation.editMA line 69: ':sampleAsset_v01:pSphere1.translateX' already has an incoming connection from ':pSphere1_translateX.output'. # 
# Error: file: D:/test/testAnimation.editMA line 70: ':sampleAsset_v01:pSphere1.translateY' already has an incoming connection from ':pSphere1_translateY.output'. # 
i
```

ん～　お断りされました。

となると、editMAの使いどころはスタジオライブラリの様な作業中のアニメーションの読み書きというよりは、
作業開始時・終了時にクリーンなシーンを作成する為に読み込み・書き出しを行う感じですかね。