Register¶
Register.insertCommand()¶
insertCommand(menu: Menu, order: Order, name: string, fn: CommandFunc, enabledWhen?: EnabledWhen): Uuid;
新たなコマンドを作る。
(() => {
Atarabi.register.insertCommand('Layer' /* Layerメニューに挿入する */, 'AtTop' /* 一番上に挿入する */, 'Set Null', () => {
const comp = app.project.activeItem;
if (!(comp instanceof CompItem)) {
return;
}
try {
app.beginUndoGroup('Set Null');
for (const layer of comp.selectedLayers) {
if (layer instanceof ShapeLayer || layer instanceof TextLayer || layer instanceof AVLayer) {
Atarabi.layer.setNull(layer, true);
}
}
} catch (e) {
// pass
} finally {
app.endUndoGroup();
}
}, 'LayerSelected');
})();
(function () {
Atarabi.register.insertCommand('Layer' /* Layerメニューに挿入する */, 'AtTop' /* 一番上に挿入する */, 'Set Null', function () {
var comp = app.project.activeItem;
if (!(comp instanceof CompItem)) {
return;
}
try {
app.beginUndoGroup('Set Null');
for (var _i = 0, _a = comp.selectedLayers; _i < _a.length; _i++) {
var layer = _a[_i];
if (layer instanceof ShapeLayer || layer instanceof TextLayer || layer instanceof AVLayer) {
Atarabi.layer.setNull(layer, true);
}
}
}
catch (e) {
// pass
}
finally {
app.endUndoGroup();
}
}, 'LayerSelected');
})();
Register.hookCommand()¶
hookCommand(commandId: number, fn: HookCoomandFunc, options?: { order?: Register.HookOrder; }): Uuid;
既存のコマンドをフックする。
/* レイヤーを複製をした回数を数える */
(() => {
let counter = 0;
Atarabi.register.hookCommand(2080 /* Duplicate */, ctx => {
ctx.fallback = true; // デフォルトの処理にフォールバックする。
// ctx.stopIteration = true; 同じコマンドに複数個フックしている場合に、後続の呼び出しを止める。
counter++;
$.writeln(`Duplicate: ${counter}`);
});
})();
/* レイヤーを複製をした回数を数える */
(function () {
var counter = 0;
Atarabi.register.hookCommand(2080 /* Duplicate */, function (ctx) {
ctx.fallback = true; // デフォルトの処理にフォールバックする。
// ctx.stopIteration = true; 同じコマンドに複数個フックしている場合に、後続の呼び出しを止める。
counter++;
$.writeln("Duplicate: ".concat(counter));
});
})();
Register.unhookCommand()¶
unhookCommand(commandId: number, uuid: Uuid): boolean;
Register.hookCommand() で追加したフックを解除する。
(() => {
const uuid = Atarabi.register.hookCommand(2080 /* Duplicate */, ctx => {
// do nothing
});
Atarabi.register.unhookCommand(2080, uuid);
})();
(function () {
var uuid = Atarabi.register.hookCommand(2080 /* Duplicate */, function (ctx) {
// do nothing
});
Atarabi.register.unhookCommand(2080, uuid);
})();
Register.unhookCommandAll()¶
unhookCommandAll(commandId: number): boolean;
Register.hookCommand() で追加したフックをすべて解除する。
(() => {
(() => {
for (let i = 0; i < 10; i++) {
Atarabi.register.hookCommand(2080 /* Duplicate */, ctx => {
// do nothing
});
}
Atarabi.register.unhookCommandAll(2080);
})();
});
(function () {
(function () {
for (var i = 0; i < 10; i++) {
Atarabi.register.hookCommand(2080 /* Duplicate */, function (ctx) {
// do nothing
});
}
Atarabi.register.unhookCommandAll(2080);
})();
});
Added in version 0.3.1.
Register.importFlavor()¶
importFlavor(extension: string, fn: ImportFlavorFunc): void;
拡張子を登録し、その拡張子のファイルを読み込むと、そのファイルの内容に基づいて、例えばコンポを構築するみたいなことが出来る機能がある。あまり使い道は思いつかない。AEにドラッグ・アンド・ドロップして実行できるのが利点か。
適当にzjfという拡張子をもつ以下のような仕様を持つファイルを考える。
一行目には生成するコンポジションの内容をスペース区切りで、二行目には敷く平面の色をスペース区切りで書く、という仕様となっている。
1920 1080 30 10
1 0 0
この場合、1920x1080のサイズの30fps、10secのコンポを作り、赤の平面を敷くという意味になる。
(() => {
Atarabi.register.importFlavor('zjf', ({path}) => {
const file = new File(path);
file.encoding = 'utf-8';
if (!file.open('r')) {
return;
}
const body = file.read();
file.close();
const lines = body.split('\n');
const compSpec = lines[0].split('\s');
const width = parseInt(compSpec[0], 10);
const height = parseInt(compSpec[1], 10);
const frameRate = parseFloat(compSpec[2]);
const duration = parseFloat(compSpec[3]);
const solidSpec = lines[1].split('\s');
const red = parseFloat(solidSpec[0]);
const green = parseFloat(solidSpec[1]);
const blue = parseFloat(solidSpec[2]);
const comp = app.project.items.addComp(`${file.displayName}`, width, height, 1, duration, frameRate);
const solid = comp.layers.addSolid([red, green, blue], 'Solid', width, height, 1);
});
})();
(function () {
Atarabi.register.importFlavor('zjf', function (_a) {
var path = _a.path;
var file = new File(path);
file.encoding = 'utf-8';
if (!file.open('r')) {
return;
}
var body = file.read();
file.close();
var lines = body.split('\n');
var compSpec = lines[0].split('\s');
var width = parseInt(compSpec[0], 10);
var height = parseInt(compSpec[1], 10);
var frameRate = parseFloat(compSpec[2]);
var duration = parseFloat(compSpec[3]);
var solidSpec = lines[1].split('\s');
var red = parseFloat(solidSpec[0]);
var green = parseFloat(solidSpec[1]);
var blue = parseFloat(solidSpec[2]);
var comp = app.project.items.addComp("".concat(file.displayName), width, height, 1, duration, frameRate);
var solid = comp.layers.addSolid([red, green, blue], 'Solid', width, height, 1);
});
})();