[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57213] trunk/blender/source/blender/ editors/physics/particle_object.c: fix [#35477] Clicking "Connect Hair" button translates a mesh by it's object location.

Campbell Barton ideasman42 at gmail.com
Mon Jun 3 05:47:43 CEST 2013


Revision: 57213
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57213
Author:   campbellbarton
Date:     2013-06-03 03:47:41 +0000 (Mon, 03 Jun 2013)
Log Message:
-----------
fix [#35477] Clicking "Connect Hair" button translates a mesh by it's object location.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/physics/particle_object.c

Modified: trunk/blender/source/blender/editors/physics/particle_object.c
===================================================================
--- trunk/blender/source/blender/editors/physics/particle_object.c	2013-06-03 01:28:59 UTC (rev 57212)
+++ trunk/blender/source/blender/editors/physics/particle_object.c	2013-06-03 03:47:41 UTC (rev 57213)
@@ -633,7 +633,8 @@
 	HairKey *key;
 	BVHTreeFromMesh bvhtree= {NULL};
 	BVHTreeNearest nearest;
-	MFace *mface;
+	MFace *mface, *mf;
+	MVert *mvert;
 	DerivedMesh *dm = NULL;
 	int numverts;
 	int i, k;
@@ -646,21 +647,27 @@
 	edit= psys->edit;
 	point=  edit ? edit->points : NULL;
 	
-	if (psmd->dm->deformedOnly)
+	if (psmd->dm->deformedOnly) {
 		/* we don't want to mess up psmd->dm when converting to global coordinates below */
-		dm= CDDM_copy(psmd->dm);
-	else
-		dm= mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+		dm = psmd->dm;
+	}
+	else {
+		dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+	}
+	/* don't modify the original vertices */
+	dm = CDDM_copy(dm);
 
 	/* BMESH_ONLY, deform dm may not have tessface */
 	DM_ensure_tessface(dm);
 
-
 	numverts = dm->getNumVerts(dm);
 
+	mvert = dm->getVertArray(dm);
+	mface = dm->getTessFaceArray(dm);
+
 	/* convert to global coordinates */
 	for (i=0; i<numverts; i++)
-		mul_m4_v3(ob->obmat, CDDM_get_vert(dm, i)->co);
+		mul_m4_v3(ob->obmat, mvert[i].co);
 
 	bvhtree_from_mesh_faces(&bvhtree, dm, 0.0, 2, 6);
 
@@ -678,13 +685,13 @@
 			continue;
 		}
 
-		mface = CDDM_get_tessface(dm, nearest.index);
+		mf = &mface[nearest.index];
 
-		copy_v3_v3(v[0], CDDM_get_vert(dm, mface->v1)->co);
-		copy_v3_v3(v[1], CDDM_get_vert(dm, mface->v2)->co);
-		copy_v3_v3(v[2], CDDM_get_vert(dm, mface->v3)->co);
-		if (mface->v4) {
-			copy_v3_v3(v[3], CDDM_get_vert(dm, mface->v4)->co);
+		copy_v3_v3(v[0], mvert[mf->v1].co);
+		copy_v3_v3(v[1], mvert[mf->v2].co);
+		copy_v3_v3(v[2], mvert[mf->v3].co);
+		if (mf->v4) {
+			copy_v3_v3(v[3], mvert[mf->v4].co);
 			interp_weights_poly_v3(pa->fuv, v, 4, nearest.co);
 		}
 		else




More information about the Bf-blender-cvs mailing list