How can I convert XY data into a 0~100% slider value? Would the expression assume the dimensions of the comp or the layer to ensure proper alignment?
x = transform.position[0];
p = linear(x, 0, thisComp.width, 0, 100);
p
What I've done is to take the x position value of the layer and use the linear interpolation method to interpret the total width of the comp to 100. You could also perform the task by using x position/width*100. This would return the X position as a percentage of the comp width but would not limit the value to 100%.
I hope this helps.
L = thisComp.layer("Null 1");
controlPoint = fromComp(L.toComp(L.transform.anchorPoint)); //sub in target point here
theta = degreesToRadians(effect("Linear Wipe")("Wipe Angle")); //get angle
m = Math.tan(theta)*source.pixelAspect; //get slope of line defined by wipe
//get determinates for anchor line
if(m < 0) { a1 = [0, 0]; a2= [width, height] } else { a1 = [0, height]; a2 = [width, 0]; }
//get determinates for wipe line
b1 = controlPoint;
b2 = b1+[1/m, 1]
//define individual variables for (slightly better) readability
x1 = a1[0];
y1 = a1[1];
x2 = a2[0];
y2 = a2[1];
x3 = b1[0];
y3 = b1[1];
x4 = b2[0];
y4 = b2[1];
//get point of intersection (this was transcribed straight from <http://en.wikipedia.org/wiki/Line-line_intersection)>
P = [ ( (x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) ) , ( (x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) ) ]
linear(length(P, a1), 0, length(a1, a2), 0, 100) //now turn the point of intersection into a percentage
Here's what I've come up with:
L = thisComp.layer("Null 1");
controlPoint = fromComp(L.toComp(L.transform.anchorPoint)); //sub in target point here
theta = (effect("Linear Wipe")("Wipe Angle")+100000*360)%360; //get angle
m = Math.tan(degreesToRadians(theta))*source.pixelAspect; //get slope of line defined by wipe
//get determinates for anchor line
if(theta < 90) {
a1 = [0, height];
a2 = [width, 0];
} else if(theta < 180) { a1 = [0, 0];
a2= [width, height];
} else if(theta < 270){
a2 = [0, height];
a1 = [width, 0];
} else {
a2 = [0, 0];
a1= [width, height];
}
//get determinates for wipe line
b1 = controlPoint;
b2 = b1+[1/m, 1]
//define individual variables for (slightly better) readability
x1 = a1[0]; y1 = a1[1]; x2 = a2[0]; y2 = a2[1]; x3 = b1[0]; y3 = b1[1]; x4 = b2[0]; y4 = b2[1];
//get point of intersection (this was transcribed straight from <http://en.wikipedia.org/wiki/Line-line_intersection)>
P = [ ( (x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) ) , ( (x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) ) ]
if(length(P, a2) < length(a2, a1)) linear(length(P, a1), 0, length(a1, a2), 0, 100) //now turn the point of intersection into a percentage else 0
Sub in your layer name for "Null 1", or make your own assignment to controlPoint.