[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24069] trunk/blender/source/blender/ editors: Bugfix to restore shape key add creating a new shape based on the

Brecht Van Lommel brecht at blender.org
Sat Oct 24 13:25:05 CEST 2009


Revision: 24069
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24069
Author:   blendix
Date:     2009-10-24 13:25:05 +0200 (Sat, 24 Oct 2009)

Log Message:
-----------
Bugfix to restore shape key add creating a new shape based on the
shape visible in the 3d view, rather than a copy of the basis shape.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/object/object_shapekey.c

Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h	2009-10-24 07:50:39 UTC (rev 24068)
+++ trunk/blender/source/blender/editors/include/ED_object.h	2009-10-24 11:25:05 UTC (rev 24069)
@@ -102,8 +102,6 @@
 void undo_push_lattice(struct bContext *C, char *name);
 
 /* object_shapekey.c */
-void insert_shapekey(struct Scene *scene, struct Object *ob);
-void delete_key(struct Scene *scene, struct Object *ob);
 void key_to_mesh(struct KeyBlock *kb, struct Mesh *me);
 void mesh_to_key(struct Mesh *me, struct KeyBlock *kb);
 void key_to_latt(struct KeyBlock *kb, struct Lattice *lt);

Modified: trunk/blender/source/blender/editors/object/object_shapekey.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_shapekey.c	2009-10-24 07:50:39 UTC (rev 24068)
+++ trunk/blender/source/blender/editors/object/object_shapekey.c	2009-10-24 11:25:05 UTC (rev 24069)
@@ -80,41 +80,6 @@
 
 #include "object_intern.h"
 
-#if 0 // XXX old animation system
-static void default_key_ipo(Scene *scene, Key *key)
-{
-	IpoCurve *icu;
-	BezTriple *bezt;
-	
-	key->ipo= add_ipo(scene, "KeyIpo", ID_KE);
-	
-	icu= MEM_callocN(sizeof(IpoCurve), "ipocurve");
-			
-	icu->blocktype= ID_KE;
-	icu->adrcode= KEY_SPEED;
-	icu->flag= IPO_VISIBLE|IPO_SELECT|IPO_AUTO_HORIZ;
-	set_icu_vars(icu);
-	
-	BLI_addtail( &(key->ipo->curve), icu);
-	
-	icu->bezt= bezt= MEM_callocN(2*sizeof(BezTriple), "defaultipo");
-	icu->totvert= 2;
-	
-	bezt->hide= IPO_BEZ;
-	bezt->f1=bezt->f2= bezt->f3= SELECT;
-	bezt->h1= bezt->h2= HD_AUTO;
-	bezt++;
-	bezt->vec[1][0]= 100.0;
-	bezt->vec[1][1]= 1.0;
-	bezt->hide= IPO_BEZ;
-	bezt->f1=bezt->f2= bezt->f3= SELECT;
-	bezt->h1= bezt->h2= HD_AUTO;
-	
-	calchandles_ipocurve(icu);
-}
-#endif // XXX old animation system
-	
-
 /************************* Mesh ************************/
 
 void mesh_to_key(Mesh *me, KeyBlock *kb)
@@ -197,24 +162,30 @@
 	return kb;
 }
 
-void insert_meshkey(Scene *scene, Mesh *me, short rel)
+static void insert_meshkey(Scene *scene, Object *ob)
 {
-	Key *key;
+	Mesh *me= ob->data;
+	Key *key= me->key;;
 	KeyBlock *kb;
+	int newkey= 0;
 
-	if(me->key==NULL) {
-		me->key= add_key( (ID *)me);
-
-		if(rel)
-			me->key->type = KEY_RELATIVE;
-//		else
-//			default_key_ipo(scene, me->key); // XXX old animation system
+	if(key == NULL) {
+		key= me->key= add_key((ID *)me);
+		key->type= KEY_RELATIVE;
+		newkey= 1;
 	}
-	key= me->key;
 	
 	kb= add_keyblock(scene, key);
 	
-	mesh_to_key(me, kb);
+	if(newkey) {
+		/* create from mesh */
+		mesh_to_key(me, kb);
+	}
+	else {
+		/* copy from current values */
+		kb->data= do_ob_key(scene, ob);
+		kb->totelem= me->totvert;
+	}
 }
 
 /************************* Lattice ************************/
@@ -255,24 +226,31 @@
 	for(a=0; a<tot; a++, fp+=3, bp++) {
 		VECCOPY(bp->vec, fp);
 	}
-	
 }
 
