に投稿

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するとプロパティオブジェクトが返ってくるから、それを操作して名前を変えたり値を変えたりしていく。

に投稿

レイヤーと関連付けられていないため、値を設定できません

スクリプトから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)
に投稿

特定のプロパティを探して返す関数

  function getProp(rootObj, nestingLevel, name) {
    var propTo;
    dumpPropTree(rootObj, nestingLevel, name);
    function dumpPropTree(rootObj, nestingLevel, name) {
      var countProps = rootObj.numProperties;
      for (var propIndex = 1; propIndex <= countProps; propIndex++) {
        var prop = rootObj.property(propIndex);
        if (prop.name == name) {
          propTo = prop;
          return;
        } else {
          dumpPropTree(prop, nestingLevel + 1, name);
        }
      }
    }
    return propTo;
  }
に投稿

テキストアニメーターの範囲セレクターのオフセットにsetValueできない

var animator1 = selectedLayer.Text.Animators.addProperty("ADBE Text Animator");
var selector1 = animator1.property("ADBE Text Selectors").addProperty("ADBE Text Selector"); // 範囲セレクターを追加
selector1.advanced.units.setValue(2) // 高度タブの単位を一旦「インデックス」に
selector1.property(6).setValue(comp.time, 0) // オフセットにsetValue
selector1.advanced.units.setValue(1) // 「パーセント」に戻す

範囲セレクターの高度タブの単位を「インデックス」にしてやるとできた。あとで「パーセント」に戻せばOK。