第一章 Adobe After Effects AE插件开发 SDK入门-AE内部结构定义(二)-参数值的定义

栾越
2023-12-01

1.AE内部结构-参数值的定义

  在AE内部传递参数,特别是一些复杂计算,对值具有一定的限制,源代码如下:

/* PF_ParamFlags

	These flags are passed when adding a param (using PF_ADD_PARAM) to specify
	some details about how the param can be used.  The flags
	are:

	PF_ParamFlag_CANNOT_TIME_VARY
		If this is passed, the parameter will not be allowed to vary
		over time -- no keyframe controller will appear at the right.

	PF_ParamFlag_CANNOT_INTERP
		If this is passed, parameter values are not interpolated
		between.  You can still use no interp and discontinuous interp.
	
	PF_ParamFlag_COLLAPSE_TWIRLY / PF_ParamFlag_START_COLLAPSED
		Set this flag if you want the parameter's twirly arrow in the
		Effect Control Window to be twirled up by default when the
		effect is first applied.  New in AE 4.0: you can now set &
		clear this bit when handling PF_Cmd_UPDATE_PARAMS_UI and
		PF_Cmd_USER_CHANGED_PARAM messages, so as to twirl your
		parameters and groups up and down at will.

	PF_ParamFlag_SUPERVISE
		If this is passed, PF_Cmd_USER_CHANGED_PARAM will be sent when
		this parameter changes.

	PF_ParamFlag_USE_VALUE_FOR_OLD_PROJECTS
		This only affects the loading of projects saved with an older version
		of the effect which lacks parameters added later. When set, the PF_ParamDef 
		"value" field set in PF_ADD_PARAM will be used to initialize the missing parameter, 
		but the "dephault" field will still be used for initial value of the parameter when
		the effect is newly applied or reset. This is useful for when you want a 
		parameter to default to one value but need it set to something else to 
		preserve rendering behaviour for older projects.

		This flag is valid for all PF_Param types except PF_Param_LAYER

	PF_ParamFlag_LAYER_PARAM_IS_TRACKMATTE
		For PF_Param_LAYER, this flag indicates that the layer parameter is to be presented
		as a track matte. Supported by Premiere, ignored in AE.

	PF_ParamFlag_EXCLUDE_FROM_HAVE_INPUTS_CHANGED
		See doc for PF_HaveInputsChangedOverTimeSpan.

	PF_ParamFlag_SKIP_REVEAL_WHEN_UNHIDDEN
		when this param is "un hidden" (cuz it may hide and show), then the GUI is NOT to cause
		the parameter to be "revealed", ie: it won't twirl down it's parents and scroll it into view

**/
enum {
	PF_ParamFlag_RESERVED1			= 1 << 0,
	PF_ParamFlag_CANNOT_TIME_VARY	= 1 << 1,		/* can't vary over time */
	PF_ParamFlag_CANNOT_INTERP		= 1 << 2,		/* can only vary discontinuously */
	PF_ParamFlag_RESERVED2			= 1 << 3,		/* was _old_ PF_ParamFlag_WANTS_UPDATE value, never used */
	PF_ParamFlag_RESERVED3			= 1 << 4,		/* was _old_ PF_ParamFlag_SEPARATE, now use PF_PUI_ECW_SEPARATOR */
	PF_ParamFlag_COLLAPSE_TWIRLY	= 1 << 5,		/* controls the twirl-state of the twirly-arrow in the ECW (dynamic) */
	PF_ParamFlag_SUPERVISE			= 1 << 6,		/* call me with PF_Cmd_USER_CHANGED_PARAM (new in AE 4.0) */
	PF_ParamFlag_START_COLLAPSED = PF_ParamFlag_COLLAPSE_TWIRLY,	/* when first applied, param comes up collapsed */
	PF_ParamFlag_USE_VALUE_FOR_OLD_PROJECTS			= 1 << 7,		/* see extensive comment above */
	PF_ParamFlag_LAYER_PARAM_IS_TRACKMATTE			= 1 << 7,		/* only valid for layer parameters. indicates that a layer param is used as a track-matte with applied filters (used in Premiere, ignored in AE) */
	PF_ParamFlag_EXCLUDE_FROM_HAVE_INPUTS_CHANGED	= 1 << 8,		/* only relevant if you call PF_HaveInputsChangedOverTimeSpan() */
	PF_ParamFlag_SKIP_REVEAL_WHEN_UNHIDDEN			= 1 << 9		/* dont reveal this stream when un-hidden (use only during param setup) */
};
typedef A_long PF_ParamFlags;//不同类型的参数标志

//错误类型
enum {
	PF_Err_NONE = 0,
	PF_Err_OUT_OF_MEMORY = 4,//内存溢出
	PF_Err_INTERNAL_STRUCT_DAMAGED = PF_FIRST_ERR,
	PF_Err_INVALID_INDEX,			/* out of range, or action not allowed on this index */
	PF_Err_UNRECOGNIZED_PARAM_TYPE,
	PF_Err_INVALID_CALLBACK,
	PF_Err_BAD_CALLBACK_PARAM,
	PF_Interrupt_CANCEL,				/* Returned when user interrupts rendering */
	PF_Err_CANNOT_PARSE_KEYFRAME_TEXT	/* Returned from PF_Arbitrary_SCAN_FUNC when effect
											cannot parse arbitrary data from text */
};
typedef	A_long PF_Err;


enum {
	PF_WorldFlag_DEEP 	   		= 1L << 0,
	PF_WorldFlag_WRITEABLE 		= 1L << 1,


	PF_WorldFlag_RESERVED0		= 1L << 24,
	PF_WorldFlag_RESERVED1		= 1L << 25,
	PF_WorldFlag_RESERVED2		= 1L << 26,
	PF_WorldFlag_RESERVED3		= 1L << 27,
	PF_WorldFlag_RESERVED4		= 1L << 28,
	PF_WorldFlag_RESERVED5		= 1L << 29,
	PF_WorldFlag_RESERVED6		= 1L << 30,
	PF_WorldFlag_RESERVED		= 1L << 31
};

typedef A_long PF_WorldFlags;

#define PF_WORLD_IS_DEEP(W)		( ((W)->world_flags & PF_WorldFlag_DEEP) != 0 )

//字符串的长度限制
#define PF_MAX_CHAN8			255
#define PF_HALF_CHAN8			128
#define PF_MAX_CHAN16			32768
#define PF_HALF_CHAN16			16384

  参数意义见注释。

2.作者答疑


  如有疑问,请留言。

 类似资料: