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 <campbell@blender.org>2022-02-04 03:05:31 +0300
committerCampbell Barton <campbell@blender.org>2022-02-04 03:08:34 +0300
commitef2685afea74135531661a5ea993cb38aeb2b261 (patch)
treea95393ea6f62a9495c057eca6fb8787b750397f8 /source/blender/editors/util
parenta0c1306e8c7673f365e1907cacff86f788e08cef (diff)
Fix assertion snapping to selected in mesh edit-mode
ED_transverts_create_from_obedit expected an evaluated object. Add flag to request TX_VERT_USE_MAPLOC to be set, which avoids having to calculate this data when it's not used as well as the requirement that the input object be evaluated from the depsgraph.
Diffstat (limited to 'source/blender/editors/util')
-rw-r--r--source/blender/editors/util/ed_transverts.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/source/blender/editors/util/ed_transverts.c b/source/blender/editors/util/ed_transverts.c
index b8efbad1ad9..b9e90670a4d 100644
--- a/source/blender/editors/util/ed_transverts.c
+++ b/source/blender/editors/util/ed_transverts.c
@@ -195,12 +195,12 @@ static void set_mapped_co(void *vuserdata, int index, const float co[3], const f
}
}
-bool ED_transverts_check_obedit(Object *obedit)
+bool ED_transverts_check_obedit(const Object *obedit)
{
return (ELEM(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE, OB_MBALL));
}
-void ED_transverts_create_from_obedit(TransVertStore *tvs, Object *obedit, const int mode)
+void ED_transverts_create_from_obedit(TransVertStore *tvs, const Object *obedit, const int mode)
{
Nurb *nu;
BezTriple *bezt;
@@ -214,7 +214,7 @@ void ED_transverts_create_from_obedit(TransVertStore *tvs, Object *obedit, const
tvs->transverts_tot = 0;
if (obedit->type == OB_MESH) {
- BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMEditMesh *em = BKE_editmesh_from_object((Object *)obedit);
BMesh *bm = em->bm;
BMIter iter;
void *userdata[2] = {em, NULL};
@@ -312,10 +312,13 @@ void ED_transverts_create_from_obedit(TransVertStore *tvs, Object *obedit, const
userdata[1] = tvs->transverts;
}
- struct Mesh *editmesh_eval_cage = BKE_object_get_editmesh_eval_cage(obedit);
- if (tvs->transverts && editmesh_eval_cage) {
- BM_mesh_elem_table_ensure(bm, BM_VERT);
- BKE_mesh_foreach_mapped_vert(editmesh_eval_cage, set_mapped_co, userdata, MESH_FOREACH_NOP);
+ if (mode & TM_CALC_MAPLOC) {
+ struct Mesh *editmesh_eval_cage = BKE_object_get_editmesh_eval_cage(obedit);
+ if (tvs->transverts && editmesh_eval_cage) {
+ BM_mesh_elem_table_ensure(bm, BM_VERT);
+ BKE_mesh_foreach_mapped_vert(
+ editmesh_eval_cage, set_mapped_co, userdata, MESH_FOREACH_NOP);
+ }
}
}
else if (obedit->type == OB_ARMATURE) {