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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2010-10-13 01:47:13 +0400
committerCampbell Barton <ideasman42@gmail.com>2010-10-13 01:47:13 +0400
commitb64098a85af30a1d5f74fbb876e939905a2cc44f (patch)
tree32eb130cfc9eda66c56f07aa3517698fd705e12f /source
parent4754d6a27d28eb0a244a49f147b588721fcecfbb (diff)
bugfix [#22407] Object level proxies ignore transform of original
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/object.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 541e8e2b00e..861904335d7 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1264,6 +1264,17 @@ static void copy_object_pose(Object *obn, Object *ob)
}
}
+static void copy_object_transform(Object *ob_tar, Object *ob_src)
+{
+ copy_v3_v3(ob_tar->loc, ob_src->loc);
+ copy_v3_v3(ob_tar->rot, ob_src->rot);
+ copy_v3_v3(ob_tar->quat, ob_src->quat);
+ copy_v3_v3(ob_tar->rotAxis, ob_src->rotAxis);
+ ob_tar->rotAngle= ob_src->rotAngle;
+ ob_tar->rotmode= ob_src->rotmode;
+ copy_v3_v3(ob_tar->size, ob_src->size);
+}
+
Object *copy_object(Object *ob)
{
Object *obn;
@@ -1530,23 +1541,23 @@ void object_make_proxy(Object *ob, Object *target, Object *gob)
ob->recalc= target->recalc= OB_RECALC_ALL;
- /* copy transform */
+ /* copy transform
+ * - gob means this proxy comes from a group, just apply the matrix
+ * so the object wont move from its dupli-transform.
+ *
+ * - no gob means this is being made from a linked object,
+ * this is closer to making a copy of the object - in-place. */
if(gob) {
- VECCOPY(ob->loc, gob->loc);
- VECCOPY(ob->rot, gob->rot);
- VECCOPY(ob->size, gob->size);
-
- group_tag_recalc(gob->dup_group);
+ ob->rotmode= target->rotmode;
+ mul_m4_m4m4(ob->obmat, target->obmat, gob->obmat);
+ object_apply_mat4(ob, ob->obmat);
}
else {
- VECCOPY(ob->loc, target->loc);
- VECCOPY(ob->rot, target->rot);
- VECCOPY(ob->size, target->size);
+ copy_object_transform(ob, target);
+ ob->parent= target->parent; /* libdata */
+ copy_m4_m4(ob->parentinv, target->parentinv);
}
- ob->parent= target->parent; /* libdata */
- copy_m4_m4(ob->parentinv, target->parentinv);
-
/* copy animdata stuff - drivers only for now... */
object_copy_proxy_drivers(ob, target);