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>2010-01-06 15:19:46 +0300
committerCampbell Barton <ideasman42@gmail.com>2010-01-06 15:19:46 +0300
commite292b5badc7d7cc44c8c836857771d310e44fa5a (patch)
tree8db0dff0e84125138c6db223965772c44d18cacd
parent83f677d9cfce4fe30d63d4b04ac07e2dea3accbe (diff)
fix for crash when setting a shapekeys name in rna, (probably other properties too).
When the shapekey was returned from the object it didnt use the data's ID which is expected elsewhere in RNA. Transfer shape now also sets the name.
-rw-r--r--release/scripts/op/object.py10
-rw-r--r--source/blender/makesrna/intern/rna_object.c2
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c11
3 files changed, 15 insertions, 8 deletions
diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py
index f1762787740..d68c30f0f23 100644
--- a/release/scripts/op/object.py
+++ b/release/scripts/op/object.py
@@ -176,11 +176,12 @@ class ShapeTransfer(bpy.types.Operator):
def me_cos(verts):
return [v.co.copy() for v in verts]
- def ob_add_shape(ob):
+ def ob_add_shape(ob, name):
me = ob.data
- ob.add_shape_key(from_mix=False)
+ key = ob.add_shape_key(from_mix=False)
if len(me.shape_keys.keys) == 1:
- ob.add_shape_key(from_mix=False) # we need a rest
+ key = ob.add_shape_key(from_mix=False) # we need a rest
+ key.name = name
ob.active_shape_key_index = len(me.shape_keys.keys) - 1
ob.shape_key_lock = True
@@ -191,6 +192,7 @@ class ShapeTransfer(bpy.types.Operator):
use_clamp = False
me = ob_act.data
+ orig_key_name = ob_act.active_shape_key.name
orig_shape_coords = me_cos(ob_act.active_shape_key.data)
@@ -206,7 +208,7 @@ class ShapeTransfer(bpy.types.Operator):
target_normals = me_nos(me_other.verts)
target_coords = me_cos(me_other.verts)
- ob_add_shape(ob_other)
+ ob_add_shape(ob_other, orig_key_name)
# editing the final coords, only list that stores wrapped coords
target_shape_coords = [v.co for v in ob_other.active_shape_key.data]
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 0a4fa71c006..e87edabbcdf 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -930,7 +930,7 @@ static PointerRNA rna_Object_active_shape_key_get(PointerRNA *ptr)
return PointerRNA_NULL;
kb= BLI_findlink(&key->block, ob->shapenr-1);
- RNA_pointer_create(&key->id, &RNA_ShapeKey, kb, &keyptr);
+ RNA_pointer_create((ID *)ob->data, &RNA_ShapeKey, kb, &keyptr);
return keyptr;
}
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 9426b9c9eb3..8379ae7995d 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -310,19 +310,23 @@ static Object *rna_Object_find_armature(Object *ob)
return ob_arm;
}
-static KeyBlock *rna_Object_add_shape_key(Object *ob, bContext *C, ReportList *reports, char *name, int from_mix)
+static PointerRNA rna_Object_add_shape_key(Object *ob, bContext *C, ReportList *reports, char *name, int from_mix)
{
Scene *scene= CTX_data_scene(C);
KeyBlock *kb= NULL;
if((kb=object_insert_shape_key(scene, ob, name, from_mix))) {
+ PointerRNA keyptr;
+
+ RNA_pointer_create((ID *)ob->data, &RNA_ShapeKey, kb, &keyptr);
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+
+ return keyptr;
}
else {
BKE_reportf(reports, RPT_ERROR, "Object \"%s\"does not support shapes.", ob->id.name+2);
+ return PointerRNA_NULL;
}
-
- return kb;
}
int rna_Object_is_visible(Object *ob, bContext *C)
@@ -476,6 +480,7 @@ void RNA_api_object(StructRNA *srna)
parm= RNA_def_string(func, "name", "Key", 0, "", "Unique name for the new keylock."); /* optional */
parm= RNA_def_boolean(func, "from_mix", 1, "", "Create new shape from existing mix of shapes.");
parm= RNA_def_pointer(func, "key", "ShapeKey", "", "New shape keyblock.");
+ RNA_def_property_flag(parm, PROP_RNAPTR);
RNA_def_function_return(func, parm);
/* Ray Cast */