[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