您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ANIM_animdata_filter函数代码示例

51自学网 2021-06-01 19:35:05
  C++
这篇教程C++ ANIM_animdata_filter函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ANIM_animdata_filter函数的典型用法代码示例。如果您正苦于以下问题:C++ ANIM_animdata_filter函数的具体用法?C++ ANIM_animdata_filter怎么用?C++ ANIM_animdata_filter使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了ANIM_animdata_filter函数的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: actkeys_mselect_single

/* option 1) select keyframe directly under mouse */static void actkeys_mselect_single(bAnimContext *ac, bAnimListElem *ale, short select_mode, float selx){	KeyframeEditData ked = {{NULL}};	KeyframeEditFunc select_cb, ok_cb;		/* get functions for selecting keyframes */	select_cb = ANIM_editkeyframes_select(select_mode);	ok_cb = ANIM_editkeyframes_ok(BEZT_OK_FRAME);	ked.f1 = selx;	ked.iterflags |= KED_F1_NLA_UNMAP;		/* select the nominated keyframe on the given frame */	if (ale->type == ANIMTYPE_GPLAYER) {		ED_gpencil_select_frame(ale->data, selx, select_mode);	}	else if (ale->type == ANIMTYPE_MASKLAYER) {		ED_mask_select_frame(ale->data, selx, select_mode);	}	else {		if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK) &&		    (ale->type == ANIMTYPE_SUMMARY) && (ale->datatype == ALE_ALL))		{			ListBase anim_data = {NULL, NULL};			int filter;						filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY */ | ANIMFILTER_NODUPLIS);			ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);						for (ale = anim_data.first; ale; ale = ale->next) {				if (ale->type == ANIMTYPE_GPLAYER) {					ED_gpencil_select_frame(ale->data, selx, select_mode);				}				else if (ale->type == ANIMTYPE_MASKLAYER) {					ED_mask_select_frame(ale->data, selx, select_mode);				}			}						ANIM_animdata_freelist(&anim_data);		}		else {			ANIM_animchannel_keyframes_loop(&ked, ac->ads, ale, ok_cb, select_cb, NULL);		}	}}
开发者ID:wisaac407,项目名称:blender,代码行数:45,


示例2: ob_keyframes_loop

/* This function is used to loop over the keyframe data in an Object */static short ob_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, Object *ob, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb){	bAnimContext ac = {NULL};	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;	int ret = 0;		bAnimListElem dummychan = {NULL};	Base dummybase = {NULL};		if (ob == NULL)		return 0;		/* create a dummy wrapper data to work with */	dummybase.object = ob;		dummychan.type = ANIMTYPE_OBJECT;	dummychan.data = &dummybase;	dummychan.id = &ob->id;	dummychan.adt = ob->adt;		ac.ads = ads;	ac.data = &dummychan;	ac.datatype = ANIMCONT_CHANNEL;		/* get F-Curves to take keyframes from */	filter = ANIMFILTER_DATA_VISIBLE; // curves only	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);		/* loop through each F-Curve, applying the operation as required, but stopping on the first one */	for (ale = anim_data.first; ale; ale = ale->next) {		if (ANIM_fcurve_keyframes_loop(ked, (FCurve *)ale->data, key_ok, key_cb, fcu_cb)) {			ret = 1;			break;		}	}		BLI_freelistN(&anim_data);		/* return return code - defaults to zero if nothing happened */	return ret;}
开发者ID:nttputus,项目名称:blensor,代码行数:44,


示例3: setexpo_action_keys

/* this function is responsible for setting extrapolation mode for keyframes */static void setexpo_action_keys(bAnimContext *ac, short mode) {	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		/* filter data */	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_SEL | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* loop through setting mode per F-Curve */	for (ale= anim_data.first; ale; ale= ale->next) {		FCurve *fcu= (FCurve *)ale->data;		fcu->extend= mode;	}		/* cleanup */	BLI_freelistN(&anim_data);}
开发者ID:OldBrunet,项目名称:BGERTPS,代码行数:20,


示例4: snap_action_keys

/* this function is responsible for snapping keyframes to frame-times */static void snap_action_keys(bAnimContext *ac, short mode) {	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		KeyframeEditData ked= {{NULL}};	KeyframeEditFunc edit_cb;		/* filter data */	if (ac->datatype == ANIMCONT_GPENCIL)		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT);	else		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* get beztriple editing callbacks */	edit_cb= ANIM_editkeyframes_snap(mode);	ked.scene= ac->scene;	if (mode == ACTKEYS_SNAP_NEAREST_MARKER) {		ked.list.first= (ac->markers) ? ac->markers->first : NULL;		ked.list.last= (ac->markers) ? ac->markers->last : NULL;	}		/* snap keyframes */	for (ale= anim_data.first; ale; ale= ale->next) {		AnimData *adt= ANIM_nla_mapping_get(ac, ale);				if (adt) {			ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); 			ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, edit_cb, calchandles_fcurve);			ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1);		}		//else if (ale->type == ACTTYPE_GPLAYER)		//	snap_gplayer_frames(ale->data, mode);		else 			ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, edit_cb, calchandles_fcurve);	}		BLI_freelistN(&anim_data);}
开发者ID:OldBrunet,项目名称:BGERTPS,代码行数:43,


