[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37451] trunk/blender/source/blender/ editors/object/object_modifier.c: Fix #27570: apply button for modifiers required the modifier to be enabled, we

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Jun 13 16:11:30 CEST 2011


Revision: 37451
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37451
Author:   blendix
Date:     2011-06-13 14:11:29 +0000 (Mon, 13 Jun 2011)
Log Message:
-----------
Fix #27570: apply button for modifiers required the modifier to be enabled, we
now just enable the modifier before apply.

Patch Bastien Montagne (with some tweaks), thanks!

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_modifier.c

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2011-06-13 13:54:21 UTC (rev 37450)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2011-06-13 14:11:29 UTC (rev 37451)
@@ -399,6 +399,13 @@
 
 static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, ModifierData *md)
 {
+	ModifierTypeInfo *mti= modifierType_getInfo(md->type);
+
+	if (mti->isDisabled && mti->isDisabled(md, 0)) {
+		BKE_report(reports, RPT_ERROR, "Modifier is disabled, skipping apply");
+		return 0;
+	}
+
 	if (ob->type==OB_MESH) {
 		DerivedMesh *dm;
 		Mesh *me= ob->data;
@@ -442,7 +449,7 @@
 {
 	ModifierTypeInfo *mti= modifierType_getInfo(md->type);
 
-	if (!(md->mode&eModifierMode_Realtime) || (mti->isDisabled && mti->isDisabled(md, 0))) {
+	if (mti->isDisabled && mti->isDisabled(md, 0)) {
 		BKE_report(reports, RPT_ERROR, "Modifier is disabled, skipping apply");
 		return 0;
 	}
@@ -484,7 +491,7 @@
 				CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface);
 			}
 		}
-	} 
+	}
 	else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {
 		Curve *cu;
 		int numVerts;
@@ -530,6 +537,8 @@
 
 int ED_object_modifier_apply(ReportList *reports, Scene *scene, Object *ob, ModifierData *md, int mode)
 {
+	int prev_mode;
+
 	if (scene->obedit) {
 		BKE_report(reports, RPT_ERROR, "Modifiers cannot be applied in editmode");
 		return 0;
@@ -541,12 +550,20 @@
 	if (md!=ob->modifiers.first)
 		BKE_report(reports, RPT_INFO, "Applied modifier was not first, result may not be as expected.");
 
+	/* allow apply of a not-realtime modifier, by first re-enabling realtime. */
+	prev_mode= md->mode;
+	md->mode |= eModifierMode_Realtime;
+
 	if (mode == MODIFIER_APPLY_SHAPE) {
-		if (!modifier_apply_shape(reports, scene, ob, md))
+		if (!modifier_apply_shape(reports, scene, ob, md)) {
+			md->mode= prev_mode;
 			return 0;
+		}
 	} else {
-		if (!modifier_apply_obdata(reports, scene, ob, md))
+		if (!modifier_apply_obdata(reports, scene, ob, md)) {
+			md->mode= prev_mode;
 			return 0;
+		}
 	}
 
 	BLI_remlink(&ob->modifiers, md);




More information about the Bf-blender-cvs mailing list