Discussion:
Converting a point control to a slider
(too old to reply)
N***@adobeforums.com
2009-02-05 23:12:51 UTC
Permalink
Some old plug-ins like Linear Wipe have a simple percentage slider to control the amount of wipe. However, I'd like to align a linear wipe with a motion tracked point.

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?
A***@adobeforums.com
2009-02-06 05:22:07 UTC
Permalink
Is the idea that the linear wipe should intersect the point at a given angle?
R***@adobeforums.com
2009-02-06 05:40:03 UTC
Permalink
I'm not exactly sure that I follow what you're trying to do. If you want to take the x position value and use that to vary a value between 0 and 100 you might try something like this:

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.
A***@adobeforums.com
2009-02-06 17:05:15 UTC
Permalink
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 = 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
A***@adobeforums.com
2009-02-06 17:58:15 UTC
Permalink
Okay, trying that again.

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.
N***@adobeforums.com
2009-02-10 22:35:15 UTC
Permalink
Whoa! Thanks man! I'll try it out!

Loading...