Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2016-04-29 15:33:06 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-04-29 16:39:50 +0300
commit6d0cae56e84306ed64a51005c4fb1811a40822b7 (patch)
treede25f4c347865a2aefe7d33b8ab5920d35718254 /source/blender/editors/object/object_edit.c
parentb5ce2bbef7a91f81c3556f2ddf6dd5f21161bc91 (diff)
Fix T48290: Hook fails after deleting geometry
Now CD_SHAPEKEY_INDEX customdata is stored in edit-mode when hooks and vertex parents are used. This also fixes a bug where undo would loose key-index data. Move to structs for BM_mesh_bm_to/from_me to avoid passing many argument, which mostly aren't used.
Diffstat (limited to 'source/blender/editors/object/object_edit.c')
-rw-r--r--source/blender/editors/object/object_edit.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 56d27bfd727..06200778ee5 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -316,6 +316,27 @@ void OBJECT_OT_hide_render_set(wmOperatorType *ot)
/* ******************* toggle editmode operator ***************** */
+static bool mesh_needs_keyindex(const Mesh *me)
+{
+ if (me->key) {
+ return false; /* will be added */
+ }
+
+ for (const Object *ob = G.main->object.first; ob; ob = ob->id.next) {
+ if ((ob->parent) && (ob->parent->data == me) && ELEM(ob->partype, PARVERT1, PARVERT3)) {
+ return true;
+ }
+ if (ob->data == me) {
+ for (const ModifierData *md = ob->modifiers.first; md; md = md->next) {
+ if (md->type == eModifierType_Hook) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
/**
* Load EditMode data back into the object,
* optionally freeing the editmode data.
@@ -494,7 +515,9 @@ void ED_object_editmode_enter(bContext *C, int flag)
ok = 1;
scene->obedit = ob; /* context sees this */
- EDBM_mesh_make(scene->toolsettings, ob);
+ const bool use_key_index = mesh_needs_keyindex(ob->data);
+
+ EDBM_mesh_make(scene->toolsettings, ob, use_key_index);
em = BKE_editmesh_from_object(ob);
if (LIKELY(em)) {