[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30845] trunk/blender/source/blender/ blenkernel/intern/object.c: Fix #23071: making vertex parent not correct with subsurf modifier, now it

Brecht Van Lommel brecht at blender.org
Wed Jul 28 18:47:12 CEST 2010


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;





More information about the Bf-blender-cvs mailing list