Answered
レイヤーの上下左右の端に、ヌルを親として作成するスクリプト
以下のスクリプトは、選択した複数レイヤーの矩形の上下左右の端に、ヌルを親として作成するスクリプトです。
このスクリプトは、アンカーポイントが[0,0]にあるシェイプレイヤーには効果がありますが、アンカーポイントが0でなかったり、通常のレイヤーには効果がありません。
この問題をどなたか解決できませんか。 よろしくお願いします。
var proj = app.project;
// Ensure a composition is open
var comp = proj.activeItem;
// Ensure layers are selected
var selectedLayers = comp.selectedLayers;
// Prompt the user to select the position of the null object
var positionOptions = ["center", "top", "bottom", "left", "right"];
var position = prompt("select position (center, top, bottom, left, right):", "right");
// Start undo group
app.beginUndoGroup("Create Null at Selected Position");
// Calculate the bounding box of the selected layers
var minX = Infinity, maxX = -Infinity;
var minY = Infinity, maxY = -Infinity;
for (var i = 0; i < selectedLayers.length; i++) {
var layer = selectedLayers[i];
var layerBounds = layer.sourceRectAtTime(comp.time, false);
var layerMinX = layer.position.value[0] + layerBounds.left;
var layerMaxX = layerMinX + layerBounds.width;
var layerMinY = layer.position.value[1] + layerBounds.top;
var layerMaxY = layerMinY + layerBounds.height;
minX = Math.min(minX, layerMinX);
maxX = Math.max(maxX, layerMaxX);
minY = Math.min(minY, layerMinY);
maxY = Math.max(maxY, layerMaxY);
}
var centerX = (minX + maxX) / 2;
var centerY = (minY + maxY) / 2;
var centerZ = 0;
var nullPosition = [centerX, centerY, centerZ];
switch (position) {
case "top":
nullPosition = [centerX, minY, centerZ];
break;
case "bottom":
nullPosition = [centerX, maxY, centerZ];
break;
case "left":
nullPosition = [minX, centerY, centerZ];
break;
case "right":
nullPosition = [maxX, centerY, centerZ];
break;
}
// Create a null object at the calculated position
var nullLayer = comp.layers.addNull();
nullLayer.name = "Positioned Null (" + position + ")";
nullLayer.position.setValue(nullPosition);
// Parent the selected layers to the null object
for (var i = 0; i < selectedLayers.length; i++) {
var layer = selectedLayers[i];
layer.parent = nullLayer;
}
// End undo group
app.endUndoGroup();
