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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-09-21 21:08:25 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-09-21 21:21:40 +0300
commitd5f94b49bd988665b4070e02664851fd5339c73a (patch)
tree5ed985953c40b1efb067435fa3ed58f237293cc1 /source
parent890b617919670ea43ae11730a3cb621c85682840 (diff)
Fix part of T56865: wrong center with orbit around selection in weight paint.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/transform/transform.h2
-rw-r--r--source/blender/editors/transform/transform_conversions.c26
-rw-r--r--source/blender/editors/transform/transform_generics.c26
3 files changed, 26 insertions, 28 deletions
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index e015015085d..98d8b6d8611 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -826,7 +826,7 @@ void setInputPostFct(MouseInput *mi, void (*post)(struct TransInfo *t, float val
/*********************** Generics ********************************/
-void initTransDataContainers_FromObjectData(TransInfo *t);
+void initTransDataContainers_FromObjectData(TransInfo *t, struct Object *obact, struct Object **objects, uint objects_len);
void initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, const struct wmEvent *event);
void freeTransCustomDataForMode(TransInfo *t);
void postTrans(struct bContext *C, TransInfo *t);
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index ae3ad145c31..a5388779cf4 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -1097,19 +1097,8 @@ static short pose_grab_with_ik(Main *bmain, Object *ob)
/**
* When objects array is NULL, use 't->data_container' as is.
*/
-static void createTransPose(TransInfo *t, Object **objects, uint objects_len)
+static void createTransPose(TransInfo *t)
{
- if (objects != NULL) {
- if (t->data_container) {
- MEM_freeN(t->data_container);
- }
- t->data_container = MEM_callocN(sizeof(*t->data_container) * objects_len, __func__);
- t->data_container_len = objects_len;
- int th_index;
- FOREACH_TRANS_DATA_CONTAINER_INDEX (t, tc, th_index) {
- tc->poseobj = objects[th_index];
- }
- }
Main *bmain = CTX_data_main(t->context);
t->data_len_all = 0;
@@ -8440,7 +8429,7 @@ void createTransData(bContext *C, TransInfo *t)
}
else if (t->options & CTX_EDGE) {
/* Multi object editing. */
- initTransDataContainers_FromObjectData(t);
+ initTransDataContainers_FromObjectData(t, ob, NULL, 0);
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
tc->data_ext = NULL;
}
@@ -8490,7 +8479,7 @@ void createTransData(bContext *C, TransInfo *t)
}
else if (t->obedit_type == OB_MESH) {
- initTransDataContainers_FromObjectData(t);
+ initTransDataContainers_FromObjectData(t, ob, NULL, 0);
createTransUVs(C, t);
countAndCleanTransDataContainer(t);
@@ -8579,7 +8568,7 @@ void createTransData(bContext *C, TransInfo *t)
}
else if (t->obedit_type != -1) {
/* Multi object editing. */
- initTransDataContainers_FromObjectData(t);
+ initTransDataContainers_FromObjectData(t, ob, NULL, 0);
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
tc->data_ext = NULL;
@@ -8643,8 +8632,8 @@ void createTransData(bContext *C, TransInfo *t)
// XXX active-layer checking isn't done as that should probably be checked through context instead
/* Multi object editing. */
- initTransDataContainers_FromObjectData(t);
- createTransPose(t, NULL, 0);
+ initTransDataContainers_FromObjectData(t, ob, NULL, 0);
+ createTransPose(t);
countAndCleanTransDataContainer(t);
}
else if (ob && (ob->mode & OB_MODE_WEIGHT_PAINT) && !(t->options & CTX_PAINT_CURVE)) {
@@ -8658,7 +8647,8 @@ void createTransData(bContext *C, TransInfo *t)
Object *objects[1];
objects[0] = ob_armature;
uint objects_len = 1;
- createTransPose(t, objects, objects_len);
+ initTransDataContainers_FromObjectData(t, ob_armature, objects, objects_len);
+ createTransPose(t);
countAndCleanTransDataContainer(t);
}
}
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index e6ad60e0ebb..f9a34fcaaa9 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1199,10 +1199,10 @@ static int initTransInfo_edit_pet_to_flag(const int proportional)
}
}
-void initTransDataContainers_FromObjectData(TransInfo *t)
+void initTransDataContainers_FromObjectData(TransInfo *t, Object *obact, Object **objects, uint objects_len)
{
- const eObjectMode object_mode = OBACT(t->view_layer) ? OBACT(t->view_layer)->mode : OB_MODE_OBJECT;
- const short object_type = OBACT(t->view_layer) ? OBACT(t->view_layer)->type : -1;
+ const eObjectMode object_mode = obact ? obact->mode : OB_MODE_OBJECT;
+ const short object_type = obact ? obact->type : -1;
if ((object_mode & OB_MODE_EDIT) ||
((object_mode & OB_MODE_POSE) && (object_type == OB_ARMATURE)))
@@ -1210,11 +1210,16 @@ void initTransDataContainers_FromObjectData(TransInfo *t)
if (t->data_container) {
MEM_freeN(t->data_container);
}
- uint objects_len;
- Object **objects = BKE_view_layer_array_from_objects_in_mode(
- t->view_layer, &objects_len, {
- .object_mode = object_mode,
- .no_dup_data = true});
+
+ bool free_objects = false;
+ if (objects == NULL) {
+ objects = BKE_view_layer_array_from_objects_in_mode(
+ t->view_layer, &objects_len, {
+ .object_mode = object_mode,
+ .no_dup_data = true});
+ free_objects = true;
+ }
+
t->data_container = MEM_callocN(sizeof(*t->data_container) * objects_len, __func__);
t->data_container_len = objects_len;
@@ -1242,7 +1247,10 @@ void initTransDataContainers_FromObjectData(TransInfo *t)
}
/* Otherwise leave as zero. */
}
- MEM_freeN(objects);
+
+ if (free_objects) {
+ MEM_freeN(objects);
+ }
}
}