Skip to content

Commit

Permalink
Avg Position Null: Remove dynamic, move null to top of layers stack
Browse files Browse the repository at this point in the history
  • Loading branch information
zlovatt committed Sep 5, 2023
1 parent db36dbe commit dc8db4a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 46 deletions.
55 changes: 13 additions & 42 deletions Create Average Position Null.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,12 @@
*
* Modifiers:
* - Hold SHIFT to NOT parent the layers to the null
* - Hold CTRL / CMD to add an expression that keeps the null centered between those layers
* (Note: this disables parenting)
*
* @author Zack Lovatt <[email protected]>
* @version 0.6.0
* @version 0.7.0
*/
(function setToAvgPosition() {
var keepLayersOrphans = ScriptUI.environment.keyboardState.shiftKey;
var useDynamicPosition = false;

if (ScriptUI.environment.keyboardState.ctrlKey || ScriptUI.environment.keyboardState.metaKey) {
useDynamicPosition = true;
keepLayersOrphans = true;
}

var comp = app.project.activeItem;

Expand All @@ -39,43 +31,22 @@
avgNull.name = "Average Position Null";
avgNull.guideLayer = true;
avgNull.label = 14;
avgNull.moveBefore(layers[0]);

var ii, il;

if (useDynamicPosition) {
var firstLayerIndex = layers[0].index;
var lastLayerIndex = layers[layers.length - 1].index;

avgNull.position.expression = [
"var firstLayerIndex = " + firstLayerIndex + ";",
"var lastLayerIndex = " + lastLayerIndex + ";",
"",
"var sum = [0, 0];",
"var numLayers = lastLayerIndex - firstLayerIndex + 1;",
"",
"for (var ii = firstLayerIndex; ii <= lastLayerIndex; ii++) {",
" var layer = thisComp.layer(ii);",
" sum += layer.position;",
"}",
"",
"sum / numLayers;"
].join("\n");
} else {
var sumX = 0;
var sumY = 0;
var sumX = 0;
var sumY = 0;

for (ii = 0, il = layers.length; ii < il; ii++) {
var layer = layers[ii];
var layerPos = layer.position.valueAtTime(comp.time, false);
sumX += layerPos[0];
sumY += layerPos[1];
}
for (var ii = 0, il = layers.length; ii < il; ii++) {
var layer = layers[ii];
var layerPos = layer.position.valueAtTime(comp.time, false);
sumX += layerPos[0];
sumY += layerPos[1];
}

var avgX = sumX / layers.length;
var avgY = sumY / layers.length;
var avgX = sumX / layers.length;
var avgY = sumY / layers.length;

avgNull.position.setValue([avgX, avgY]);
}
avgNull.position.setValue([avgX, avgY]);

if (!keepLayersOrphans) {
for (ii = 0, il = layers.length; ii < il; ii++) {
Expand Down
7 changes: 3 additions & 4 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,10 +217,9 @@ Counts all of the keyframes (including markers) in selected comps in project pan

Creates a new null at the center of selected layers (or all comp layers, if none selected), and set this null as those layers' parent.

| Modifier | Effect |
| -------- | ------------------------------------------------------------------- |
| SHIFT | Don't parent the layers to the null |
| CTRL/CMD | Have the null's position be dynamically set to the center of layers |
| Modifier | Effect |
| -------- | ----------------------------------- |
| SHIFT | Don't parent the layers to the null |

</div>
</div>
Expand Down

0 comments on commit dc8db4a

Please sign in to comment.