[Bf-blender-cvs] [f0e0003] alembic: Fix for incorrect vertex loops when calculating strands.

Lukas Tönne noreply at git.blender.org
Tue May 19 12:01:07 CEST 2015


Commit: f0e00033d196acaec5496e06eb8c2b51b0880f73
Author: Lukas Tönne
Date:   Tue May 19 11:56:44 2015 +0200
Branches: alembic
https://developer.blender.org/rBf0e00033d196acaec5496e06eb8c2b51b0880f73

Fix for incorrect vertex loops when calculating strands.

This was using vprev from previous strands, leading to spurious changes
on untouched strands when combing.

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

M	source/blender/blenkernel/intern/editstrands.c
M	source/blender/physics/intern/strands.cpp

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

diff --git a/source/blender/blenkernel/intern/editstrands.c b/source/blender/blenkernel/intern/editstrands.c
index b7a4817..03871bc 100644
--- a/source/blender/blenkernel/intern/editstrands.c
+++ b/source/blender/blenkernel/intern/editstrands.c
@@ -160,13 +160,14 @@ void BKE_editstrands_solve_constraints(Object *ob, BMEditStrands *es, BMEditStra
 
 static void editstrands_calc_segment_lengths(BMesh *bm)
 {
-	BMVert *root, *v, *vprev;
-	BMIter iter, iter_strand;
-	int k;
+	BMVert *root;
+	BMIter iter;
 	
 	BM_ITER_STRANDS(root, &iter, bm, BM_STRANDS_OF_MESH) {
-		BM_ITER_STRANDS_ELEM_INDEX(v, &iter_strand, root, BM_VERTS_OF_STRAND, k) {
-			if (k > 0) {
+		BMVert *v, *vprev = NULL;
+		BMIter iter_strand;
+		BM_ITER_STRANDS_ELEM(v, &iter_strand, root, BM_VERTS_OF_STRAND) {
+			if (vprev) {
 				float length = len_v3v3(v->co, vprev->co);
 				BM_elem_float_data_named_set(&bm->vdata, v, CD_PROP_FLT, CD_HAIR_SEGMENT_LENGTH, length);
 			}
diff --git a/source/blender/physics/intern/strands.cpp b/source/blender/physics/intern/strands.cpp
index 19a31f7..f494856 100644
--- a/source/blender/physics/intern/strands.cpp
+++ b/source/blender/physics/intern/strands.cpp
@@ -112,14 +112,15 @@ static void strands_apply_root_locations(BMEditStrands *edit)
 
 static void strands_adjust_segment_lengths(BMesh *bm)
 {
-	BMVert *root, *v, *vprev;
-	BMIter iter, iter_strand;
-	int k;
+	BMVert *root;
+	BMIter iter;
 	
 	BM_ITER_STRANDS(root, &iter, bm, BM_STRANDS_OF_MESH) {
-		BM_ITER_STRANDS_ELEM_INDEX(v, &iter_strand, root, BM_VERTS_OF_STRAND, k) {
-			if (k > 0) {
 				float base_length = BM_elem_float_data_named_get(&bm->vdata, v, CD_PROP_FLT, CD_HAIR_SEGMENT_LENGTH);
+		BMVert *v, *vprev = NULL;
+		BMIter iter_strand;
+		BM_ITER_STRANDS_ELEM(v, &iter_strand, root, BM_VERTS_OF_STRAND) {
+			if (vprev) {
 				float dist[3];
 				float length;




More information about the Bf-blender-cvs mailing list