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>2020-10-14 06:49:22 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-10-14 06:49:22 +0300
commit862b5b18421a986b3d2cf8b0951f1a58797aaa52 (patch)
tree65feaeec60b4a789c5ceec4baf6c70f60024dc9e /source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
parentdeca7c795411975e3bfb11cd6934ace768be772b (diff)
Fix T81511: Loop-cut overlay doesn't follow deformed cage
With constructive + deform modifiers, loop-cut visualization wasn't following the displayed mesh. This now gets the coordinates from the cage when available.
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c')
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
index e17993445df..aa8905721b4 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
@@ -364,16 +364,19 @@ static int gizmo_preselect_edgering_test_select(bContext *C, wmGizmo *gz, const
}
else {
if (best.eed) {
- const float(*coords)[3] = NULL;
- {
- Object *ob = gz_ring->bases[gz_ring->base_index]->object;
- Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
- Mesh *me_eval = (Mesh *)DEG_get_evaluated_id(depsgraph, ob->data);
- if (me_eval->runtime.edit_data) {
- coords = me_eval->runtime.edit_data->vertexCos;
- }
- }
+ Object *ob = gz_ring->bases[gz_ring->base_index]->object;
+ Scene *scene_eval = (Scene *)DEG_get_evaluated_id(vc.depsgraph, &vc.scene->id);
+ Object *ob_eval = DEG_get_evaluated_object(vc.depsgraph, ob);
+ BMEditMesh *em_eval = BKE_editmesh_from_object(ob_eval);
+ /* Re-allocate coords each update isn't ideal, however we can't be sure
+ * the mesh hasn't been edited since last update. */
+ bool is_alloc = false;
+ const float(*coords)[3] = BKE_editmesh_vert_coords_when_deformed(
+ vc.depsgraph, em_eval, scene_eval, ob_eval, NULL, &is_alloc);
EDBM_preselect_edgering_update_from_edge(gz_ring->psel, bm, best.eed, 1, coords);
+ if (is_alloc) {
+ MEM_freeN((void *)coords);
+ }
}
else {
EDBM_preselect_edgering_clear(gz_ring->psel);