示例5: insert_action_keys

/* this function is responsible for snapping keyframes to frame-times */static void insert_action_keys(bAnimContext *ac, short mode) {	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		Scene *scene= ac->scene;	float cfra= (float)CFRA;	short flag = 0;		/* filter data */	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY);	if (mode == 2) 			filter |= ANIMFILTER_SEL;	else if (mode == 3) 	filter |= ANIMFILTER_ACTGROUPED;		ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* init keyframing flag */	if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;	if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;	if (IS_AUTOKEY_MODE(scene, EDITKEYS)) flag |= INSERTKEY_REPLACE;		/* insert keyframes */	for (ale= anim_data.first; ale; ale= ale->next) {		AnimData *adt= ANIM_nla_mapping_get(ac, ale);		FCurve *fcu= (FCurve *)ale->key_data;				/* adjust current frame for NLA-scaling */		if (adt)			cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP);		else 			cfra= (float)CFRA;					/* if there's an id */		if (ale->id)			insert_keyframe(ale->id, NULL, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag);		else			insert_vert_fcurve(fcu, cfra, fcu->curval, 0);	}		BLI_freelistN(&anim_data);}
开发者ID:jinjoh,项目名称:NOOR,代码行数:43,


示例6: nlaedit_delete_tracks_exec

static int nlaedit_delete_tracks_exec(bContext *C, wmOperator *UNUSED(op)){	bAnimContext ac;		ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		/* get editor data */	if (ANIM_animdata_get_context(C, &ac) == 0)		return OPERATOR_CANCELLED;			/* get a list of the AnimData blocks being shown in the NLA */	filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);		/* delete tracks */	for (ale = anim_data.first; ale; ale = ale->next) {		if (ale->type == ANIMTYPE_NLATRACK) {			NlaTrack *nlt = (NlaTrack *)ale->data;			AnimData *adt = ale->adt;						/* if track is currently 'solo', then AnimData should have its			 * 'has solo' flag disabled			 */			if (nlt->flag & NLATRACK_SOLO)				adt->flag &= ~ADT_NLA_SOLO_TRACK;						/* call delete on this track - deletes all strips too */			free_nlatrack(&adt->nla_tracks, nlt);		}	}		/* free temp data */	ANIM_animdata_freelist(&anim_data);		/* set notifier that things have changed */	WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);		/* done */	return OPERATOR_FINISHED;}
开发者ID:diekev,项目名称:blender,代码行数:42,


示例7: actkeys_mselect_column

