diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-03-17 01:58:05 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-03-17 01:58:05 +0300 |
commit | 750c0dd4debce8c79c3875fe54f1a1d57cf047da (patch) | |
tree | dbacc9830e326239a5cfb07405d474d1a81f8587 /source/blender/editors | |
parent | d4d8da28fce479d01d2910f4acc9e849621807d9 (diff) |
Fix T50950: Converting meshes fails w/ boolean
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/object/object_add.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index ae458c722f9..c9c3fe981bc 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -1656,8 +1656,25 @@ static int convert_exec(bContext *C, wmOperator *op) } } - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + ListBase selected_editable_bases = CTX_data_collection_get(C, "selected_editable_bases"); + + /* Ensure we get all meshes calculated with a sufficient data-mask, + * needed since re-evaluating single modifiers causes bugs if they depend + * on other objects data masks too, see: T50950. */ { + for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) { + Base *base = link->ptr.data; + DAG_id_tag_update(&base->object->id, OB_RECALC_DATA); + } + + uint64_t customdata_mask_prev = scene->customdata_mask; + scene->customdata_mask |= CD_MASK_MESH; + BKE_scene_update_tagged(bmain->eval_ctx, bmain, scene); + scene->customdata_mask = customdata_mask_prev; + } + + for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) { + Base *base = link->ptr.data; ob = base->object; if (ob->flag & OB_DONE || !IS_TAGGED(ob->data)) { @@ -1889,7 +1906,7 @@ static int convert_exec(bContext *C, wmOperator *op) ((ID *)ob->data)->tag &= ~LIB_TAG_DOIT; /* flag not to convert this datablock again */ } } - CTX_DATA_END; + BLI_freelistN(&selected_editable_bases); if (!keep_original) { if (mballConverted) { |