// from campkeyframesf = transform.scale[0]/100; ov = value; nv = ov / sf// for parented shapesvalue / length(toComp([0,0]), toComp([0.7071,0.7071])) || 0.001;// https://battleaxe.tumblr.com/post/101945073972/maintain-stroke-weight-expression
// shape group indexthisProperty.propertyGroup(2).propertyIndex // change num accordingly// using name as index eg. line_1parseInt(thisProperty.propertyGroup(3).name.split("_")[1]); // method 1parseInt(content(1).name.split("_")[1]) // method 2
// effect indexthisProperty.propertyGroup(1).propertyIndex// number of effectsthisProperty.propertyGroup(2).numPropertiesthisLayer("Effects").numPropertiesthisComp.layer("layer")("Effects").numProperties// for ref layer
if (numKeys >1 && time > key(numKeys).time){t1 = key(1).time;t2 = key(numKeys).time;span = t2 - t1;delta = time - t2;seg = Math.floor(delta/span);t = delta%span;valueAtTime((seg%2) ? (t1 + t) : (t2 - t));}elsevalue
if (numKeys >1 && time > key(numKeys).time){t1 = key(1).time;t2 = key(numKeys).time;span = t2 - t1;delta = time - t2;t = delta%span;valueAtTime(t1 + t)}elsevalue
Source:
Dan Ebbert — circle
vertices = [[0,0], [100,0], [100,100], [0,100]];inTangents=[]outTangents=[]closed = true;createPath(vertices,inTangents, outTangents, closed);
l = 100;w = 50;vertices = [[0,0], [-w,l], [w,l]]inTangents=[]outTangents=[]closed = true;createPath(vertices,inTangents, outTangents, closed);
// connect to sliderslet w = 1000;let points = 200;let steps = 20;let angle = 0;let r = w / 2;let step = (Math.PI * 2) / steps;let radius = 0;let vertices = [];//mainfor (i = 0; i < points; i++) {angle += step;radius = i / points * r;x = Math.cos(angle) * radius;y = Math.sin(angle) * radius;vertices[i] = [x, y];}createPath(vertices, [], [], 0)
// var ctrl = thisLayer;var inc = 1500;var amp = 300;var n = 30;var freq = .5var seed = 185;var vertices = [];var x, y, pt, phase;seedRandom(seed, true)var offset = random() * Math.PI * 2for (i = 0; i < n; i++) {pt = i / (n - 1);x = inc * ptphase = time * freq * Math.PI * 2 + pt * Math.PI//phase += offset;y = amp * Math.sin(phase);//y *= Math.sin(phase / 2);//y *= Math.sin(phase / 3);//y += noise(time + pt) * 100;// create pointvertices[i] = [x, y]}createPath(vertices, [], [], 0)
// var ctrl = thisLayer;var inc = 1500;var amp = 300;var n = 50;var freq = .5var seed = 185;var r = 0.25;var vertices = [];var x, y, pt, phase;seedRandom(seed, true)var offset = random() * Math.PI * 2for (i = 0; i < n; i++) {pt = i / (n - 1);x = inc * ptphase = time * freq * Math.PI * 2 + (pt * Math.PI /r)// phase += offset;w1 = Math.sin(phase);y = amp * w1;// create pointvertices[i] = [x, y]}createPath(vertices, [], [], 0)
var pts = 50;var a = 500; //radiusvar completion = 100 / 100;var t, x, y;var vertices = [];for (i = 0; i < pts; i++) {t = i / pts * Math.PI * 2 * completion; // element num/ num of elements ;x = a * Math.cos(t);y = a * Math.sin(t);vertices[i] = [x, y]}createPath(vertices, [], [], 1)
w = 500; // widthr = w/2;ratio = .5523;t = r*ratio;vertices = [[r,0],[0,r],[r,2*r],[2*r,r]];inTangents = [[t,0],[0,-t],[-t,0],[0,t]];outTangents = [[-t,0],[0,t],[t,0],[0,-t]];createPath(vertices,inTangents,outTangents,1);
var pts = 50;var u = 1var v = 10;var a = 75 // inner radiusvar c = 450 // outer radiusvar completion = 100 / 100;var t, x, y;var vertices = [];for (i = 0; i < pts; i++) {t = i / pts * Math.PI * 2 * completion; // element num/ num of elements ;x = (c + a * Math.cos(v * t)) * Math.cos(u * t);y = (c + a * Math.cos(v * t)) * Math.sin(u * t);vertices[i] = [x, y]}createPath(vertices, [], [], 1)