/* Option 3) Selects all visible keyframes in the same frame as the mouse click */static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float selx){	ListBase anim_data= {NULL, NULL};	bAnimListElem *ale;	int filter;		KeyframeEditFunc select_cb, ok_cb;	KeyframeEditData ked= {{NULL}};		/* set up BezTriple edit callbacks */	select_cb= ANIM_editkeyframes_select(select_mode);	ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME);		/* loop through all of the keys and select additional keyframes	 * based on the keys found to be selected above	 */	if (ac->datatype == ANIMCONT_GPENCIL)		filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY */ | ANIMFILTER_NODUPLIS);	else		filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		for (ale= anim_data.first; ale; ale= ale->next) {		AnimData *adt= ANIM_nla_mapping_get(ac, ale);				/* set frame for validation callback to refer to */		if (adt)			ked.f1= BKE_nla_tweakedit_remap(adt, selx, NLATIME_CONVERT_UNMAP);		else			ked.f1= selx;				/* select elements with frame number matching cfra */		if (ale->type == ANIMTYPE_GPLAYER)			select_gpencil_frame(ale->key_data, selx, select_mode);		else 			ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL);	}		/* free elements */	BLI_freelistN(&ked.list);	BLI_freelistN(&anim_data);}
开发者ID:mik0001,项目名称:Blender,代码行数:43,


示例8: sample_action_keys

/* Evaluates the curves between each selected keyframe on each frame, and keys the value  */static void sample_action_keys(bAnimContext *ac){		ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		/* filter data */	filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* loop through filtered data and add keys between selected keyframes on every frame  */	for (ale = anim_data.first; ale; ale = ale->next) {		sample_fcurve((FCurve *)ale->key_data);		ale->update |= ANIM_UPDATE_DEPS;	}	ANIM_animdata_update(ac, &anim_data);	ANIM_animdata_freelist(&anim_data);}
开发者ID:pawkoz,项目名称:dyplom,代码行数:21,


示例9: clean_action_keys

static void clean_action_keys(bAnimContext *ac, float thresh, bool clean_chan){		ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		/* filter data */	filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_SEL /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* loop through filtered data and clean curves */	for (ale = anim_data.first; ale; ale = ale->next) {		clean_fcurve(ac, ale, thresh, clean_chan);		ale->update |= ANIM_UPDATE_DEFAULT;	}	ANIM_animdata_update(ac, &anim_data);	ANIM_animdata_freelist(&anim_data);}
开发者ID:pawkoz,项目名称:dyplom,代码行数:20,


示例10: setkeytype_gpencil_keys

/* this function is responsible for setting the keyframe type for Grease Pencil frames */static void setkeytype_gpencil_keys(bAnimContext *ac, short mode){	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		/* filter data */	filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* loop through each layer */	for (ale = anim_data.first; ale; ale = ale->next) {		if (ale->type == ANIMTYPE_GPLAYER) {			ED_gplayer_frames_keytype_set(ale->data, mode);			ale->update |= ANIM_UPDATE_DEPS;		}	}	ANIM_animdata_update(ac, &anim_data);	ANIM_animdata_freelist(&anim_data);}
开发者ID:pawkoz,项目名称:dyplom,代码行数:22,


示例11: nlaedit_add_tracks_existing

/* helper - add NLA Tracks alongside existing ones */bool nlaedit_add_tracks_existing(bAnimContext *ac, bool above_sel){	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;	AnimData *lastAdt = NULL;	bool added = false;		/* get a list of the (selected) NLA Tracks being shown in the NLA */	filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* add tracks... */	for (ale = anim_data.first; ale; ale = ale->next) {		if (ale->type == ANIMTYPE_NLATRACK) {			NlaTrack *nlt = (NlaTrack *)ale->data;			AnimData *adt = ale->adt;						/* check if just adding a new track above this one,			 * or whether we're adding a new one to the top of the stack that this one belongs to			 */			if (above_sel) {				/* just add a new one above this one */				add_nlatrack(adt, nlt);				added = true;			}			else if ((lastAdt == NULL) || (adt != lastAdt)) {				/* add one track to the top of the owning AnimData's stack, then don't add anymore to this stack */				add_nlatrack(adt, NULL);				lastAdt = adt;				added = true;			}		}	}		/* free temp data */	ANIM_animdata_freelist(&anim_data);		return added;}
开发者ID:diekev,项目名称:blender,代码行数:41,


