{"id":17830,"date":"2016-01-06T22:22:46","date_gmt":"2016-01-06T13:22:46","guid":{"rendered":"https:\/\/cg-method.com\/after-effects\/?p=17830"},"modified":"2026-01-12T18:00:04","modified_gmt":"2026-01-12T09:00:04","slug":"after-effects-expand-precomp-script","status":"publish","type":"post","link":"https:\/\/cg-method.com\/after-effects\/after-effects-expand-precomp-script\/","title":{"rendered":"After Effects\u2502\u30d7\u30ea\u30b3\u30f3\u30dd\u30fc\u30ba\u3057\u305f\u30ec\u30a4\u30e4\u30fc\u3092\u5143\u306b\u623b\u3059\u30b9\u30af\u30ea\u30d7\u30c8"},"content":{"rendered":"\n<p>\u30d7\u30ea\u30b3\u30f3\u30dd\u30fc\u30ba\u3057\u305f\u30ec\u30a4\u30e4\u30fc\u3092\u5143\u306b\u623b\u3057\u305f\u3044<\/p>\n\n\n\n<p>\u30d7\u30ea\u30b3\u30f3\u30dd\u30fc\u30ba\u3057\u305f\u30ec\u30a4\u30e4\u30fc\u3092\u5143\u306b\u623b\u3059\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30d7\u30ea\u30b3\u30f3\u30dd\u30fc\u30ba\u3057\u305f\u30ec\u30a4\u30e4\u30fc\u3092\u5143\u306b\u623b\u3059\u30b9\u30af\u30ea\u30d7\u30c8<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>var cancelFlag = 0;\nvar targetComp = null;\nvar dialogResult;\nvar parentNullLayer = null;\nvar insertBaseIndex;\ncancelFlag = getSelectedCompIndex();\nif (cancelFlag) {\n    dialogResult = showOptionDialog();\n    if (dialogResult[0] === 1) {\n        app.beginUndoGroup(&quot;Expand Composition&quot;);\n        expandComposition(app.project.item(cancelFlag), dialogResult[1]);\n        app.endUndoGroup();\n    }\n}\nfunction getSelectedCompIndex() {\n    var activeItem = app.project.activeItem;\n    if (!activeItem) {\n        alert(&quot;selectProj&quot;);\n        return 0;\n    }\n    targetComp = activeItem;\n    var selectedLayers = activeItem.selectedLayers;\n    if (selectedLayers.length === 0) {\n        alert(&quot;Select something&quot;);\n        return 0;\n    }\n    var compIndex = findItemIndexByName(selectedLayers[0].name);\n    if (!compIndex) {\n        alert(&quot;Select comp&quot;);\n        return 0;\n    }\n    if (!(app.project.item(compIndex) instanceof CompItem)) {\n        alert(&quot;Select comp&quot;);\n        return 0;\n    }\n    return compIndex;\n}\nfunction findItemIndexByName(name) {\n    for (var i = 1; i &lt;= app.project.items.length; i++) {\n        if (app.project.item(i).name === name) {\n            return i;\n        }\n    }\n    return 0;\n}\nfunction showOptionDialog() {\n    var dlg = new Window(&#39;dialog&#39;, &quot;ExpandComp&quot;, rectAE(200, 100, 220, 130));\n    var panel = dlg.add(&quot;panel&quot;, rectAE(5, 5, 210, 70), &quot;Transform&quot;);\n    var rbOriginal = panel.add(&quot;radiobutton&quot;, rectAE(20, 18, 75, 21), &quot;Original&quot;);\n    var rbPreComp = panel.add(&quot;radiobutton&quot;, rectAE(20, 40, 75, 21), &quot;PreComp&quot;);\n    var cbParentNull = panel.add(&quot;checkbox&quot;, rectAE(115, 30, 90, 21), &quot;Parent null&quot;);\n    var btnOK = dlg.add(&quot;button&quot;, rectAE(120, 90, 80, 26), &quot;OK&quot;);\n    var btnCancel = dlg.add(&quot;button&quot;, rectAE(20, 90, 80, 26), &quot;Cancel&quot;);\n    rbPreComp.value = true;\n    cbParentNull.value = false;\n    return [dlg.show(), rbPreComp.value, cbParentNull.value];\n}\nfunction expandComposition(preComp, keepPreCompTransform) {\n    for (var i = 1; i &lt;= preComp.numLayers; i++) {\n        preComp.layer(i).copyToComp(targetComp);\n    }\n    if (!keepPreCompTransform && dialogResult[2]) {\n        createParentNull(preComp);\n    }\n    if (keepPreCompTransform) {\n        createParentNull(preComp);\n        var originalLayer = targetComp.layer(preComp.name);\n        parentNullLayer.position.setValue(originalLayer.position.value);\n        parentNullLayer.scale.setValue(originalLayer.scale.value);\n        parentNullLayer.rotation.setValue(originalLayer.rotation.value);\n        if (!dialogResult[2]) {\n            for (var k = insertBaseIndex; k &gt; insertBaseIndex - preComp.numLayers; k--) {\n                targetComp.layer(k).parent = null;\n            }\n            targetComp.layer(1).remove();\n        }\n    }\n    targetComp.layer(preComp.name).enabled = false;\n}\nfunction createParentNull(preComp) {\n    insertBaseIndex = targetComp.layer(preComp.name).index;\n    parentNullLayer = targetComp.layers.addNull();\n    targetComp.layer(1).name = preComp.name + &quot;_null&quot;;\n    for (var j = insertBaseIndex; j &gt; insertBaseIndex - preComp.numLayers; j--) {\n        targetComp.layer(j).parent = parentNullLayer;\n    }\n}\nfunction rectAE(left, top, width, height) {\n    return [left, top, left + width, top + height];\n}<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u30d7\u30ea\u30b3\u30f3\u30dd\u30fc\u30ba\u3057\u305f\u30ec\u30a4\u30e4\u30fc\u3092\u5143\u306b\u623b\u3057\u305f\u3044 \u30d7\u30ea\u30b3\u30f3\u30dd\u30fc\u30ba\u3057\u305f\u30ec\u30a4\u30e4\u30fc\u3092\u5143\u306b\u623b\u3059\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u3059\u3002 \u30d7\u30ea\u30b3\u30f3\u30dd\u30fc\u30ba\u3057\u305f\u30ec\u30a4\u30e4\u30fc\u3092\u5143\u306b\u623b\u3059\u30b9\u30af\u30ea\u30d7\u30c8<\/p>\n","protected":false},"author":1,"featured_media":17883,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":"","footnotes":""},"categories":[28],"tags":[],"class_list":["post-17830","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-expression-script"],"_links":{"self":[{"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/posts\/17830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/comments?post=17830"}],"version-history":[{"count":2,"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/posts\/17830\/revisions"}],"predecessor-version":[{"id":17884,"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/posts\/17830\/revisions\/17884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/media\/17883"}],"wp:attachment":[{"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/media?parent=17830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/categories?post=17830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cg-method.com\/after-effects\/wp-json\/wp\/v2\/tags?post=17830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}