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

Reply via email to