[Bf-blender-cvs] [fa588e9ef45] blender2.8: Object Mode: pass eval_ctx to ED_object_iter_other

Campbell Barton noreply at git.blender.org
Tue Feb 6 08:01:24 CET 2018


Commit: fa588e9ef45c439bbcefc5817b2cf8387db5725b
Author: Campbell Barton
Date:   Tue Feb 6 17:57:07 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBfa588e9ef45c439bbcefc5817b2cf8387db5725b

Object Mode: pass eval_ctx to ED_object_iter_other

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

M	source/blender/editors/include/ED_object.h
M	source/blender/editors/mesh/meshtools.c
M	source/blender/editors/object/object_modifier.c

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

diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 8d2ff327c51..541e9f4b94d 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -55,6 +55,7 @@ struct wmOperatorType;
 struct PointerRNA;
 struct PropertyRNA;
 struct EnumPropertyItem;
+struct EvaluationContext;
 
 /* object_edit.c */
 struct Object *ED_object_context(struct bContext *C);               /* context.object */
@@ -200,11 +201,15 @@ int ED_object_modifier_apply(struct ReportList *reports, const struct bContext *
                              struct Object *ob, struct ModifierData *md, int mode);
 int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
 
-bool ED_object_iter_other(struct Main *bmain, struct Object *orig_ob, const bool include_orig,
-                          bool (*callback)(struct Object *ob, void *callback_data),
-                          void *callback_data);
+bool ED_object_iter_other(
+        const struct EvaluationContext *eval_ctx, struct Main *bmain,
+        struct Object *orig_ob, const bool include_orig,
+        bool (*callback)(const struct EvaluationContext *eval_ctx, struct Object *ob, void *callback_data),
+        void *callback_data);
 
-bool ED_object_multires_update_totlevels_cb(struct Object *ob, void *totlevel_v);
+bool ED_object_multires_update_totlevels_cb(
+        const struct EvaluationContext *eval_ctx,
+        struct Object *ob, void *totlevel_v);
 
 /* object_select.c */
 void ED_object_select_linked_by_id(struct bContext *C, struct ID *id);
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index d0d43c4b3dd..85b1c70fde3 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -222,9 +222,10 @@ static void join_mesh_single(
 			multiresModifier_prepare_join(&eval_ctx, scene, ob_src, ob_dst);
 
 			if ((mmd = get_multires_modifier(scene, ob_src, true))) {
-				ED_object_iter_other(bmain, ob_src, true,
-				                     ED_object_multires_update_totlevels_cb,
-				                     &mmd->totlvl);
+				ED_object_iter_other(
+				        &eval_ctx, bmain, ob_src, true,
+				        ED_object_multires_update_totlevels_cb,
+				        &mmd->totlvl);
 			}
 		}
 
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 0687287bd20..533bd0fcff5 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -202,9 +202,11 @@ static bool object_has_modifier(const Object *ob, const ModifierData *exclude,
  * If the callback ever returns true, iteration will stop and the
  * function value will be true. Otherwise the function returns false.
  */
-bool ED_object_iter_other(Main *bmain, Object *orig_ob, const bool include_orig,
-                          bool (*callback)(Object *ob, void *callback_data),
-                          void *callback_data)
+bool ED_object_iter_other(
+        const EvaluationContext *eval_ctx,
+        Main *bmain, Object *orig_ob, const bool include_orig,
+        bool (*callback)(const EvaluationContext *eval_ctx, Object *ob, void *callback_data),
+        void *callback_data)
 {
 	ID *ob_data_id = orig_ob->data;
 	int users = ob_data_id->us;
@@ -223,7 +225,7 @@ bool ED_object_iter_other(Main *bmain, Object *orig_ob, const bool include_orig,
 			if (((ob != orig_ob) || include_orig) &&
 			    (ob->data == orig_ob->data))
 			{
-				if (callback(ob, callback_data))
+				if (callback(eval_ctx, ob, callback_data))
 					return true;
 
 				totfound++;
@@ -231,13 +233,15 @@ bool ED_object_iter_other(Main *bmain, Object *orig_ob, const bool include_orig,
 		}
 	}
 	else if (include_orig) {
-		return callback(orig_ob, callback_data);
+		return callback(eval_ctx, orig_ob, callback_data);
 	}
 
 	return false;
 }
 
-static bool object_has_modifier_cb(Object *ob, void *data)
+static bool object_has_modifier_cb(
+        const EvaluationContext *UNUSED(eval_ctx),
+        Object *ob, void *data)
 {
 	ModifierType type = *((ModifierType *)data);
 
@@ -247,7 +251,9 @@ static bool object_has_modifier_cb(Object *ob, void *data)
 /* Use with ED_object_iter_other(). Sets the total number of levels
  * for any multires modifiers on the object to the int pointed to by
  * callback_data. */
-bool ED_object_multires_update_totlevels_cb(Object *ob, void *totlevel_v)
+bool ED_object_multires_update_totlevels_cb(
+        const struct EvaluationContext *UNUSED(eval_ctx),
+        Object *ob, void *totlevel_v)
 {
 	ModifierData *md;
 	int totlevel = *((char *)totlevel_v);
@@ -267,7 +273,7 @@ static bool object_modifier_safe_to_delete(Main *bmain, Object *ob,
                                            ModifierType type)
 {
 	return (!object_has_modifier(ob, exclude, type) &&
-	        !ED_object_iter_other(bmain, ob, false,
+	        !ED_object_iter_other(NULL, bmain, ob, false,
 	                              object_has_modifier_cb, &type));
 }
 
@@ -1153,10 +1159,13 @@ static int multires_higher_levels_delete_exec(bContext *C, wmOperator *op)
 	
 	if (!mmd)
 		return OPERATOR_CANCELLED;
-	
+
+	EvaluationContext eval_ctx;
+	CTX_data_eval_ctx(C, &eval_ctx);
+
 	multiresModifier_del_levels(mmd, ob, 1);
 
-	ED_object_iter_other(CTX_data_main(C), ob, true,
+	ED_object_iter_other(&eval_ctx, CTX_data_main(C), ob, true,
 	                     ED_object_multires_update_totlevels_cb,
 	                     &mmd->totlvl);
 	
@@ -1197,17 +1206,20 @@ static int multires_subdivide_exec(bContext *C, wmOperator *op)
 	
 	if (!mmd)
 		return OPERATOR_CANCELLED;
-	
+
+	EvaluationContext eval_ctx;
+	CTX_data_eval_ctx(C, &eval_ctx);
 	multiresModifier_subdivide(mmd, ob, 0, mmd->simple);
 
-	ED_object_iter_other(CTX_data_main(C), ob, true,
-	                     ED_object_multires_update_totlevels_cb,
-	                     &mmd->totlvl);
+	ED_object_iter_other(
+	        &eval_ctx, CTX_data_main(C), ob, true,
+	        ED_object_multires_update_totlevels_cb,
+	        &mmd->totlvl);
 
 	DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
 	WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
 
-	if (ob->mode & OB_MODE_SCULPT) {
+	if (eval_ctx.mode & OB_MODE_SCULPT) {
 		/* ensure that grid paint mask layer is created */
 		BKE_sculpt_mask_layers_ensure(ob, mmd);
 	}



More information about the Bf-blender-cvs mailing list