Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- var comp = app.project.activeItem;
- if (!(comp instanceof CompItem)) {
- alert("Please select a composition.");
- }
- app.beginUndoGroup("Create Solids for Nulls with Opacity Check");
- // Collect all null layers
- var nullLayers = [];
- for (var i = 1; i <= comp.numLayers; i++) {
- var layer = comp.layer(i);
- if (layer.nullLayer) {
- layer.name = "TackedNull_" + i;
- nullLayers.push(layer);
- }
- }
- var total = nullLayers.length;
- // Add progress text layer
- var progressText = comp.layers.addText("0 / " + total);
- progressText.enabled = false;
- progressText.moveToBeginning();
- // Loop through stored nulls and create solids
- for (var j = 0; j < nullLayers.length; j++) {
- var nullLayer = nullLayers[j];
- // Update progress display
- progressText.name= j + " / " + total;
- // Create solid
- var solid = comp.layers.addSolid([1, 1, 1], "Solid for " + nullLayer.name, 64, 64, comp.pixelAspect);
- solid.moveBefore(nullLayer);
- // Expression to follow the null's position in comp space
- var posExpr =
- "thisComp.layer('" + nullLayer.name + "').toComp([0,0,0]);";
- solid.property("Position").expression = posExpr;
- // Expression to sample alpha from the first layer at solid’s position
- var opacityExpr =
- "alpha = thisComp.layer('Roto Matte').sampleImage(transform.position, [width, height]/2, true, time)[3]\n" +
- "alpha > 0.2 ? 100 : 0;";
- solid.property("Opacity").expression = opacityExpr;
- solid.scale.setValue([250, 250]);
- }
- progressText.remove(); // Remove the progress text layer after completion
- app.endUndoGroup();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement