您可以针对以下对象使用表达式读写路径点或顶点的 x 坐标和 y 坐标:
图层蒙版
贝塞尔曲线形状
针对“绘画”和“Roto 笔刷和优化边缘”效果的画笔描边。
表达式方法:
Path points() 方法:{pathProperty}.points(t = time)获取路径上所有点的 x、y 坐标。图层蒙版路径点的坐标相对于其左上角的图层的原点。贝塞尔曲线形状路径点的坐标相对于路径的形状组的锚点,例如,“变换: 形状 1”>“锚点”。笔刷笔触路径点的坐标与笔触的开始相关;第一个点为 [0,0]。(可选)指定采样到路径的时间。复制路径时,您可以将此方法传递到点参数的 createPath() 方法。
参数:
返回:
数偶数组的数组,四舍五入到小数点后四位。
Path inTangents() 方法:{pathProperty}.inTangents(t = time) 获取路径上所有点的入点手柄的 x、y 坐标。切点坐标值是相对于父点的坐标的位移。即,值 [0,0] 在入点处不产生弯度。当复制路径时,可以针对 inTangents 参数将此方法传递给 createPath() 方法。(可选)指定采样到路径的时间。
参数:
返回:
数偶数组的数组,四舍五入到小数点后四位。
Path outTangents() 方法:{pathProperty}.outTangents(t = time) 获取路径上所有点的出点手柄的 x、y 坐标。切点坐标值是相对于父点坐标的位移 - 值 [0,0] 在引出切点处不产生弯度。当复制路径时,可以针对 outTangents 参数将此方法传递给 createPath() 方法。(可选) 指定采样到路径的时间。
参数:
返回:
数偶数组的数组,四舍五入到小数点后四位。
Path isClosed() 方法:{pathProperty}.isClosed() 决定路径是开放的还是闭合的。如果路径是闭合的,则返回 true;如果路径是开放的,则返回 false。当复制路径时,可以针对 is_closed 参数将此方法传递给 createPath() 方法。
参数:
无
返回:
布尔值
Path pointOnPath() 方法 {pathProperty}.pointOnPath(percentage = 0.5, t = time) 获取路径上任意点的 x、y 坐标。该点表示为路径弧长的百分比。第一个点为 0%,最后一个点为 100%。如果路径是闭合的,那么 0% 和 100% 将返回相同的坐标。弧长的百分比用于确保沿路径的速度一致。除了 0% 和 100% 之外,百分比并非必须与路径上的贝塞尔曲线点对应 - 对于三个点的路径,第二点并非必须在 50%。这也意味着对于具有相同点的开放路径和闭合路径,由于闭合路径含有附加长度,因此沿开放路径的百分比将不会返回与闭合路径相同的坐标。(可选) 指定采样到路径的时间。
参数:
返回:
数偶数组。
Path tangentOnPath() 方法 {pathProperty}.tangentOnPath(percentage = 0.5, t = time) 获取路径上经过计算的任意点的出点手柄的 x、y 坐标。切点坐标值是相对于父点的坐标的位移 - 值 [0,0] 在出点处不产生弯度。入点手柄是此值的负值(将 x、y 坐标乘以 -1)。切线的父点表示为路径的弧长的百分比。如果用户定义的点也在该弧长百分比的范围内,那么 tangentOnPath() 返回的坐标从其父点开始计算,并且将与 outTangents() 返回的那些坐标有所不同。父点的坐标与 tangentOnPath() 坐标之间的直线距离将始终为 1。您可以将返回的坐标相乘以产生更长的切线,例如,(myPath.tangentOnPath()*100)。(可选) 指定采样到路径的时间。
参数:
返回:
数偶数组。
Path normalOnPath() 方法 {pathProperty}.normalOnPath(percentage = 0.5, t = time) 获取路径上经过计算的任意点的法线的 x、y 坐标。法线的切点坐标值是相对于父点的坐标的位移 - 值 [0,0] 与父点相同。法线的父点表示为路径的弧长的百分比。请阅读 pointOnPath() 方法的说明以了解有关弧长百分比的详细信息。normalOnPath() 返回的坐标从其父点开始计算。父点的坐标与 normalOnPath() 坐标之间的直线距离将始终为 1。您可以将返回的坐标相乘以产生更长的法线,例如,(myPath.normalOnPath()*100)。(可选) 指定采样到路径的时间。
参数:
返回:
数偶数组。
Path createPath() 方法 {pathProperty}.createPath(points = [[0,0], [100,0], [100,100], [0,100]], inTangents = [], outTangents = [], is_closed = true) 根据一组点和切线创建路径对象。这些点由表示其 x、y 坐标的数偶数组的数组定义。数组的长度必须至少为 1,可以为任意更大的长度。点的入点手柄和出点手柄由表示其 x、y 位移坐标的数偶数组的数组定义。切线数组的长度必须与点参数完全相同。切点坐标值是相对于父点的坐标的位移 - 值 [0,0] 在入点处不产生弯度。可以将路径的 points()、inTangents()、outTangents() 和 isClosed() 方法传递给 points、inTangents、outTangents 和 is_closed 参数来复制路径。可以将同一路径的 points 和 tangents 传递给 createPath(),经过修改即可生成不同结果。例如,以下表达式将通过不传递 inTangents 或 outTangents 参数从“蒙版 1”删除曲线:
myMask = mask("Mask 1").path; myMask.createPath(myMask.points());
下面的示例通过传递“蒙版 1”的 points 和 tangents,并通过将 is_closed 设置为 false 来将其转换为开放路径:
myMask = mask("Mask 1").path; myMask.createPath(myMask.points(), myMask.inTangents(), myMask.outTangents(), false);
返回:
路径对象。
示例:
示例 1
该示例在 time=0 时将点和切线坐标列表从“形状图层 1”图层的“形状 1”的“路径 1”写入字符串。将其应用于文本图层的源文本属性,以读出形状的坐标,以及入点和出点。
pointsList = ""; sampleTime = 0;myShape = thisComp.layer("Shape Layer 1").content("Shape 1").content("Path 1").path;
for (i = 0; i < myShape.points(sampleTime).length; i++) { pointsList += "c: " + myShape.points(sampleTime)[i].toString() + " i: " + myShape.inTangents(sampleTime)[i].toString() + " o: " + myShape.outTangents(sampleTime)[i].toString() + "\n"; }
pointsList;
示例 2
该示例会读取“纯色深灰 1”上的“蒙版 1”的第一个顶点的坐标,并将其转换为合成坐标。将其应用于效果的 2D 点控制,例如“写入”或“CC 粒子仿真系统 II”,以便效果追踪或跟踪动画蒙版的第一个点。复制效果并更改路径点指引值 ([0]) 以追踪或跟踪蒙版的其他点。
myLayer = thisComp.layer("Dark Gray Solid 1"); myLayer.toComp(myLayer.mask("Mask 1").maskPath.points()[0]);
明狮交流群
明狮交流群