Commit: 42a0f0135998c128a3480e730c59447077fe8379
Author: Lukas Tönne
Date:   Mon Mar 3 14:10:58 2014 +0100
Branches: hair_system
https://developer.blender.org/rB42a0f0135998c128a3480e730c59447077fe8379

Eval function to get a location and normal vector from mesh samples.

===================================================================

M       source/blender/blenkernel/BKE_mesh_sample.h
M       source/blender/blenkernel/intern/mesh_sample.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_mesh_sample.h 
b/source/blender/blenkernel/BKE_mesh_sample.h
index 084f477..8d1ce65 100644
--- a/source/blender/blenkernel/BKE_mesh_sample.h
+++ b/source/blender/blenkernel/BKE_mesh_sample.h
@@ -25,10 +25,14 @@
  *  \ingroup bke
  */
 
+struct DerivedMesh;
+
 struct MSurfaceSample;
 
 /* Evaluate */
 
+void BKE_mesh_sample_eval(struct DerivedMesh *dm, const struct MSurfaceSample 
*sample, float loc[3], float nor[3]);
+
 
 /* Iterators */
 
diff --git a/source/blender/blenkernel/intern/mesh_sample.c 
b/source/blender/blenkernel/intern/mesh_sample.c
index 53b9231..49e4486 100644
--- a/source/blender/blenkernel/intern/mesh_sample.c
+++ b/source/blender/blenkernel/intern/mesh_sample.c
@@ -41,6 +41,46 @@
 
 /* Evaluate */
 
+void BKE_mesh_sample_eval(DerivedMesh *dm, const MSurfaceSample *sample, float 
loc[3], float nor[3])
+{
+       MVert *mverts = dm->getVertArray(dm);
+       MVert *v1, *v2, *v3, *v4;
+       MFace *mfaces = dm->getTessFaceArray(dm);
+       int totfaces = dm->getNumTessFaces(dm);
+       MFace *mface = &mfaces[sample->orig_face];
+       float vnor[3];
+       
+       zero_v3(loc);
+       zero_v3(nor);
+       
+       if (sample->orig_face >= totfaces)
+               return;
+       
+       v1 = &mverts[mface->v1];
+       v2 = &mverts[mface->v2];
+       v3 = &mverts[mface->v3];
+       
+       madd_v3_v3fl(loc, v1->co, sample->orig_weights[0]);
+       madd_v3_v3fl(loc, v2->co, sample->orig_weights[1]);
+       madd_v3_v3fl(loc, v3->co, sample->orig_weights[2]);
+       
+       normal_short_to_float_v3(vnor, v1->no);
+       madd_v3_v3fl(nor, vnor, sample->orig_weights[0]);
+       normal_short_to_float_v3(vnor, v2->no);
+       madd_v3_v3fl(nor, vnor, sample->orig_weights[1]);
+       normal_short_to_float_v3(vnor, v3->no);
+       madd_v3_v3fl(nor, vnor, sample->orig_weights[2]);
+       
+       if (mface->v4) {
+               v4 = &mverts[mface->v4];
+               
+               madd_v3_v3fl(loc, v4->co, sample->orig_weights[3]);
+               
+               normal_short_to_float_v3(vnor, v4->no);
+               madd_v3_v3fl(nor, vnor, sample->orig_weights[3]);
+       }
+}
+
 
 /* Iterators */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to