Revision: 30845 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30845 Author: blendix Date: 2010-07-28 18:47:12 +0200 (Wed, 28 Jul 2010)
Log Message: ----------- Fix #23071: making vertex parent not correct with subsurf modifier, now it also uses the final derivedmesh for the coordinates in edit mode. Modified Paths: -------------- trunk/blender/source/blender/blenkernel/intern/object.c Modified: trunk/blender/source/blender/blenkernel/intern/object.c =================================================================== --- trunk/blender/source/blender/blenkernel/intern/object.c 2010-07-28 16:46:49 UTC (rev 30844) +++ trunk/blender/source/blender/blenkernel/intern/object.c 2010-07-28 16:47:12 UTC (rev 30845) @@ -1837,47 +1837,38 @@ 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; - } - } - 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); + 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; + /* 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(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; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs