diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-07-28 20:47:12 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-07-28 20:47:12 +0400 |
commit | c8b6533ddaf421b51d44af7de4816f41086c9510 (patch) | |
tree | ef0508137b4f30d678200b56ae64e23fc68a009b /source | |
parent | 2c8d7921bc6bc32dd1fa24e3e00cc717c4ed5ccb (diff) |
Fix #23071: making vertex parent not correct with subsurf modifier, now it
also uses the final derivedmesh for the coordinates in edit mode.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 81799a5409d..39e02ee584d 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1837,47 +1837,38 @@ static void give_parvert(Object *par, int nr, float *vec) if(par->type==OB_MESH) { Mesh *me= par->data; - em = BKE_mesh_get_editmesh(me); + DerivedMesh *dm; - if(em) { - EditVert *eve; + em = BKE_mesh_get_editmesh(me); + dm = (em)? em->derivedFinal: par->derivedFinal; - for(eve= em->verts.first; eve; eve= eve->next) { - if(eve->keyindex==nr) { - memcpy(vec, eve->co, sizeof(float)*3); - break; + if(dm) { + MVert *mvert= dm->getVertArray(dm); + int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX); + int i, count = 0, vindex, numVerts = dm->getNumVerts(dm); + + /* get the average of all verts with (original index == nr) */ + for(i = 0; i < numVerts; i++) { + vindex= (index)? index[i]: i; + + if(vindex == nr) { + add_v3_v3(vec, mvert[i].co); + count++; } } - BKE_mesh_end_editmesh(me, em); - } - else { - DerivedMesh *dm = par->derivedFinal; - - if(dm) { - MVert *mvert= dm->getVertArray(dm); - int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX); - int i, count = 0, vindex, numVerts = dm->getNumVerts(dm); - - /* get the average of all verts with (original index == nr) */ - for(i = 0; i < numVerts; i++) { - vindex= (index)? index[i]: i; - - if(vindex == nr) { - add_v3_v3(vec, mvert[i].co); - count++; - } - } - if (count==0) { - /* keep as 0,0,0 */ - } else if(count > 0) { - mul_v3_fl(vec, 1.0f / count); - } else { - /* use first index if its out of range */ - dm->getVertCo(dm, 0, vec); - } + if (count==0) { + /* keep as 0,0,0 */ + } else if(count > 0) { + mul_v3_fl(vec, 1.0f / count); + } else { + /* use first index if its out of range */ + dm->getVertCo(dm, 0, vec); } } + + if(em) + BKE_mesh_end_editmesh(me, em); } else if (ELEM(par->type, OB_CURVE, OB_SURF)) { Nurb *nu; |