[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