执笔论坛

 找回密码
 立即注册
搜索
查看: 5|回复: 0

[AE脚本]表达式快速注入器 - 一键添加常用表达式

[复制链接]

72

主题

73

帖子

519

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
519
发表于 昨天 15:48 | 显示全部楼层 |阅读模式
// 表达式快速注入器

// 为选中属性快速添加常用表达式

{
    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();
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|执笔论坛

GMT+8, 2026-3-17 06:31 , Processed in 0.154109 second(s), 18 queries .

Powered by 执笔论坛

Copyright © 2022-2026

快速回复 返回顶部 返回列表