来源:朝倉老师的基于当前选择图层创建调整图层如下
本脚本介绍
基于选择的图层创建新图层。
单击:只创建一个,时间为所有图层的起始与结束
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;
}());