示例12: actkeys_mselect_channel_only

/* option 4) select all keyframes in same channel */static void actkeys_mselect_channel_only(bAnimContext *ac, bAnimListElem *ale, short select_mode){	KeyframeEditFunc select_cb;		/* get functions for selecting keyframes */	select_cb = ANIM_editkeyframes_select(select_mode);		/* select all keyframes in this channel */	if (ale->type == ANIMTYPE_GPLAYER) {		ED_gpencil_select_frames(ale->data, select_mode);	}	else if (ale->type == ANIMTYPE_MASKLAYER) {		ED_mask_select_frames(ale->data, select_mode);	}	else {		if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK) &&		    (ale->type == ANIMTYPE_SUMMARY) && (ale->datatype == ALE_ALL))		{			ListBase anim_data = {NULL, NULL};			int filter;						filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY */ | ANIMFILTER_NODUPLIS);			ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);						for (ale = anim_data.first; ale; ale = ale->next) {				if (ale->type == ANIMTYPE_GPLAYER) {					ED_gpencil_select_frames(ale->data, select_mode);				}				else if (ale->type == ANIMTYPE_MASKLAYER) {					ED_mask_select_frames(ale->data, select_mode);				}			}						ANIM_animdata_freelist(&anim_data);		}		else {			ANIM_animchannel_keyframes_loop(NULL, ac->ads, ale, NULL, select_cb, NULL);		}	}}
开发者ID:mgschwan,项目名称:blensor,代码行数:41,


示例13: ANIM_animdata_filter

/* Find 'active' F-Curve. It must be editable, since that's the purpose of these buttons (subject to change).   * We return the 'wrapper' since it contains valuable context info (about hierarchy), which will need to be freed  * when the caller is done with it. * * NOTE: curve-visible flag isn't included, otherwise selecting a curve via list to edit is too cumbersome */bAnimListElem *get_active_fcurve_channel(bAnimContext *ac){	ListBase anim_data = {NULL, NULL};	int filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_ACTIVE);	size_t items = ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* We take the first F-Curve only, since some other ones may have had 'active' flag set	 * if they were from linked data.	 */	if (items) {		bAnimListElem *ale = (bAnimListElem *)anim_data.first;				/* remove first item from list, then free the rest of the list and return the stored one */		BLI_remlink(&anim_data, ale);		BLI_freelistN(&anim_data);				return ale;	}		/* no active F-Curve */	return NULL;}
开发者ID:Walid-Shouman,项目名称:Blender,代码行数:28,


示例14: sethandles_action_keys

