Commit: 73b9899c924609a808252ced54674a61e8b90f65
Author: Luca Rood
Date:   Thu Jan 19 22:10:14 2017 -0200
Branches: cloth-improvements
https://developer.blender.org/rB73b9899c924609a808252ced54674a61e8b90f65

Move use_normal to col object settings (was in cloth settings)

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

M       release/scripts/startup/bl_ui/properties_physics_cloth.py
M       release/scripts/startup/bl_ui/properties_physics_field.py
M       source/blender/blenkernel/BKE_cloth.h
M       source/blender/blenkernel/intern/collision.c
M       source/blender/blenkernel/intern/effect.c
M       source/blender/makesdna/DNA_object_force.h
M       source/blender/makesrna/intern/rna_cloth.c
M       source/blender/makesrna/intern/rna_object_force.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py 
b/release/scripts/startup/bl_ui/properties_physics_cloth.py
index b4283f4682..17acca7823 100644
--- a/release/scripts/startup/bl_ui/properties_physics_cloth.py
+++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py
@@ -240,8 +240,6 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel, Panel):
         sub.prop(cloth, "distance_min", slider=True, text="Distance")
         sub.prop(cloth, "group")
 
-        sub.prop(cloth, "use_normal")
-
         layout.separator()
 
         col = layout.column()
diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py 
b/release/scripts/startup/bl_ui/properties_physics_field.py
index a946c2fd72..53188b8857 100644
--- a/release/scripts/startup/bl_ui/properties_physics_field.py
+++ b/release/scripts/startup/bl_ui/properties_physics_field.py
@@ -222,6 +222,8 @@ class PHYSICS_PT_collision(PhysicButtonsPanel, Panel):
             sub.prop(settings, "thickness_outer", text="Outer", slider=True)
             sub.prop(settings, "thickness_inner", text="Inner", slider=True)
 
+            col.prop(settings, "use_normal")
+
             col.prop(settings, "cloth_friction")
 
             col.label(text="Soft Body Damping:")
