From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.
// 2.65.10 bex shape_key_add_exec
//
// this is a list of functions executed from shape_key_add_exec(){}
//
// they are not complete
//	# 	= no sub functions
//	*	= duplicate
//	no tab 	= no check
 
/*
 * ***** BEGIN GPL LICENSE BLOCK *****
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * The Original Code is Copyright (C) 2009 Blender Foundation
 * All rights reserved.
 *
 * The Original Code is: all of this file.
 *
 * ***** END GPL LICENSE BLOCK *****
 */
 
// source/blender/editors/object/object_shapekey.c
static int shape_key_add_exec(bContext *C, wmOperator *op)
{
	CTX_data_scene(C);
	ED_object_context(C);
	RNA_boolean_get(op->ptr, "from_mix");
	ED_object_shape_key_add(C, scene, ob, from_mix);					// source/blender/editors/object/object_shapekey.c
		BKE_object_insert_shape_key(scene, ob, NULL, from_mix)				// source/blender/blenkernel/intern/object.c
			insert_meshkey(scene, ob, name, from_mix);				// source/blender/blenkernel/intern/object.c
				BKE_key_add((ID *)me);						// source/blender/blenkernel/intern/key.c
					BKE_libblock_alloc(&G.main->key, ID_KE, "Key");
					GS(id->name)
				BKE_keyblock_add_ctime(key, name, FALSE);			// source/blender/blenkernel/intern/key.c
					BKE_keyblock_add(key, name);				// source/blender/blenkernel/intern/key.c
						MEM_callocN(sizeof(KeyBlock), "Keyblock");
						BLI_addtail(&key->block, kb);
						BLI_countlist(&key->block);
						BLI_strncpy(kb->name, name, sizeof(kb->name));
						BLI_strncpy(kb->name, "Basis", sizeof(kb->name));
						BLI_snprintf(kb->name, sizeof(kb->name), "Key %d", tot - 1);
						BLI_uniquename(&key->block, kb, "Key", '.', offsetof(KeyBlock, name), sizeof(kb->name));
					BKE_key_sort(key);
				BKE_key_convert_from_mesh(me, kb);				// source/blender/blenkernel/intern/key.c
					MEM_freeN(kb->data);
					MEM_callocN(me->key->elemsize * me->totvert, "kb->data");
					copy_v3_v3(fp, mvert->co);
				BKE_key_evaluate_object(scene, ob, &totelem);			// source/blender/blenkernel/intern/key.c
					BKE_key_from_object(ob);				// source/blender/blenkernel/intern/key.c
						ELEM(ob->type, OB_CURVE, OB_SURF)
					BKE_keyblock_from_object(ob);
					sizeof(float);
					sizeof(float);
					ELEM(ob->type, OB_CURVE, OB_SURF)
					sizeof(float);
					sizeof(float);
					MEM_callocN(size, "BKE_key_evaluate_object out");
					BLI_findlink(&key->block, ob->shapenr - 1);
					OB_TYPE_SUPPORT_VGROUP(ob->type)
					get_weights_array(ob, kb->vgroup);
					cp_key(0, tot, tot, out, key, actkb, kb, weights, 0);
					MEM_freeN(weights);
					ELEM(ob->type, OB_CURVE, OB_SURF)
					cp_cu_key(ob->data, key, actkb, kb, 0, tot, out, tot);
					BKE_scene_frame_get(scene);
					BKE_animsys_evaluate_animdata(scene, &key->id, key->adt, ctime, ADT_RECALC_DRIVERS);
					do_mesh_key(scene, ob, key, out, tot);
					do_latt_key(scene, ob, key, out, tot);
					do_curve_key(scene, ob, key, out, tot);
					do_curve_key(scene, ob, key, out, tot);
				BKE_keyblock_add_ctime(key, name, FALSE);
			insert_curvekey(scene, ob, name, from_mix);			// source/blender/blenkernel/intern/object.c
				BKE_curve_nurbs_get(cu);
				BKE_key_add((ID *)cu);
				BKE_keyblock_add_ctime(key, name, FALSE);
				MEM_dupallocN(basekb->data);
				BKE_key_convert_from_curve(cu, kb, lb);
				BKE_key_evaluate_object(scene, ob, &totelem);
				BKE_keyblock_add_ctime(key, name, FALSE);
			insert_lattkey(scene, ob, name, from_mix);			// source/blender/blenkernel/intern/object.c
				BKE_key_add((ID *)lt);
				BKE_keyblock_add_ctime(key, name, FALSE);
				MEM_dupallocN(basekb->data);
				BKE_key_convert_from_lattice(lt, kb);
				BKE_key_evaluate_object(scene, ob, &totelem);
				BKE_keyblock_add_ctime(key, name, FALSE);
		BKE_key_from_object(ob);
		BLI_findindex(&key->block, kb)
		WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
}