// ウィンドウ作成
var win = new Window("palette", "ウィグル追加", undefined);
win.orientation = "column";
// スライダーUIの作成
win.add("statictext", undefined, "周波数 (Frequency):");
var freqInput = win.add("edittext", undefined, "10");
freqInput.characters = 4;
win.add("statictext", undefined, "振幅 (Amplitude):");
var ampInput = win.add("edittext", undefined, "2");
ampInput.characters = 4;
// ウィグル種類の選択ドロップダウン
win.add("statictext", undefined, "ウィグルタイプ:");
var wiggleTypeDropdown = win.add("dropdownlist", undefined, ["標準ウィグル", "スムーズウィグル", "ランダム動作"]);
wiggleTypeDropdown.selection = 0; // デフォルトは標準ウィグル
// ボタンの作成
var btnPosition = win.add("button", undefined, "位置");
var btnRotation = win.add("button", undefined, "回転");
var btnScale = win.add("button", undefined, "スケール");
// ボタンのクリックイベント
btnPosition.onClick = function () { applyExpression("position"); };
btnRotation.onClick = function () { applyExpression("rotation"); };
btnScale.onClick = function () { applyExpression("scale"); };
// エクスプレッション適用関数
function applyExpression(propName) {
var comp = app.project.activeItem;
if (!comp || !(comp instanceof CompItem)) {
alert("コンポジションを開いてください。");
return;
}
var selectedLayers = comp.selectedLayers;
if (selectedLayers.length === 0) {
alert("レイヤーを選択してください。");
return;
}
// ユーザーが選択した値を取得
// var frequency = parseFloat(freqInput.value.toFixed(1));
// var amplitude = parseFloat(ampInput.value.toFixed(0));
var frequency = parseFloat(freqInput.text);
var amplitude = parseFloat(ampInput.text);
var wiggleType = wiggleTypeDropdown.selection.index;
// ウィグルのエクスプレッションを生成
var wiggleExp = "";
switch (wiggleType) {
case 0: // 標準ウィグル
wiggleExp = "wiggle(" + frequency + ", " + amplitude + ");";
break;
case 1: // スムーズウィグル
wiggleExp = "smoothWiggle(" + frequency + ", " + amplitude + ");";
break;
case 2: // ランダム動作
wiggleExp = "random(-" + amplitude + ", " + amplitude + ");";
break;
}
app.beginUndoGroup("ウィグルエクスプレッション追加");
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");
}
if (property) {
property.expression = wiggleExp;
}
}
app.endUndoGroup();
}
// ウィンドウを表示
win.center();
win.show();