diff --git a/source/blender/blenkernel/BKE_cloth.h 
b/source/blender/blenkernel/BKE_cloth.h
index f7cca99be6..67d8973950 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -180,7 +180,6 @@ typedef enum {
 typedef enum {
        CLOTH_COLLSETTINGS_FLAG_ENABLED = ( 1 << 1 ), /* enables cloth - object 
collisions */
        CLOTH_COLLSETTINGS_FLAG_SELF = ( 1 << 2 ), /* enables selfcollisions */
-       CLOTH_COLLSETTINGS_FLAG_USE_NORMAL = ( 1 << 3 ), /* enable collision 
side detection based on normal */
 } CLOTH_COLLISIONSETTINGS_FLAGS;
 
 /* Spring types as defined in the paper.*/
diff --git a/source/blender/blenkernel/intern/collision.c 
b/source/blender/blenkernel/intern/collision.c
index 9c7da86c80..dbf6f2f38c 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -226,8 +226,8 @@ DO_INLINE void collision_interpolateOnTriangle ( float 
to[3], float v1[3], float
        VECADDMUL(to, v3, w3);
 }
 
-static int cloth_collision_response_static (ClothModifierData *clmd, 
CollisionModifierData *collmd,
-                                            CollPair *collpair, CollPair 
*collision_end, float friction)
+static int cloth_collision_response_static (ClothModifierData *clmd, 
CollisionModifierData *collmd, Object *collob,
+                                            CollPair *collpair, CollPair 
*collision_end)
 {
        int result = 0;
        Cloth *cloth1;
@@ -266,7 +266,7 @@ static int cloth_collision_response_static 
(ClothModifierData *clmd, CollisionMo
                        &u1, &u2, &u3 );
 
                /* compute collision normal */
-               if (clmd->coll_parms->flags & 
CLOTH_COLLSETTINGS_FLAG_USE_NORMAL) {
+               if (collob->pd->flag & PFIELD_CLOTH_USE_NORMAL) {
                        normal_tri_v3(collider_norm, 
collmd->current_x[collpair->bp1].co, collmd->current_x[collpair->bp2].co, 
collmd->current_x[collpair->bp3].co);
                        backside = dot_v3v3(collider_norm, collpair->normal) < 
0.0f;
                }
@@ -305,7 +305,7 @@ static int cloth_collision_response_static 
(ClothModifierData *clmd, CollisionMo
 
                        /* Decrease in magnitude of relative tangential 
velocity due to coulomb friction
                         * in original formula "magrelVel" should be the 
"change of relative velocity in normal direction" */
-                       magtangent = min_ff(friction * 0.01f * magrelVel, 
len_v3(vrel_t_pre));
+                       magtangent = min_ff(collob->pd->pdef_cfrict * 0.01f * 
magrelVel, len_v3(vrel_t_pre));
 
                        /* Apply friction impulse. */
                        if ( magtangent > ALMOST_ZERO ) {
@@ -947,8 +947,8 @@ static void cloth_bvh_selfcollisions_nearcheck 
(ClothModifierData * clmd, CollPa
        }
 }
 
-static int cloth_bvh_objcollisions_resolve (ClothModifierData * clmd, 
CollisionModifierData *collmd,
-                                            CollPair *collisions, CollPair 
*collisions_index, float friction)
+static int cloth_bvh_objcollisions_resolve (ClothModifierData * clmd, 
CollisionModifierData *collmd, Object *collob,
+                                            CollPair *collisions, CollPair 
*collisions_index)
 {
        Cloth *cloth = clmd->clothObject;
        int i=0, j = 0, /*numfaces = 0, */ mvert_num = 0;
@@ -965,7 +965,7 @@ static int cloth_bvh_objcollisions_resolve 
(ClothModifierData * clmd, CollisionM
                result = 0;
 
                if ( collmd->bvhtree ) {
-                       result += cloth_collision_response_static (clmd, 
collmd, collisions, collisions_index, friction);
+                       result += cloth_collision_response_static(clmd, collmd, 
collob, collisions, collisions_index);
 
                        // apply impulses in parallel
                        if (result) {
@@ -1106,7 +1106,7 @@ int cloth_bvh_objcollision(Object *ob, ClothModifierData 
*clmd, float step, floa
                                                &collisions_index[i], result, 
overlap, dt/(float)clmd->coll_parms->loop_count);
 
                                        // resolve nearby collisions
-                                       ret += cloth_bvh_objcollisions_resolve 
( clmd, collmd, collisions[i],  collisions_index[i], collob->pd->pdef_cfrict);
+                                       ret += 
cloth_bvh_objcollisions_resolve(clmd, collmd, collob, collisions[i],  
collisions_index[i]);
                                        ret2 += ret;
                                }
 
diff --git a/source/blender/blenkernel/intern/effect.c 
b/source/blender/blenkernel/intern/effect.c
index b7e53ad89d..41d59805c2 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -127,7 +127,7 @@ PartDeflect *object_add_collision_fields(int type)
                        pd->f_flow = 1.0f;
                        break;
        }
-       pd->flag = PFIELD_DO_LOCATION|PFIELD_DO_ROTATION;
+       pd->flag = 
PFIELD_DO_LOCATION|PFIELD_DO_ROTATION|PFIELD_CLOTH_USE_NORMAL;
 
        return pd;
 }
diff --git a/source/blender/makesdna/DNA_object_force.h 
b/source/blender/makesdna/DNA_object_force.h
index 987b8a184a..68018dbd16 100644
--- a/source/blender/makesdna/DNA_object_force.h
+++ b/source/blender/makesdna/DNA_object_force.h
@@ -375,6 +375,7 @@ typedef struct SoftBody {
 #define PFIELD_DO_ROTATION             (1<<15)
 #define PFIELD_GUIDE_PATH_WEIGHT (1<<16)       /* apply curve weights */
 #define PFIELD_SMOKE_DENSITY    (1<<17)                /* multiply smoke force 
by density */
+#define PFIELD_CLOTH_USE_NORMAL (1<<18)                /* enable cloth 
collision side detection based on normal */
 
 /* pd->falloff */
 #define PFIELD_FALL_SPHERE             0
diff --git a/source/blender/makesrna/intern/rna_cloth.c 
b/source/blender/makesrna/intern/rna_cloth.c
index 6812a5d470..9c4b545494 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -827,11 +827,6 @@ static void rna_def_cloth_collision_settings(BlenderRNA 
*brna)
                                 "How many collision iterations should be done. 
(higher is better quality but slower)");
        RNA_def_property_update(prop, 0, "rna_cloth_update");
 
-       prop = RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "flags", 
CLOTH_COLLSETTINGS_FLAG_USE_NORMAL);
-       RNA_def_property_ui_text(prop, "Single Sided", "Collision acts with 
respect to the collider normals (improves penetration recovery)");
-       RNA_def_property_update(prop, 0, "rna_cloth_update");
-
        /* self collision */
 
        prop = RNA_def_property(srna, "use_self_collision", PROP_BOOLEAN, 
PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_object_force.c 
b/source/blender/makesrna/intern/rna_object_force.c
index 9d21ff7b64..38d6846148 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -992,6 +992,11 @@ static void rna_def_collision(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0f, 80.0f);
        RNA_def_property_ui_text(prop, "Friction", "Friction for cloth 
collisions");
        RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
+
+       prop = RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", 
PFIELD_CLOTH_USE_NORMAL);
+       RNA_def_property_ui_text(prop, "Single Sided", "Cloth collision acts 
with respect to the collider normals (improves penetration recovery)");
+       RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
 }
 
 static void rna_def_effector_weight(BlenderRNA *brna)

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to