|
|
// 表达式快速注入器
// 为选中属性快速添加常用表达式
{
var win = new Window("palette", "表达式注入器");
win.orientation = "column";
// 常用表达式列表
var expList = win.add("listbox", undefined, [
"摇摆 - wiggle(5,10)",
"循环 - loopOut()",
"时间 - time*30",
"随机 - random(0,100)",
"交替 - Math.sin(time)*50",
"跟随鼠标 - 需要拾取",
"弹性表达式 - 复杂"
]);
expList.preferredSize.height = 120;
var preview = win.add("edittext", undefined, "", {multiline:true});
preview.characters = 40;
preview.preferredSize.height = 60;
expList.onChange = function() {
switch(expList.selection.index) {
case 0: preview.text = "wiggle(5,10)"; break;
case 1: preview.text = "loopOut()"; break;
case 2: preview.text = "time*30"; break;
case 3: preview.text = "random(0,100)"; break;
case 4: preview.text = "Math.sin(time)*50"; break;
case 5: preview.text = "thisComp.layer('控制层').effect('鼠标控制')('位置')"; break;
case 6: preview.text = "freq = 3;\ndecay = 5;\namp = 100;\namp*Math.sin(freq*time*2*Math.PI)/Math.exp(decay*time)"; break;
}
};
var applyBtn = win.add("button", undefined, "应用到选中属性");
applyBtn.onClick = function() {
var comp = app.project.activeItem;
if(!comp || !(comp instanceof CompItem)) {
alert("请先激活一个合成");
return;
}
var selectedProps = [];
var layers = comp.selectedLayers;
for(var i=0; i<layers.length; i++) {
var props = layers[i].selectedProperties;
for(var j=0; j<props.length; j++) {
selectedProps.push(props[j]);
}
}
if(selectedProps.length === 0) {
alert("请至少选中一个属性(如位置、缩放等)");
return;
}
app.beginUndoGroup("添加表达式");
for(var k=0; k<selectedProps.length; k++) {
var prop = selectedProps[k];
if(prop.canSetExpression) {
prop.expression = preview.text;
}
}
app.endUndoGroup();
alert("表达式已应用到 " + selectedProps.length + " 个属性");
};
expList.onChange();
win.show();
}
|
|