/* this function is responsible for setting handle-type of selected keyframes */static void sethandles_action_keys(bAnimContext *ac, short mode) {	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;	BeztEditFunc set_cb= ANIM_editkeyframes_handles(mode);		/* filter data */	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* loop through setting flags for handles 	 * Note: we do not supply BeztEditData to the looper yet. Currently that's not necessary here...	 */	for (ale= anim_data.first; ale; ale= ale->next) {		if (mode == -1) {				BeztEditFunc toggle_cb;						/* check which type of handle to set (free or aligned) 			 *	- check here checks for handles with free alignment already			 */			if (ANIM_fcurve_keys_bezier_loop(NULL, ale->key_data, NULL, set_cb, NULL))				toggle_cb= ANIM_editkeyframes_handles(HD_FREE);			else				toggle_cb= ANIM_editkeyframes_handles(HD_ALIGN);							/* set handle-type */			ANIM_fcurve_keys_bezier_loop(NULL, ale->key_data, NULL, toggle_cb, calchandles_fcurve);		}		else {			/* directly set handle-type */			ANIM_fcurve_keys_bezier_loop(NULL, ale->key_data, NULL, set_cb, calchandles_fcurve);		}	}		/* cleanup */	BLI_freelistN(&anim_data);}
开发者ID:jinjoh,项目名称:NOOR,代码行数:39,


示例15: summary_to_keylist

void summary_to_keylist(bAnimContext *ac, DLRBT_Tree *keys, DLRBT_Tree *blocks){	if (ac) {		ListBase anim_data = {NULL, NULL};		bAnimListElem *ale;		int filter;				/* get F-Curves to take keyframes from */		filter = ANIMFILTER_DATA_VISIBLE;		ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);				/* loop through each F-Curve, grabbing the keyframes */		for (ale = anim_data.first; ale; ale = ale->next) {			/* Why not use all #eAnim_KeyType here?			 * All of the other key types are actually "summaries" themselves, and will just end up duplicating stuff			 * that comes up through standard filtering of just F-Curves.			 * Given the way that these work, there isn't really any benefit at all from including them. - Aligorith */			switch (ale->datatype) {				case ALE_FCURVE:					fcurve_to_keylist(ale->adt, ale->data, keys, blocks);					break;				case ALE_MASKLAY:					mask_to_keylist(ac->ads, ale->data, keys);					break;				case ALE_GPFRAME:					gpl_to_keylist(ac->ads, ale->data, keys);					break;				default:					// printf("%s: datatype %d unhandled/n", __func__, ale->datatype);					break;			}		}				ANIM_animdata_freelist(&anim_data);	}}
开发者ID:mistajuliax,项目名称:OctaneBlender,代码行数:37,


示例16: ANIM_sync_animchannels_to_data

/* Main call to be exported to animation editors */void ANIM_sync_animchannels_to_data(const bContext *C){	bAnimContext ac;	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		bActionGroup *active_agrp = NULL;	FCurve *active_fcurve = NULL;		/* get animation context info for filtering the channels */	if (ANIM_animdata_get_context(C, &ac) == 0)		return;		/* filter data */	/* NOTE: we want all channels, since we want to be able to set selection status on some of them even when collapsed 	 *       However, don't include duplicates so that selection statuses don't override each other	 */	filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_CHANNELS | ANIMFILTER_NODUPLIS;	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);		/* flush settings as appropriate depending on the types of the channels */	for (ale = anim_data.first; ale; ale = ale->next) {		switch (ale->type) {			case ANIMTYPE_GROUP:				animchan_sync_group(&ac, ale, &active_agrp);				break;						case ANIMTYPE_FCURVE:				animchan_sync_fcurve(&ac, ale, &active_fcurve);				break;		}	}		ANIM_animdata_freelist(&anim_data);}
开发者ID:greg100795,项目名称:blender-git,代码行数:37,


示例17: delete_action_keys

static void delete_action_keys (bAnimContext *ac){	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		/* filter data */	if (ac->datatype == ANIMCONT_GPENCIL)		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT);	else		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* loop through filtered data and delete selected keys */	for (ale= anim_data.first; ale; ale= ale->next) {		//if (ale->type == ANIMTYPE_GPLAYER)		//	delete_gplayer_frames((bGPDlayer *)ale->data);		//else			delete_fcurve_keys((FCurve *)ale->key_data); // XXX... this doesn't delete empty curves anymore	}		/* free filtered list */	BLI_freelistN(&anim_data);}
开发者ID:jinjoh,项目名称:NOOR,代码行数:24,


示例18: duplicate_action_keys

static void duplicate_action_keys (bAnimContext *ac){	ListBase anim_data = {NULL, NULL};	bAnimListElem *ale;	int filter;		/* filter data */	if (ac->datatype == ANIMCONT_GPENCIL)		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);	else		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);		/* loop through filtered data and delete selected keys */	for (ale= anim_data.first; ale; ale= ale->next) {		if (ale->type == ANIMTYPE_FCURVE)			duplicate_fcurve_keys((FCurve *)ale->key_data);		else			duplicate_gplayer_frames((bGPDlayer *)ale->data);	}		/* free filtered list */	BLI_freelistN(&anim_data);}
开发者ID:OldBrunet,项目名称:BGERTPS,代码行数:24,


示例19: nla_panel_context

bool nla_panel_context(const bContext *C, PointerRNA *adt_ptr, PointerRNA *nlt_ptr, PointerRNA *strip_ptr){	bAnimContext ac;	bAnimListElem *ale = NULL;	ListBase anim_data = {NULL, NULL};	short found = 0; /* not bool, since we need to indicate "found but not ideal" status */	int filter;		/* for now, only draw if we could init the anim-context info (necessary for all animation-related tools) 	 * to work correctly is able to be correctly retrieved. There's no point showing empty panels?	 */	if (ANIM_animdata_get_context(C, &ac) == 0) 		return false;		/* extract list of active channel(s), of which we should only take the first one 	 *	- we need the channels flag to get the active AnimData block when there are no NLA Tracks	 */	// XXX: double-check active!	filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_ACTIVE | ANIMFILTER_LIST_CHANNELS);	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);		for (ale = anim_data.first; ale; ale = ale->next) {		switch (ale->type) {			case ANIMTYPE_NLATRACK: /* NLA Track - The primary data type which should get caught */			{				NlaTrack *nlt = (NlaTrack *)ale->data;				AnimData *adt = ale->adt;								/* found it, now set the pointers */				if (adt_ptr) {					/* AnimData pointer */					RNA_pointer_create(ale->id, &RNA_AnimData, adt, adt_ptr);				}				if (nlt_ptr) {					/* NLA-Track pointer */					RNA_pointer_create(ale->id, &RNA_NlaTrack, nlt, nlt_ptr);				}				if (strip_ptr) {					/* NLA-Strip pointer */					NlaStrip *strip = BKE_nlastrip_find_active(nlt);					RNA_pointer_create(ale->id, &RNA_NlaStrip, strip, strip_ptr);				}								found = 1;				break;			}			case ANIMTYPE_SCENE:    /* Top-Level Widgets doubling up as datablocks */			case ANIMTYPE_OBJECT:			case ANIMTYPE_DSMAT:    /* Datablock AnimData Expanders */			case ANIMTYPE_DSLAM:			case ANIMTYPE_DSCAM:			case ANIMTYPE_DSCACHEFILE:			case ANIMTYPE_DSCUR:			case ANIMTYPE_DSSKEY:			case ANIMTYPE_DSWOR:			case ANIMTYPE_DSNTREE:			case ANIMTYPE_DSPART:			case ANIMTYPE_DSMBALL:			case ANIMTYPE_DSARM:			case ANIMTYPE_DSMESH:			case ANIMTYPE_DSTEX:			case ANIMTYPE_DSLAT:			case ANIMTYPE_DSLINESTYLE:			case ANIMTYPE_DSSPK:			case ANIMTYPE_DSGPENCIL:			{				/* for these channels, we only do AnimData */				if (ale->adt && adt_ptr) {					ID *id;										if ((ale->data == NULL) || (ale->type == ANIMTYPE_OBJECT)) {						/* ale->data is not an ID block! */						id = ale->id;					}					else {						/* ale->data is always the proper ID block we need, but ale->id may not be (i.e. for textures) */						id = (ID *)ale->data;					}										/* AnimData pointer */					if (adt_ptr) {						RNA_pointer_create(id, &RNA_AnimData, ale->adt, adt_ptr);					}										/* set found status to -1, since setting to 1 would break the loop 					 * and potentially skip an active NLA-Track in some cases...					 */					found = -1;				}				break;			}		}				if (found > 0)			break;	}		/* free temp data */	ANIM_animdata_freelist(&anim_data);	//.........这里部分代码省略.........
开发者ID:mgschwan,项目名称:blensor,代码行数:101,



注:本文中的ANIM_animdata_filter函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ ANIM_animdata_freelist函数代码示例
C++ ANIMATE函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。