diff options
Diffstat (limited to 'source/blender/blenkernel/intern/cloth.c')
-rw-r--r-- | source/blender/blenkernel/intern/cloth.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 98da1cf630d..14f94735957 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -1054,13 +1054,16 @@ static void cloth_free_errorsprings(Cloth *cloth, LinkNode **edgelist) } } -static void cloth_update_bending_targets(ClothModifierData *clmd) +static void cloth_hair_update_bending_targets(ClothModifierData *clmd) { Cloth *cloth = clmd->clothObject; LinkNode *search = NULL; float hair_frame[3][3], dir_old[3], dir_new[3]; int prev_mn; /* to find hair chains */ + if (!clmd->hairdata) + return; + /* XXX Note: we need to propagate frames from the root up, * but structural hair springs are stored in reverse order. * The bending springs however are then inserted in the same @@ -1126,13 +1129,16 @@ static void cloth_update_bending_targets(ClothModifierData *clmd) } } -static void cloth_update_bending_rest_targets(ClothModifierData *clmd) +static void cloth_hair_update_bending_rest_targets(ClothModifierData *clmd) { Cloth *cloth = clmd->clothObject; LinkNode *search = NULL; float hair_frame[3][3], dir_old[3], dir_new[3]; int prev_mn; /* to find hair roots */ + if (!clmd->hairdata) + return; + /* XXX Note: we need to propagate frames from the root up, * but structural hair springs are stored in reverse order. * The bending springs however are then inserted in the same @@ -1225,7 +1231,7 @@ static void cloth_update_springs( ClothModifierData *clmd ) search = search->next; } - cloth_update_bending_targets(clmd); + cloth_hair_update_bending_targets(clmd); } BLI_INLINE void cross_identity_v3(float r[3][3], const float v[3]) @@ -1504,7 +1510,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) } } - cloth_update_bending_rest_targets(clmd); + cloth_hair_update_bending_rest_targets(clmd); } /* note: the edges may already exist so run reinsert */ |