写了个图层锚点固定的表达式,直接复制黏贴去图层下面锚点里面就行,要始终居中就两个参数都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*/
© leizingjiu | Powered by LOFTER