[Bf-blender-cvs] [7f29c49f898] greasepencil-object: Fix error setting origin
Antonio Vazquez
noreply at git.blender.org
Sun Jul 9 13:33:23 CEST 2017
Commit: 7f29c49f898428c3e79f06836ad9acaa6aff15fb
Author: Antonio Vazquez
Date: Sun Jul 9 13:33:11 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB7f29c49f898428c3e79f06836ad9acaa6aff15fb
Fix error setting origin
The calculation was not right if the object had rotations
===================================================================
M source/blender/editors/object/object_transform.c
===================================================================
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index ce6599bfe53..e80a06d1dfa 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -1015,8 +1015,15 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
mul_m3_v3(imat, offset_global);
mul_v3_m3v3(offset_local, imat, offset_global);
+ float diff_mat[4][4];
+ float inverse_diff_mat[4][4];
+
/* recalculate all strokes (all layers are considered without evaluating lock attributtes) */
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ /* calculate difference matrix */
+ ED_gpencil_parent_location(obact, gpd, gpl, diff_mat);
+ /* undo matrix */
+ invert_m4_m4(inverse_diff_mat, diff_mat);
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
/* skip strokes that are invalid for current view */
@@ -1024,7 +1031,10 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
continue;
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- sub_v3_v3(&pt->x, offset_local);
+ float mpt[3];
+ mul_v3_m4v3(mpt, inverse_diff_mat, &pt->x);
+ sub_v3_v3(mpt, offset_local);
+ mul_v3_m4v3(&pt->x, diff_mat, mpt);
}
}
}
More information about the Bf-blender-cvs
mailing list