Skip to content

Instantly share code, notes, and snippets.

@eeropic
Last active June 12, 2024 10:23
Show Gist options
  • Select an option

  • Save eeropic/eea5c38887178b1756d99da453e4977f to your computer and use it in GitHub Desktop.

Select an option

Save eeropic/eea5c38887178b1756d99da453e4977f to your computer and use it in GitHub Desktop.
After effects expressions and scripts collected from various authors and myself.
//Position
L=thisComp.layer("Object center");
L.toWorld(L.effect(name)("3D Point"));
//Scale
L =thisComp.layer("Object center");
[L.transform.scale[0]/100*value[0],L.transform.scale[1]/100*value[1],L.transform.scale[2]/100*value[2]];
//Orientation
L = thisComp.layer("Object center");
u = fromWorldVec(L.toWorldVec([1,0,0]));
v = fromWorldVec(L.toWorldVec([0,1,0]));
w = normalize(fromWorldVec(L.toWorldVec([0,0,1])));
sinb = clamp(w[0],-1,1);
b = Math.asin(sinb);
cosb = Math.cos(b);
if (Math.abs(cosb) > .0005){
c = -Math.atan2(v[0],u[0]);
a = -Math.atan2(w[1],w[2]);
}else{
a = (sinb < 0 ? -1 : 1)*Math.atan2(u[1],v[1]);
c = 0;
}
[radiansToDegrees(a),radiansToDegrees(b),radiansToDegrees(c)]
from Paul Conigliaro
/********************************
Path Length
Writes the length of the first selected path to the Info panel
and copies result to clipboard
********************************/
{
var thisComp = app.project.activeItem;
var thisShape = thisComp.selectedProperties[0];
try{
var pathLength = Math.round(getPathLength(thisShape.property("Path").value)*100)/100;
if($.os.indexOf("Macintosh") === -1) { var cmdString = 'cmd.exe /c cmd.exe /c "echo ' + pathLength + ' | clip"'; }
else { var cmdString = 'echo "' + pathLength + '" | pbcopy'; }
system.callSystem(cmdString);
clearOutput();
writeLn("Path Length: " + pathLength + " pixels.");
//Uncomment this line to display alert instead.
//alert("Path Length: " + pathLength + " pixels.");
} catch(e){
alert("ERROR: Did you select only paths?");
}
function getPathLength(shapePath) {
var len = 0;
var verts = shapePath.vertices;
var numVerts = verts.length;
var ins = shapePath.inTangents;
var outs = shapePath.outTangents;
for (var i = 0; i < numVerts-1; i++) { len += getCurveLength(verts[i],verts[i+1],outs[i],ins[i+1]); }
if(shapePath.closed == true) { len += getCurveLength(verts[numVerts-1],verts[0],outs[numVerts-1],ins[0]);}
return len;
//Curve Segement Length function from Hernan Torrisi
function getCurveLength(initPos, endPos, outBezier, inBezier) {
var k, curveSegments = 100, point, lastPoint = null, ptDistance, absToCoord, absTiCoord, triCoord1, triCoord2, triCoord3, liCoord1, liCoord2, ptCoord, perc, addedLength = 0, i, len;
for (k = 0; k < curveSegments; k += 1) {
point = [];
perc = k / (curveSegments - 1);
ptDistance = 0;
absToCoord = [];
absTiCoord = [];
len = outBezier.length;
for (i = 0; i < len; i += 1) {
if (absToCoord[i] === null || absToCoord[i] === undefined) {
absToCoord[i] = initPos[i] + outBezier[i];
absTiCoord[i] = endPos[i] + inBezier[i];
}
triCoord1 = initPos[i] + (absToCoord[i] - initPos[i]) * perc;
triCoord2 = absToCoord[i] + (absTiCoord[i] - absToCoord[i]) * perc;
triCoord3 = absTiCoord[i] + (endPos[i] - absTiCoord[i]) * perc;
liCoord1 = triCoord1 + (triCoord2 - triCoord1) * perc;
liCoord2 = triCoord2 + (triCoord3 - triCoord2) * perc;
ptCoord = liCoord1 + (liCoord2 - liCoord1) * perc;
point.push(ptCoord);
if (lastPoint !== null) {
ptDistance += Math.pow(point[i] - lastPoint[i], 2);
}
}
ptDistance = Math.sqrt(ptDistance);
addedLength += ptDistance;
lastPoint = point;
}
return addedLength;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment