【AE表达式】 fixedAnchorPoint.ffx 变化图形固定锚点

写了个图层锚点固定的表达式,直接复制黏贴去图层下面锚点里面就行,要始终居中就两个参数都0.5。

horizontal=0;

vertical=0;


/*"left,top"={horizontal=0,vertical=0}

"middle"={horizontal=0.5,vertical=0.5}

"right,bottom"={horizontal=1,vertical=1}

*/


obj=thisLayer;

objS=obj.sourceRectAtTime();

w=objS.width;

h=objS.height;

l=objS.left;

t=objS.top;

[l+w*horizontal,t+h*vertical];


-----------------------------------

主要是用在形状图层以及文字图层,因为这两种图层的图层大小能够变化,不同图层的尺寸具体看这里 https://leizingjiu.lofter.com/post/cbeb9_d6c8e50


------------------------------------------------------------------------------------------------------

2017年5月27日更新:


形状/文本图层的动态固定锚点:

/*拖动属性值,以改变所需的固定点;中心点为[0,0];Change the position value to obtain your required anchor.*/

k=50; /*拖动属性值的幅度*/

horizontal=(clamp(value[0],0-k,k)*(-1)+k)/(2*k);vertical=(clamp(value[1],0-k,k)*(-1)+k)/(2*k);/*leizingjiu.lofter.com*/obj=thisLayer;objS=obj.sourceRectAtTime();w=objS.width;h=objS.height;l=objS.left;t=objS.top;[l+w*horizontal,t+h*vertical];


形状图层中矩形路径/椭圆路径的动态固定锚点

includeFillet=0; /*0——不包含圆角;1——包含圆角*/

/*拖动属性值,以改变所需的固定点;中心点为[0,0];

includeFillet=0时,锚点位于图形边缘,includeFillet=1时,锚点位于圆角圆心上;

请在 形状图层 - 内容- 组- 矩形路径/椭圆路径 - 位置 中黏贴此表达式。

Change the position value to obtain your required anchor;

when includeFillet=0, the anchor point is on the shape's edge; when includeFillet=1, the anchor point is on the center of the fillet;

paste this expression on shape layer -  content - group(rect/oval) - rect/oval path - position . */

k=50; /*拖动属性值的幅度*/

horizontal=(clamp(value[0],0-k,k)*(-1)+k)/(2*k);    vertical=(clamp(value[1],0-k,k)*(-1)+k)/(2*k);    /*horizontal=0;vertical=0;*//*0~1*/    var para=thisProperty.propertyGroup(1);/*上一层*/    var s=size=para.size;/*上一层下面的尺寸*/    var r=0;/*默认圆角半径是0*/    /*leizingjiu.lofter.com*/    try{r=radius=para.roundness;    r=clamp(r,0,Math.min(s[0],s[1])/2);}catch(err){r=0;}    try{if(includeFillet==0){r=0;}else{r=r;}}catch(err){r=0;}    h=clamp(horizontal,0,1);   v=clamp(vertical,0,1);   d=direction=([h,v]-[0.5,0.5])*(-2);    p=[(s[0]-2*r)*d[0],(s[1]-2*r)*d[1]]/2;



-----------------------------------------------------------------------------------------------------------------------------------

2017年8月6日更新

形状/文本图层的动态固定锚点注释:

k=50;

 /*拖动属性值的幅度*/

horizontal=(clamp(value[0],0-k,k)*(-1)+k)/(2*k);

/*水平变量 = ((限制 属性值的第一个值 在 -k 到 k 之间) * (-1) + k )/(2*k)*/

vertical=(clamp(value[1],0-k,k)*(-1)+k)/(2*k);

obj=thisLayer;

/*设定简称obj 等于 这个图层*/

objS=obj.sourceRectAtTime();

/*设定简称objS等于 这个图层 在当前时间的原始矩形 */

w=objS.width;/*设定当前时间的原始矩形的宽*/

h=objS.height;/*设定当前时间的原始矩形的高*/

l=objS.left;/*设定当前时间的原始矩形的左坐标*/

t=objS.top;/*设定当前时间的原始矩形的上坐标*/

[l+w*horizontal,t+h*vertical];

/*锚点的x等于左坐标+宽乘以水平变量,y等于上坐标+高乘以垂直变量*/


形状图层中矩形路径/椭圆路径的动态固定锚点

includeFillet=0;

 /*0——不包含圆角;1——包含圆角*/

k=50;

 /*拖动属性值的幅度*/

horizontal=(clamp(value[0],0-k,k)*(-1)+k)/(2*k);

/*水平变量 = ((限制 属性值的第一个值 在 -k 到 k 之间) * (-1) + k )/(2*k)*/

vertical=(clamp(value[1],0-k,k)*(-1)+k)/(2*k);

var para=thisProperty.propertyGroup(1);/*获取当前属性(位置)的上一层属性(矩形路径/椭圆路径)*/

var s=size=para.size;/*获取上一层(矩形或椭圆路径)下面的尺寸*/

var r=0;/*默认圆角半径是0*/

try{r=radius=para.roundness;    r=clamp(r,0,Math.min(s[0],s[1])/2);}catch(err){r=0;}

/*获取父层级下的圆角属性,并且将r设定为圆角中较小的值,假如父层级下没有圆角属性则报错,获取错误后,设定r等于0*/

try{if(includeFillet==0){r=0;}else{r=r;}}catch(err){r=0;}

/*假如 判断圆角 的值,设置为0,那么r为0,否则r等于前面设定的圆角值或者0;假如 判断圆角 后面的值,被人为设定为其它值,则报错,获取错误后,设定r=0*/

h=clamp(horizontal,0,1);

/*将水平变量控制在1到0之间*/

v=clamp(vertical,0,1);

d=direction=([h,v]-[0.5,0.5])*(-2);

/*将两个方向的变量,分别与0.5比较,差值乘以-2*/

p=[(s[0]-2*r)*d[0],(s[1]-2*r)*d[1]]/2;

/*位置分别等于  宽或者高 减去 两倍的圆角半径 的差 乘以 方向矢量  除以 2*/


评论
热度 ( 4 )

© leizingjiu | Powered by LOFTER