【脚本案例】基于选择图层时间 创建新图层

来源:朝倉老师的基于当前选择图层创建调整图层如下

【脚本案例】基于选择图层时间 创建新图层

本脚本介绍

基于选择的图层创建新图层。

单击:只创建一个,时间为所有图层的起始与结束

shift 单击:所有图层上方都创建一个对应图层

【脚本案例】基于选择图层时间 创建新图层

可优化

目前文字图层创建的是空文本、形状也是空形状组。具体我也不知道咋处理好,看个人需求吧

源码

/**
 * 功能:基于选择的图层、创建新图层。按住shift可以基于每个图层都创建
 * 源码:https://www.yuelili.com/?p=17993
 * 版本:1.0
 * 参考代码:https://www.yuelili.com/?p=17740
 */

var panelGlobal = this;
var palette = (function () {

    // PALETTE
    // =======
    var palette = (panelGlobal instanceof Panel) ? panelGlobal : new Window("palette");
    if (!(panelGlobal instanceof Panel)) palette.text = "创建图层";
    palette.orientation = "row";
    palette.alignChildren = ["center", "top"];
    palette.spacing = 10;
    palette.margins = 16;

    var layer_list_array = ["调整图层", "纯色图层", "文字图层", "空对象", "形状图层"];
    var layer_list = palette.add("dropdownlist", undefined, undefined, { name: "layer_list", items: layer_list_array });
    layer_list.selection = 0;

    var create = palette.add("button", undefined, undefined, { name: "create" });
    create.helpTip = "选择一个素材,然后单击";
    create.text = "创建";
    create.preferredSize.width = 50;

    create.onClick = create_it

    // 判断要创建什么图层
    function creat_layer() {
        switch (layer_list.selection.index) {
            case 0:
                app.executeCommand(2279);   // 调整图层
                break;
            case 1:
                var cur_comp = app.project.activeItem
                cur_comp.layers.addSolid([0.5, 0.5, 0.5], '纯色图层', cur_comp.width, cur_comp.height, 1);   // 纯色图层
                break;

            case 2:
                app.project.activeItem.layers.addText('');   // 文字图层
                break;

            case 3:
                app.executeCommand(2767);   // 空对象
                break;
            case 4:
                app.project.activeItem.layers.addShape();   // 形状图层
                break;
        }
    }

    // 数组排序
    function sortArr(arr) {
        arr.sort(function (a, b) {
            if (a < b) return -1;
            if (a > b) return 1;
            return 0;
        });
    }

    function atal() {
        app.beginUndoGroup("atal");

        var comp = app.project.activeItem;
        var slLayers = comp.selectedLayers;

        var inPArr = [];
        var outPArr = [];
        for (i = 0; i < slLayers.length; i++) {
            inP = slLayers[i].inPoint;
            inPArr.push(inP);
            outP = slLayers[i].outPoint;
            outPArr.push(outP);
        }
        sortArr(inPArr);
        sortArr(outPArr);
        creat_layer()
        var slAdLayers = comp.selectedLayers;
        slAdLayers[0].inPoint = inPArr[0];
        slAdLayers[0].outPoint = outPArr[outPArr.length - 1];
        slAdLayers[0].moveBefore(slLayers[0])
        app.endUndoGroup();
    }

    // 创建图层(多个)
    function atalEach() {
        app.beginUndoGroup("atalEach");
        var comp = app.project.activeItem;
        var slLayers = comp.selectedLayers;
        for (i = 0; i < slLayers.length; i++) {
            inP = slLayers[i].inPoint;
            outP = slLayers[i].outPoint;
            creat_layer()
            var slAdLayers = comp.selectedLayers;
            slAdLayers[0].inPoint = inP;
            slAdLayers[0].outPoint = outP;
            slAdLayers[0].moveBefore(slLayers[i]);
        }
        app.endUndoGroup();
    }

    // 判断
    function create_it() {
        var keyboardState = ScriptUI.environment.keyboardState;
        if (keyboardState.shiftKey) {
            atalEach();
        } else {
            atal();
        }
    }

    palette.layout.layout(true);
    palette.layout.resize();
    palette.onResizing = palette.onResize = function () { this.layout.resize(); }

    if (palette instanceof Window) palette.show();

    return palette;

}());

给TA充电
共{{data.count}}人
人已充电
AE开发脚本开发

【脚本案例】GIF等素材循环

2021-9-29 1:23:41

AE开发脚本开发

【脚本案例】调整图层置顶

2021-9-29 3:29:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索