[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16563] trunk/blender/source/blender/ blenkernel/intern/particle.c: Fix for [#17561] when i try to change the particle to hair I cant choose group or object as viz .

Janne Karhu jhkarh at utu.fi
Tue Sep 16 23:16:32 CEST 2008


Revision: 16563
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16563
Author:   jhk
Date:     2008-09-16 23:16:32 +0200 (Tue, 16 Sep 2008)

Log Message:
-----------
Fix for [#17561] when i try to change the particle to hair I cant choose group or object as viz.
-Partly reverted Genscher's previous fix on the issue and added the idea he had as a special case

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2008-09-16 21:11:38 UTC (rev 16562)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2008-09-16 21:16:32 UTC (rev 16563)
@@ -3850,7 +3850,7 @@
 
 void psys_get_dupli_path_transform(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, ParticleData *pa, ChildParticle *cpa, ParticleCacheKey *cache, float mat[][4], float *scale)
 {
-	float loc[3], nor[3], vec[3], len, obrotmat[4][4], qmat[4][4];
+	float loc[3], nor[3], vec[3], side[3], len, obrotmat[4][4], qmat[4][4];
 	float xvec[3] = {-1.0, 0.0, 0.0}, q[4];
 
 	VecSubf(vec, (cache+cache->steps-1)->co, cache->co);
@@ -3875,9 +3875,27 @@
 		Mat4MulMat4(mat, obrotmat, qmat);
 	}
 	else {
-		Normalize(nor);
-		Mat4One(mat);
-		VECCOPY(mat[2], nor); // mat[2] is normal/direction
+		/* make sure that we get a proper side vector */
+		if(fabs(Inpf(nor,vec))>0.999999) {
+			if(fabs(Inpf(nor,xvec))>0.999999) {
+				nor[0] = 0.0f;
+				nor[1] = 1.0f;
+				nor[2] = 0.0f;
+			}
+			else {
+				nor[0] = 1.0f;
+				nor[1] = 0.0f;
+				nor[2] = 0.0f;
+			}
+		}
+		Crossf(side, nor, vec);
+		Normalize(side);
+		Crossf(nor, vec, side);
+
+ 		Mat4One(mat);
+		VECCOPY(mat[0], vec);
+		VECCOPY(mat[1], side);
+		VECCOPY(mat[2], nor);
 	}
 
 	*scale= len;





More information about the Bf-blender-cvs mailing list