bugfix [#24887] Crash on snapping verts on other object

now the derived mesh and the editmesh will always have matching faces.
This commit is contained in:
Campbell Barton
2010-11-24 18:02:35 +00:00
parent 82f019e954
commit 2c70b1785c
2 changed files with 3 additions and 3 deletions

View File

@@ -578,12 +578,11 @@ BVHTree* bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *mesh, float
tree = BLI_bvhtree_new(numFaces, epsilon, tree_type, axis);
if(tree != NULL)
{
/* XXX numFaces is from different mesh as em_evil, made loop check for efa too */
/* XXX, for snap only, em & dm are assumed to be aligned, since dm is the em's cage */
EditMesh *em= data->em_evil;
if(em) {
EditFace *efa= em->faces.first;
for(i = 0; i < numFaces, efa; i++, efa= efa->next) {
for(i = 0; i < numFaces; i++, efa= efa->next) {
if(!(efa->f & 1) && efa->h==0 && !((efa->v1->f&1)+(efa->v2->f&1)+(efa->v3->f&1)+(efa->v4?efa->v4->f&1:0))) {
float co[4][3];
VECCOPY(co[0], vert[ face[i].v1 ].co);

View File

@@ -1542,7 +1542,8 @@ int snapObject(Scene *scene, ARegion *ar, Object *ob, int editobject, float obma
if (editobject)
{
em = ((Mesh *)ob->data)->edit_mesh;
dm = editmesh_get_derived_cage(scene, ob, em, CD_MASK_BAREMESH);
/* dm = editmesh_get_derived_cage(scene, ob, em, CD_MASK_BAREMESH); */
dm = editmesh_get_derived_base(ob, em); /* limitation, em & dm MUST have the same number of faces */
}
else
{