From b22831e5cee300258129d86b3dba01931c42bfc5 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Fri, 15 Aug 2014 10:07:39 +0200 Subject: Modifiers: consider all constructive modifiers as 'preview' ones as well. Indeed, constructive modifiers are highly likely to modify CDLayers like vgroups or vcols! See vertexgroup2.blend file ({F93770}) in T40523, especially obvious with subsurf modifier. --- source/blender/blenkernel/intern/modifier.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'source/blender/blenkernel/intern/modifier.c') diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 1c42603cf4a..074a91ea2cf 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -171,11 +171,14 @@ bool modifier_isPreview(ModifierData *md) { ModifierTypeInfo *mti = modifierType_getInfo(md->type); - if (!(mti->flags & eModifierTypeFlag_UsesPreview)) + /* Constructive modifiers are highly likely to also modify data like vgroups or vcol! */ + if (!((mti->flags & eModifierTypeFlag_UsesPreview) || (mti->type == eModifierTypeType_Constructive))) { return false; + } - if (md->mode & eModifierMode_Realtime) + if (md->mode & eModifierMode_Realtime) { return true; + } return false; } -- cgit v1.2.3 From e85bcfab044f0bee9819608bab8ca95f09809ff6 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sun, 17 Aug 2014 09:35:57 +0200 Subject: Fix T41467: Modifier view buttons changing positions. Commits early in this year (to save some space) broke this. Hopefully this time it works in all cases - lastCageIndex is no more influenced by realtime/edit active states. Also, inactivate buttons instead of hiding them, can be useful to set those data even though it does not have any immediate effect. Took the opportunity to switch cage buttons to RNA, btw. --- source/blender/blenkernel/intern/modifier.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'source/blender/blenkernel/intern/modifier.c') diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 074a91ea2cf..b4d9561ec5d 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -353,6 +353,7 @@ int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *r_lastPossibleC /* Find the last modifier acting on the cage. */ for (i = 0; md; i++, md = md->next) { ModifierTypeInfo *mti = modifierType_getInfo(md->type); + bool supports_mapping; md->scene = scene; @@ -360,16 +361,17 @@ int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *r_lastPossibleC if (!(mti->flags & eModifierTypeFlag_SupportsEditmode)) continue; if (md->mode & eModifierMode_DisableTemporary) continue; + supports_mapping = modifier_supportsMapping(md); + if (r_lastPossibleCageIndex && supports_mapping) { + *r_lastPossibleCageIndex = i; + } + if (!(md->mode & eModifierMode_Realtime)) continue; if (!(md->mode & eModifierMode_Editmode)) continue; - if (!modifier_supportsMapping(md)) + if (!supports_mapping) break; - if (r_lastPossibleCageIndex) { - *r_lastPossibleCageIndex = i; - } - if (md->mode & eModifierMode_OnCage) cageIndex = i; } -- cgit v1.2.3 From 49b894bcc1205ac9fe0657c82bded60044afd87e Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Wed, 20 Aug 2014 20:41:30 +0200 Subject: Cleanup: some const and bool cleanup. --- source/blender/blenkernel/intern/modifier.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'source/blender/blenkernel/intern/modifier.c') diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index b4d9561ec5d..a9e853c873e 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -414,13 +414,12 @@ bool modifier_isEnabled(struct Scene *scene, ModifierData *md, int required_mode md->scene = scene; - if ((md->mode & required_mode) != required_mode) return 0; - if (mti->isDisabled && mti->isDisabled(md, required_mode == eModifierMode_Render)) return 0; - if (md->mode & eModifierMode_DisableTemporary) return 0; - if (required_mode & eModifierMode_Editmode) - if (!(mti->flags & eModifierTypeFlag_SupportsEditmode)) return 0; + if ((md->mode & required_mode) != required_mode) return false; + if (mti->isDisabled && mti->isDisabled(md, required_mode == eModifierMode_Render)) return false; + if (md->mode & eModifierMode_DisableTemporary) return false; + if ((required_mode & eModifierMode_Editmode) && !(mti->flags & eModifierTypeFlag_SupportsEditmode)) return false; - return 1; + return true; } CDMaskLink *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md, -- cgit v1.2.3