[Bf-blender-cvs] [a04b551e40d] blender2.8: BKE_object: utility functions for pose access

Campbell Barton noreply at git.blender.org
Tue Apr 17 10:33:41 CEST 2018


Commit: a04b551e40d1c0633ea6fd022483fd9ed3c81021
Author: Campbell Barton
Date:   Tue Apr 17 10:13:32 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBa04b551e40d1c0633ea6fd022483fd9ed3c81021

BKE_object: utility functions for pose access

Pose objects may be from the active object,
or from the weight paint mesh.

Since this is such a common check move this to a function call.

===================================================================

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index d2d90801ade..5fa3399a07c 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -142,6 +142,10 @@ bool BKE_object_pose_context_check(const struct Object *ob);
 struct Object *BKE_object_pose_armature_get(struct Object *ob);
 struct Object *BKE_object_pose_armature_get_visible(struct Object *ob, struct ViewLayer *view_layer);
 
+struct Object **BKE_object_pose_array_get_ex(struct ViewLayer *view_layer, uint *r_objects_len, bool unique);
+struct Object **BKE_object_pose_array_get_unique(struct ViewLayer *view_layer, uint *r_objects_len);
+struct Object **BKE_object_pose_array_get(struct ViewLayer *view_layer, uint *r_objects_len);
+
 void BKE_object_get_parent_matrix(
         struct Scene *scene, struct Object *ob,
         struct Object *par, float parentmat[4][4]);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index f59a942c683..cbe4b0bf793 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1233,6 +1233,43 @@ Object *BKE_object_pose_armature_get_visible(Object *ob, ViewLayer *view_layer)
 	}
 	return NULL;
 }
+
+/**
+ * Access pose array with special check to get pose object when in weight paint mode.
+ */
+Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, uint *r_objects_len, bool unique)
+{
+	Object *ob_active = OBACT(view_layer);
+	Object *ob_pose = BKE_object_pose_armature_get(ob_active);
+	Object **objects = NULL;
+	if (ob_pose == ob_active) {
+		objects = BKE_view_layer_array_from_objects_in_mode(
+		        view_layer, r_objects_len, {
+		            .object_mode = OB_MODE_POSE,
+		            .no_dup_data = unique});
+	}
+	else if (ob_pose != NULL) {
+		*r_objects_len = 1;
+		objects = MEM_mallocN(sizeof(*objects), __func__);
+		objects[0] = ob_pose;
+	}
+	else {
+		*r_objects_len = 0;
+		objects = MEM_mallocN(0, __func__);
+	}
+	return objects;
+}
+
+Object **BKE_object_pose_array_get_unique(ViewLayer *view_layer, uint *r_objects_len)
+{
+	return BKE_object_pose_array_get_ex(view_layer, r_objects_len, true);
+}
+
+Object **BKE_object_pose_array_get(ViewLayer *view_layer, uint *r_objects_len)
+{
+	return BKE_object_pose_array_get_ex(view_layer, r_objects_len, false);
+}
+
 void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src)
 {
 	copy_v3_v3(ob_tar->loc, ob_src->loc);



More information about the Bf-blender-cvs mailing list