본문 바로가기

Study

[스크립트]선택한 레이어 0,0 좌표 만들기..

반응형

Parents_null_reset.jsx
0.00MB

(function () {
    function getWorldPosition(layer) {
        var positionProp = layer.transform.position;
        var expressionBackup = positionProp.expressionEnabled ? positionProp.expression : null;
        var wasExpressionEnabled = positionProp.expressionEnabled;

        // 익스프레션 비활성화 후 값 가져오기
        if (wasExpressionEnabled) positionProp.expressionEnabled = false;
        var worldPos = positionProp.value;

        var scaleFactor = [1, 1, 1];
        while (layer.parent !== null) {
            var parent = layer.parent;
            var parentPos = parent.transform.position.value;
            var parentScale = parent.transform.scale.value;

            scaleFactor = [
                scaleFactor[0] * (parentScale[0] * 0.01),
                scaleFactor[1] * (parentScale[1] * 0.01)
            ];
            worldPos = [
                worldPos[0] * (parentScale[0] * 0.01) + parentPos[0],
                worldPos[1] * (parentScale[1] * 0.01) + parentPos[1]
            ];

            if (layer.threeDLayer) {
                if (worldPos.length < 3) worldPos.push(0);
                scaleFactor.push(scaleFactor[2] * (parentScale[2] * 0.01));
                worldPos[2] = worldPos[2] * (parentScale[2] * 0.01) + parentPos[2];
            }
            layer = parent;
        }

        // 원래 익스프레션 복원
        if (wasExpressionEnabled) {
            positionProp.expression = expressionBackup;
            positionProp.expressionEnabled = true;
        }

        return worldPos;
    }

    function createNullAndReparent(layer) {
        var comp = layer.containingComp;
        var worldPos = getWorldPosition(layer);

        var nullLayer = comp.layers.addNull();
        nullLayer.name = layer.name + "_Null";
        nullLayer.transform.position.setValue(worldPos);
        nullLayer.threeDLayer = layer.threeDLayer;
        nullLayer.moveBefore(layer);
        layer.parent = nullLayer;
        return nullLayer;
    }

    function main() {
        var comp = app.project.activeItem;
        if (!(comp && comp instanceof CompItem)) {
            alert("활성화된 Composition이 없습니다.");
            return;
        }

        var selectedLayers = comp.selectedLayers;
        if (selectedLayers.length === 0) {
            alert("레이어를 선택하세요.");
            return;
        }

        app.beginUndoGroup("Create Nulls Above Layers and Reparent");
        for (var i = selectedLayers.length - 1; i >= 0; i--) {
            createNullAndReparent(selectedLayers[i]);
        }
        app.endUndoGroup();
    }

    main();
})();

 

단점

 

부모 레이어에 익스프레션이 있을경우 효과 없음...

-----------------------------------------------

 

 

 

 

 

 

반응형