跳转到内容

处理路径

处理路径

访问路径数据

路径与其他参数类型不同,因为它们的值不能直接访问。除了检查它们的状态(类似于图层参数),您必须使用我们的路径数据函数套件来获取路径在给定时间的详细信息。请参阅 PF_PathQuerySuite1PF_PathDataSuite。在路径参数传递给您时,切勿直接使用其中的值,除非您已经检查过它;虽然删除的路径将不可用,但进一步的更新是“延迟”进行的(稍后);除非您检查路径,否则您的效果将看不到这些更改。


操作路径数据

您还可以使用 AEGP_MaskOutlineSuite3 来操作路径。请参阅 AEGP 套件的作弊效果用法。路径参数被视为不透明的数据块;必须使用获取和设置函数来访问和操作它们。与图层参数一样,访问它们的特效必须检查它们的状态(并返回!)。


顶点

路径顶点比简单的点更复杂。所有成员变量都是 PF_FpLongs(双精度浮点数),并且位于图层的坐标空间中。


PF_PathVertex

成员描述
x顶点的位置。
y
tan_in_x进入的切线点。
tan_in_y
tan_out_x离开的切线点。
tan_out_y

PF_PathDataSuite

此套件提供有关路径(顶点序列)的信息。

函数描述
PF_PathIsOpen如果路径未闭合(如果起点和终点顶点不相同),则返回 TRUE
PF_PathIsOpen(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
PF_Boolean *openPB);
PF_PathNumSegments检索路径中的段数。
N 段意味着有段 [0.N-1];段 J 由顶点 JJ+1 定义。
PF_PathNumSegments(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
A_long *num_segmentsPL);
PF_PathVertexInfo检索指定路径的 PF_PathVertex
点的范围是 [0.num_segments];对于闭合路径,vertex[0] == vertex[num_segments]
PF_PathVertexInfo(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
A_long which_pointL,
PF_PathVertex *vertexP);
PF_PathPrepareSegLength这个相当反直觉的函数通知 After Effects 您将要询问段的长度(使用下面的 PF_PathGetSegLength),并且它最好做好准备。
frequencyL 表示您希望我们采样长度的次数;我们的内部效果使用 100。
PF_PathPrepareSegLength(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
A_long which_segL,
A_long frequencyL,
PF_PathSegPrepPtr *lengthPrepPP);
PF_PathGetSegLength检索给定段的长度。
PF_PathGetSegLength(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
A_long which_segL,
PF_PathSegPrepPtr *lengthPrepP0,
PF_FpLong *lengthPF);
PF_PathEvalSegLength检索沿给定路径段长度 lengthF 的点的位置。
PF_PathEvalSegLength(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
PF_PathSegPrepPtr *lengthPrepPP0,
A_long which_segL,
PF_FpLong lengthF,
PF_FpLong *x,
PF_FpLong *y);
PF_PathEvalSegLengthDeriv1检索沿给定路径段长度 lengthF 的点的位置和一阶导数。
如果您不确定为什么需要这个,请不要使用它。数学很难。
PF_PathEvalSegLengthDeriv1(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
PF_PathSegPrepPtr *lengthPrepPP0,
A_long which_segL,
PF_FpLong lengthF,
PF_FpLong *x,
PF_FpLong *y,
PF_FpLong *deriv1x,
PF_FpLong *deriv1y);
PF_PathCleanupSegLength当您完成评估该段长度时调用此函数,以便 After Effects 可以正确清理 PF_PathSegPrepPtr
PF_PathCleanupSegLength(
PF_ProgPtr effect_ref0,
PF_PathOutlinePtr pathP,
A_long which_segL,
PF_PathSegPrepPtr *lengthPrepPP);
PF_PathIsInverted如果路径反转,则返回 TRUE
PF_PathIsInverted(
PF_ProgPtr effect_ref,
PF_PathID unique_id,
PF_Boolean *invertedB);
PF_PathGetMaskMode检索给定路径的模式。
PF_PathGetMaskMode(
PF_ProgPtr effect_ref,
PF_PathID unique_id,
PF_MaskMode *modeP);
遮罩模式是以下之一:
- PF_MaskMode_NONE
- PF_MaskMode_ADD
- PF_MaskMode_SUBTRACT
- PF_MaskMode_INTERSECT
- PF_MaskMode_LIGHTEN
- PF_MaskMode_DARKEN
- PF_MaskMode_DIFFERENCE
- PF_MaskMode_ACCUM
PF_PathGetName检索路径的名称(最多 PF_MAX_PATH_NAME_LEN 长度)。
PF_PathGetName(
PF_ProgPtr effect_ref,
PF_PathID unique_id,
A_char *nameZ);

PF_PathQuerySuite1

此套件用于识别和访问与特效源图层关联的路径。

函数用途
PF_NumPaths检索与特效源图层关联的路径数量。
PF_NumPaths(
PF_ProgPtr effect_ref,
A_long *num_pathsPL);
PF_PathInfo检索指定路径的 PF_PathID。
PF_PathInfo(
PF_ProgPtr effect_ref,
A_long indexL,
PF_PathID *unique_idP);
PF_CheckoutPath获取指定时间的路径的 PF_PathOutlinePtr。
PF_CheckoutPath(
PF_ProgPtr effect_ref,
PF_PathID unique_id,
A_long what_time,
A_long time_step,
A_u_long time_scale,
PF_PathOutlinePtr *pathPP);
PF_CheckinPath将路径释放回 After Effects。无论遇到任何错误条件,始终执行此操作。
每次检出都必须通过检入来平衡,否则将导致问题。
PF_CheckinPath(
PF_ProgPtr effect_ref,
PF_PathID unique_id,
PF_Boolean changedB,
PF_PathOutlinePtr pathP);