After Effects│プリコンポーズしたレイヤーを元に戻すスクリプト

プリコンポーズしたレイヤーを元に戻したい

プリコンポーズしたレイヤーを元に戻すスクリプトです。

目次

プリコンポーズしたレイヤーを元に戻すスクリプト

var cancelFlag = 0;
var targetComp = null;
var dialogResult;
var parentNullLayer = null;
var insertBaseIndex;
cancelFlag = getSelectedCompIndex();
if (cancelFlag) {
    dialogResult = showOptionDialog();
    if (dialogResult[0] === 1) {
        app.beginUndoGroup("Expand Composition");
        expandComposition(app.project.item(cancelFlag), dialogResult[1]);
        app.endUndoGroup();
    }
}
function getSelectedCompIndex() {
    var activeItem = app.project.activeItem;
    if (!activeItem) {
        alert("selectProj");
        return 0;
    }
    targetComp = activeItem;
    var selectedLayers = activeItem.selectedLayers;
    if (selectedLayers.length === 0) {
        alert("Select something");
        return 0;
    }
    var compIndex = findItemIndexByName(selectedLayers[0].name);
    if (!compIndex) {
        alert("Select comp");
        return 0;
    }
    if (!(app.project.item(compIndex) instanceof CompItem)) {
        alert("Select comp");
        return 0;
    }
    return compIndex;
}
function findItemIndexByName(name) {
    for (var i = 1; i <= app.project.items.length; i++) {
        if (app.project.item(i).name === name) {
            return i;
        }
    }
    return 0;
}
function showOptionDialog() {
    var dlg = new Window('dialog', "ExpandComp", rectAE(200, 100, 220, 130));
    var panel = dlg.add("panel", rectAE(5, 5, 210, 70), "Transform");
    var rbOriginal = panel.add("radiobutton", rectAE(20, 18, 75, 21), "Original");
    var rbPreComp = panel.add("radiobutton", rectAE(20, 40, 75, 21), "PreComp");
    var cbParentNull = panel.add("checkbox", rectAE(115, 30, 90, 21), "Parent null");
    var btnOK = dlg.add("button", rectAE(120, 90, 80, 26), "OK");
    var btnCancel = dlg.add("button", rectAE(20, 90, 80, 26), "Cancel");
    rbPreComp.value = true;
    cbParentNull.value = false;
    return [dlg.show(), rbPreComp.value, cbParentNull.value];
}
function expandComposition(preComp, keepPreCompTransform) {
    for (var i = 1; i <= preComp.numLayers; i++) {
        preComp.layer(i).copyToComp(targetComp);
    }
    if (!keepPreCompTransform && dialogResult[2]) {
        createParentNull(preComp);
    }
    if (keepPreCompTransform) {
        createParentNull(preComp);
        var originalLayer = targetComp.layer(preComp.name);
        parentNullLayer.position.setValue(originalLayer.position.value);
        parentNullLayer.scale.setValue(originalLayer.scale.value);
        parentNullLayer.rotation.setValue(originalLayer.rotation.value);
        if (!dialogResult[2]) {
            for (var k = insertBaseIndex; k > insertBaseIndex - preComp.numLayers; k--) {
                targetComp.layer(k).parent = null;
            }
            targetComp.layer(1).remove();
        }
    }
    targetComp.layer(preComp.name).enabled = false;
}
function createParentNull(preComp) {
    insertBaseIndex = targetComp.layer(preComp.name).index;
    parentNullLayer = targetComp.layers.addNull();
    targetComp.layer(1).name = preComp.name + "_null";
    for (var j = insertBaseIndex; j > insertBaseIndex - preComp.numLayers; j--) {
        targetComp.layer(j).parent = parentNullLayer;
    }
}
function rectAE(left, top, width, height) {
    return [left, top, left + width, top + height];
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次