100-thisComp.layer("name").transform.opacity

100-thisComp.layer(index-1).transform.opacity

口開き
口閉じ

目開き
目閉じ
(function () {
    // ウィンドウ作成
    var win = new Window("palette", "エクスプレッション適用", undefined, { resizeable: true });
    win.orientation = "column";

    // テキスト入力エリアの作成(サイズを確実に適用)
    win.add("statictext", undefined, "エクスプレッションを入力:");
    var expressionInput = win.add("edittext", undefined, "wiggle(2,10);", { multiline: true });
    expressionInput.preferredSize = [350, 60];

    var btnGroup = win.add("group");
    btnGroup.orientation = "row";

    // ボタンの作成
    var btnPosition = btnGroup.add("button", undefined, "位置");
    var btnRotation = btnGroup.add("button", undefined, "回転");
    var btnScale = btnGroup.add("button", undefined, "スケール");
    var btnOpacity = btnGroup.add("button", undefined, "透明度");

    // ボタンのクリックイベント
    btnPosition.onClick = function () { applyExpression("position"); };
    btnRotation.onClick = function () { applyExpression("rotation"); };
    btnScale.onClick = function () { applyExpression("scale"); };
    btnOpacity.onClick = function () { applyExpression("opacity"); };

    // **エクスプレッション適用関数**
    function applyExpression(propName) {
        try {
            var comp = app.project.activeItem;
            if (!comp || !(comp instanceof CompItem)) {
                alert("コンポジションを開いてください。");
                return;
            }

            var selectedLayers = comp.selectedLayers;

            if (selectedLayers.length === 0) {
                alert("レイヤーを選択してください。");
                return;
            }

            var userExpression = expressionInput.text;

            if (userExpression === "") {
                alert("エクスプレッションを入力してください。");
                return;
            }

            app.beginUndoGroup("エクスプレッション追加");

            var appliedCount = 0;

            for (var i = 0; i < selectedLayers.length; i++) {
                var layer = selectedLayers[i];
                var property = null;

                if (propName === "position" && layer.property("Position")) {
                    property = layer.property("Position");
                } else if (propName === "rotation") {
                    if (layer.threeDLayer) {
                        property = layer.property("Rotation") || layer.property("zRotation");
                    } else {
                        property = layer.property("Rotation");
                    }
                } else if (propName === "scale" && layer.property("Scale")) {
                    property = layer.property("Scale");
                } else if (propName === "opacity" && layer.property("Opacity")) {
                    property = layer.property("Opacity");
                }

                if (!property) {
                    alert("プロパティ取得に失敗しました!" + propName);
                    continue;
                }

                try {
                    property.expression = userExpression;
                    appliedCount++;
                } catch (e) {
                    alert("エクスプレッション設定時にエラー発生: " + e.message);
                }
            }

            app.endUndoGroup();

            if (appliedCount === 0) {
                alert("エクスプレッションが適用されませんでした。選択したレイヤーのプロパティを確認してください。");
            } else {
                alert("エクスプレッション適用完了!(適用数:" + appliedCount + ")");
            }
        } catch (err) {
            alert("スクリプト実行中にエラー発生: " + err.message);
        }
    }

    // ウィンドウを表示
    win.center();
    win.show();
})();