-/* exported to python... hrms, should not, use object levels! (ton) */
-void insert_lattkey(Scene *scene, Lattice *lt, short rel)
+static void insert_lattkey(Scene *scene, Object *ob)
 {
-	Key *key;
+	Lattice *lt= ob->data;
+	Key *key= lt->key;
 	KeyBlock *kb;
+	int newkey= 0;
 	
-	if(lt->key==NULL) {
-		lt->key= add_key( (ID *)lt);
-//		default_key_ipo(scene, lt->key); // XXX old animation system
+	if(key==NULL) {
+		key= lt->key= add_key( (ID *)lt);
+		key->type= KEY_RELATIVE;
 	}
-	key= lt->key;
-	
+
 	kb= add_keyblock(scene, key);
 	
-	latt_to_key(lt, kb);
+	if(newkey) {
+		/* create from lattice */
+		latt_to_key(lt, kb);
+	}
+	else {
+		/* copy from current values */
+		kb->totelem= lt->pntsu*lt->pntsv*lt->pntsw;
+		kb->data= do_ob_key(scene, ob);
+	}
 }
 
 /************************* Curve ************************/
@@ -379,25 +357,32 @@
 }
 
 
-void insert_curvekey(Scene *scene, Curve *cu, short rel) 
+static void insert_curvekey(Scene *scene, Object *ob)
 {
-	Key *key;
+	Curve *cu= ob->data;
+	Key *key= cu->key;
 	KeyBlock *kb;
 	ListBase *lb= (cu->editnurb)? cu->editnurb: &cu->nurb;
+	int newkey= 0;
 	
-	if(cu->key==NULL) {
-		cu->key= add_key( (ID *)cu);
-
-		if(rel)
-			cu->key->type = KEY_RELATIVE;
-//		else
-//			default_key_ipo(scene, cu->key);	// XXX old animation system
+	if(key==NULL) {
+		key= cu->key= add_key( (ID *)cu);
+		key->type = KEY_RELATIVE;
+		newkey= 1;
 	}
-	key= cu->key;
 	
 	kb= add_keyblock(scene, key);
 	
-	curve_to_key(cu, kb, lb);
+	if(newkey) {
+		/* create from curve */
+		curve_to_key(cu, kb, lb);
+	}
+	else {
+		/* copy from current values */
+		kb->totelem= count_curveverts(lb);
+		kb->data= do_ob_key(scene, ob);
+	}
+
 }
 
 /*********************** add shape key ***********************/
@@ -406,9 +391,9 @@
 {
 	Key *key;
 
-	if(ob->type==OB_MESH) insert_meshkey(scene, ob->data, 1);
-	else if ELEM(ob->type, OB_CURVE, OB_SURF) insert_curvekey(scene, ob->data, 1);
-	else if(ob->type==OB_LATTICE) insert_lattkey(scene, ob->data, 1);
+	if(ob->type==OB_MESH) insert_meshkey(scene, ob);
+	else if ELEM(ob->type, OB_CURVE, OB_SURF) insert_curvekey(scene, ob);
+	else if(ob->type==OB_LATTICE) insert_lattkey(scene, ob);
 
 	key= ob_get_key(ob);
 	ob->shapenr= BLI_countlist(&key->block);





More information about the Bf-blender-cvs mailing list