AVItem.mainSource.isStill が true なら静止画。false なら動画。
カテゴリー: プログラミング
右クリックイベントを定義
btn.addEventListener('click', function() {
// ここが右クリックの処理になる
})
btn.onClick = function () {
// こっちが左クリックの処理
}
Macで署名してない開発中のCEPパネルが起動しない
ウィンドウ > エクステンション に名前は見えてるのにクリックしてもパネルが出てこない。
やったこと
- デバッグモードをオンに
- Mac再起動
- Mac10.9以降に搭載された環境設定をキャッシュするプログラムを強制終了(cfprefsd)
- ZXP Installerをインストール ←これで解決
パスのプロパティにsetValue
// pathプロパティ取得
var path = hogehoge.property()
// Shapeオブジェクトのインスタンス作成
var newShape = new Shape()
// もろもろ入れて
newShape.vertices = newV
newShape.inTangents = newInT
newShape.outTangents = newOutT
newShape.closed = closed
// setValue
path.setValue(newShape)
フォントと似てる処理の流れ。Shapeオブジェクトを作ってそれにもろもろ入れてsetValue。
vertices は頂点。inTangents と outTangents は制御点。どれも[[x,y], [x,y]]のような座標の形式になる。
制御点は頂点をもとに計算される座標。つまり[0, 0]なら頂点と同じ位置に重なることになる。
closedはパスを閉じるかどうかのブール。
エフェクトを追加する方法
簡単なことなのに毎回ググってる気がする。addPropertyでエフェクトのmatchNameを入れてあげれば良い。matchNameはスクリプトで洗い出す。
例えばスライダー制御ならこんな感じ。
var slider = layer.effect.addProperty("ADBE Slider Control")
addPropertyするとプロパティオブジェクトが返ってくるから、それを操作して名前を変えたり値を変えたりしていく。
プリセットを適用する方法
var ffxFile = File((new File($.fileName)).parent.toString() + "/fugafuga/hogehoge.ffx");
layer.applyPreset(ffxFile);
replaceAllが使えない
ExtendScriptでは使えないので正規表現を使う。
text.replaceAll('$', '') // replaceAll の場合
text.replace(/\$/g, '') // replace の場合
ffxファイルをバイナリ化してjsxbinに埋め込み
【注意】ffxは古いバージョンのAEで作ること!!最新のAEで作ったら古いAEからは開けない。
続きを読む ffxファイルをバイナリ化してjsxbinに埋め込みレイヤーと関連付けられていないため、値を設定できません
スクリプトからSourceTextのスタイルをいじろうとした時に出たエラー。TypeAnimeJP開発中に追加テキストを左揃え固定にしようとしたときに遭遇。
// 左揃えに
var tmpTextDocument = tmpTextLayer.property("Source Text").value
tmpTextDocument.justification = ParagraphJustification.LEFT_JUSTIFY
tmpTextLayer.property("Source Text").setValue(tmpTextDocument)
こんな感じにしたらいけた。一回valueで取得して値をいじって再度setValue。フォントを指定するときと同じ流れ。
エクスプレッションを使うスクリプトを書くときの注意点
プロジェクト設定のエクスプレッションエンジンが「以前のExtendScript」だと正常に動作しない。エクスプレッションがエラー吐く。
プロジェクト設定は取得できるので、以前のExtendScriptが選択されている場合は警告を出して処理を停止させるとかが良いと思う。
app.project.expressionEngine
ファイル操作スニペット
ファイルの存在を確認。ファイルの保存・読み込み。ファイル扱うスクリプトは毎回頭にこれ書けばいいかも。
var dataPath = Folder.decode(Folder.userData) + '/Aescripts/YourScriptName';
var f = new Folder(dataPath);
if (!f.exists) f.create();
function fileExist(filename) {
var file = new File(dataPath + "/" + filename + ".txt");
return file.exists
}
function writeFile(object, filename) {
var myFile = new File(dataPath + "/" + filename + ".txt");
myFile.open("w");
myFile.encoding = "UTF-8";
myFile.write(JSON.stringify(object));
myFile.close();
}
function readFile(filename) {
var file = new File(dataPath + "/" + filename + ".txt");
file.open('r');
file.encoding = 'UTF-8';
return JSON.parse(file.readln());
}
Object.keys()が使えない
こんな関数を用意してやる。
var getKeys = function(associativeArrayObject) {
var arrayWithKeys=[], associativeArrayObject;
for (key in associativeArrayObject) {
// Avoid returning these keys from the Associative Array that are stored in it for some reason
if (key !== undefined && key !== "toJSONString" && key !== "parseJSON" ) {
arrayWithKeys.push(key);
}
}
return arrayWithKeys;
}
使い方
getKeys(Object)