[Bf-blender-cvs] [d5f94b49bd9] blender2.8: Fix part of T56865: wrong center with orbit around selection in weight paint.
Brecht Van Lommel
noreply at git.blender.org
Fri Sep 21 20:22:07 CEST 2018
Commit: d5f94b49bd988665b4070e02664851fd5339c73a
Author: Brecht Van Lommel
Date: Fri Sep 21 20:08:25 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd5f94b49bd988665b4070e02664851fd5339c73a
Fix part of T56865: wrong center with orbit around selection in weight paint.
===================================================================
M source/blender/editors/transform/transform.h
M source/blender/editors/transform/transform_conversions.c
M source/blender/editors/transform/transform_generics.c
===================================================================
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);
+ }
}
}
More information about the Bf-blender-cvs
mailing list