Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-12-28 21:03:04 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-28 21:03:04 +0300
commit8177f343a0303a66e36f2b78566045c0dea0b406 (patch)
treeb1b63d0aac8df1cfb349895fceeff1047cecc43e /source/blender/blenkernel
parent32656ad4ba6af89fcbd8247bc219e55be802ebdc (diff)
- object.add_shape_key(name="Key", from_mix=True)
- ensure new shape key names are unique - Transfer ShapeKey now can have its settings changes (redo operator)
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_key.h2
-rw-r--r--source/blender/blenkernel/BKE_object.h2
-rw-r--r--source/blender/blenkernel/intern/key.c15
-rw-r--r--source/blender/blenkernel/intern/object.c28
4 files changed, 29 insertions, 18 deletions
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index e80e57ae63c..8bbbf7b0749 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -59,7 +59,7 @@ void key_curve_normal_weights(float t, float *data, int type);
float *do_ob_key(struct Scene *scene, struct Object *ob);
struct Key *ob_get_key(struct Object *ob);
-struct KeyBlock *add_keyblock(struct Key *key);
+struct KeyBlock *add_keyblock(struct Key *key, char *name);
struct KeyBlock *ob_get_keyblock(struct Object *ob);
struct KeyBlock *ob_get_reference_keyblock(struct Object *ob);
struct KeyBlock *key_get_keyblock(struct Key *key, int index);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 1dca3a597fe..9e70251c782 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -120,7 +120,7 @@ int give_obdata_texspace(struct Object *ob, short **texflag, float **loc, float
int object_insert_ptcache(struct Object *ob);
// void object_delete_ptcache(struct Object *ob, int index);
-int object_insert_shape_key(struct Scene *scene, struct Object *ob, int from_mix);
+struct KeyBlock *object_insert_shape_key(struct Scene *scene, struct Object *ob, char *name, int from_mix);
#ifdef __cplusplus
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 825dd7d441b..1f5e0ca1624 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -32,6 +32,7 @@
#include <math.h>
#include <string.h>
+#include <stddef.h>
#include "MEM_guardedalloc.h"
@@ -1395,7 +1396,7 @@ Key *ob_get_key(Object *ob)
return NULL;
}
-KeyBlock *add_keyblock(Key *key)
+KeyBlock *add_keyblock(Key *key, char *name)
{
KeyBlock *kb;
float curpos= -0.1;
@@ -1409,9 +1410,15 @@ KeyBlock *add_keyblock(Key *key)
kb->type= KEY_CARDINAL;
tot= BLI_countlist(&key->block);
- if(tot==1) strcpy(kb->name, "Basis");
- else sprintf(kb->name, "Key %d", tot-1);
-
+ if(name) {
+ strncpy(kb->name, name, sizeof(kb->name));
+ } else {
+ if(tot==1) strcpy(kb->name, "Basis");
+ else sprintf(kb->name, "Key %d", tot-1);
+ }
+
+ BLI_uniquename(&key->block, kb, "Key", '.', offsetof(KeyBlock, name), sizeof(kb->name));
+
// XXX this is old anim system stuff? (i.e. the 'index' of the shapekey)
kb->adrcode= tot-1;
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 0a56bcff606..24d5b9cd882 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2634,7 +2634,7 @@ void object_delete_ptcache(Object *ob, int index)
/* shape key utility function */
/************************* Mesh ************************/
-static void insert_meshkey(Scene *scene, Object *ob, int from_mix)
+static KeyBlock *insert_meshkey(Scene *scene, Object *ob, char *name, int from_mix)
{
Mesh *me= ob->data;
Key *key= me->key;
@@ -2647,7 +2647,7 @@ static void insert_meshkey(Scene *scene, Object *ob, int from_mix)
newkey= 1;
}
- kb= add_keyblock(key);
+ kb= add_keyblock(key, name);
if(newkey || from_mix==FALSE) {
/* create from mesh */
@@ -2658,9 +2658,11 @@ static void insert_meshkey(Scene *scene, Object *ob, int from_mix)
kb->data= do_ob_key(scene, ob);
kb->totelem= me->totvert;
}
+
+ return kb;
}
/************************* Lattice ************************/
-static void insert_lattkey(Scene *scene, Object *ob, int from_mix)
+static KeyBlock *insert_lattkey(Scene *scene, Object *ob, char *name, int from_mix)
{
Lattice *lt= ob->data;
Key *key= lt->key;
@@ -2673,7 +2675,7 @@ static void insert_lattkey(Scene *scene, Object *ob, int from_mix)
newkey= 1;
}
- kb= add_keyblock(key);
+ kb= add_keyblock(key, name);
if(newkey || from_mix==FALSE) {
/* create from lattice */
@@ -2684,9 +2686,11 @@ static void insert_lattkey(Scene *scene, Object *ob, int from_mix)
kb->totelem= lt->pntsu*lt->pntsv*lt->pntsw;
kb->data= do_ob_key(scene, ob);
}
+
+ return kb;
}
/************************* Curve ************************/
-static void insert_curvekey(Scene *scene, Object *ob, int from_mix)
+static KeyBlock *insert_curvekey(Scene *scene, Object *ob, char *name, int from_mix)
{
Curve *cu= ob->data;
Key *key= cu->key;
@@ -2700,7 +2704,7 @@ static void insert_curvekey(Scene *scene, Object *ob, int from_mix)
newkey= 1;
}
- kb= add_keyblock(key);
+ kb= add_keyblock(key, name);
if(newkey || from_mix==FALSE) {
/* create from curve */
@@ -2712,14 +2716,14 @@ static void insert_curvekey(Scene *scene, Object *ob, int from_mix)
kb->data= do_ob_key(scene, ob);
}
+ return kb;
}
-int object_insert_shape_key(Scene *scene, Object *ob, int from_mix)
+KeyBlock *object_insert_shape_key(Scene *scene, Object *ob, char *name, int from_mix)
{
- if(ob->type==OB_MESH) insert_meshkey(scene, ob, from_mix);
- else if ELEM(ob->type, OB_CURVE, OB_SURF) insert_curvekey(scene, ob, from_mix);
- else if(ob->type==OB_LATTICE) insert_lattkey(scene, ob, from_mix);
- else return 0;
- return 1;
+ if(ob->type==OB_MESH) return insert_meshkey(scene, ob, name, from_mix);
+ else if ELEM(ob->type, OB_CURVE, OB_SURF)return insert_curvekey(scene, ob, name, from_mix);
+ else if(ob->type==OB_LATTICE) return insert_lattkey(scene, ob, name, from_mix);
+ else return NULL;
}