[Bf-blender-cvs] [095f9f26aab] blender2.8: Fix T57770: Edit-mesh wireframe cage select fails

Campbell Barton noreply at git.blender.org
Wed Dec 5 23:39:42 CET 2018


Commit: 095f9f26aabcc3edd8f7ad4d0e74fb4de979aa1a
Author: Campbell Barton
Date:   Thu Dec 6 09:38:08 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB095f9f26aabcc3edd8f7ad4d0e74fb4de979aa1a

Fix T57770: Edit-mesh wireframe cage select fails

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

M	source/blender/blenkernel/BKE_DerivedMesh.h
M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/editors/space_view3d/view3d_iterators.c

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

diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index e209938cc80..c9ea8b3174c 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -508,6 +508,9 @@ DerivedMesh *mesh_create_derived(struct Mesh *me, float (*vertCos)[3]);
 struct Mesh *editbmesh_get_eval_cage(
         struct Depsgraph *depsgraph, struct Scene *scene, struct Object *,
         struct BMEditMesh *em, CustomDataMask dataMask);
+struct Mesh *editbmesh_get_eval_cage_from_orig(
+        struct Depsgraph *depsgraph, struct Scene *scene, struct Object *,
+        struct BMEditMesh *em, CustomDataMask dataMask);
 struct Mesh *editbmesh_get_eval_cage_and_final(
         struct Depsgraph *depsgraph, struct Scene *scene, struct Object *,
         struct BMEditMesh *em, CustomDataMask dataMask,
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 9880904daf7..a29b0011216 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2079,6 +2079,8 @@ static void editbmesh_build_data(
         struct Depsgraph *depsgraph, Scene *scene,
         Object *obedit, BMEditMesh *em, CustomDataMask dataMask)
 {
+	BLI_assert(em->ob->id.tag & LIB_TAG_COPIED_ON_WRITE);
+
 	BKE_object_free_derived_caches(obedit);
 	BKE_object_sculpt_modifiers_changed(obedit);
 
@@ -2419,6 +2421,17 @@ Mesh *editbmesh_get_eval_cage(
 	return em->mesh_eval_cage;
 }
 
+Mesh *editbmesh_get_eval_cage_from_orig(
+        struct Depsgraph *depsgraph, Scene *scene, Object *obedit, BMEditMesh *UNUSED(em),
+        CustomDataMask dataMask)
+{
+	BLI_assert((obedit->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0);
+	Scene *scene_eval = (Scene *)DEG_get_evaluated_id(depsgraph, &scene->id);
+	Object *obedit_eval = (Object *)DEG_get_evaluated_id(depsgraph, &obedit->id);
+	BMEditMesh *em_eval = BKE_editmesh_from_object(obedit_eval);
+	return editbmesh_get_eval_cage(depsgraph, scene_eval, obedit_eval, em_eval, dataMask);
+}
+
 /***/
 
 /* UNUSED */
diff --git a/source/blender/editors/space_view3d/view3d_iterators.c b/source/blender/editors/space_view3d/view3d_iterators.c
index c7552d2887e..9ee7cbabd2a 100644
--- a/source/blender/editors/space_view3d/view3d_iterators.c
+++ b/source/blender/editors/space_view3d/view3d_iterators.c
@@ -162,7 +162,7 @@ void mesh_foreachScreenVert(
 {
 	foreachScreenVert_userData data;
 
-	Mesh *me = editbmesh_get_eval_cage(vc->depsgraph, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
+	Mesh *me = editbmesh_get_eval_cage_from_orig(vc->depsgraph, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
 	ED_view3d_check_mats_rv3d(vc->rv3d);
 
@@ -215,7 +215,7 @@ void mesh_foreachScreenEdge(
 {
 	foreachScreenEdge_userData data;
 
-	Mesh *me = editbmesh_get_eval_cage(vc->depsgraph, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
+	Mesh *me = editbmesh_get_eval_cage_from_orig(vc->depsgraph, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
 	ED_view3d_check_mats_rv3d(vc->rv3d);
 
@@ -260,7 +260,7 @@ void mesh_foreachScreenFace(
 {
 	foreachScreenFace_userData data;
 
-	Mesh *me = editbmesh_get_eval_cage(vc->depsgraph, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
+	Mesh *me = editbmesh_get_eval_cage_from_orig(vc->depsgraph, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 	ED_view3d_check_mats_rv3d(vc->rv3d);
 
 	data.vc = *vc;



More information about the Bf-blender-cvs mailing list