Commit: 3cb9ec18440c3309d9404d9a1cb4e36097c6ccbd
Author: Lukas Tönne
Date:   Wed Feb 18 12:22:59 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB3cb9ec18440c3309d9404d9a1cb4e36097c6ccbd

New option "use signed distance" for force fields with "surface" shape.

By default a surface-based force will push things away from the surface
in both directions, regardless of whether a point is "inside" or
"outside" (judging by the surface normal). The new option makes a force
field always push things away in the direction of the normal, so that
it becomes less likely to get points "trapped" inside a mesh object.

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

M       release/scripts/startup/bl_ui/properties_physics_common.py
M       source/blender/blenkernel/intern/effect.c
M       source/blender/makesdna/DNA_object_force.h
M       source/blender/makesrna/intern/rna_object_force.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_common.py 
b/release/scripts/startup/bl_ui/properties_physics_common.py
index bb0f0cf..19533d2 100644
--- a/release/scripts/startup/bl_ui/properties_physics_common.py
+++ b/release/scripts/startup/bl_ui/properties_physics_common.py
@@ -315,5 +315,8 @@ def basic_force_field_falloff_ui(self, context, field):
     sub.active = field.use_max_distance
     sub.prop(field, "distance_max", text="Maximum")
 
+    if field.shape == 'SURFACE':
+        layout.prop(field, "use_signed_distance")
+
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/source/blender/blenkernel/intern/effect.c 
b/source/blender/blenkernel/intern/effect.c
index 76a39fe..a9bf499 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -831,6 +831,10 @@ static void do_physical_effector(EffectorCache *eff, 
EffectorData *efd, Effected
        }
 
        copy_v3_v3(force, efd->vec_to_point);
+       if (pd->shape == PFIELD_SHAPE_SURFACE && (pd->flag & 
PFIELD_USE_SIGNED_DISTANCE)) {
+               if (dot_v3v3(efd->vec_to_point, efd->nor) < 0.0f)
+                       mul_v3_fl(force, -1.0f);
+       }
 
        switch (pd->forcefield) {
                case PFIELD_WIND:
diff --git a/source/blender/makesdna/DNA_object_force.h 
b/source/blender/makesdna/DNA_object_force.h
index 5cc56d8..fac8443 100644
--- a/source/blender/makesdna/DNA_object_force.h
+++ b/source/blender/makesdna/DNA_object_force.h
@@ -370,6 +370,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_USE_SIGNED_DISTANCE (1<<18)     /* surface shape: use negative 
distance on the interior */
 
 /* pd->falloff */
 #define PFIELD_FALL_SPHERE             0
diff --git a/source/blender/makesrna/intern/rna_object_force.c 
b/source/blender/makesrna/intern/rna_object_force.c
index 4cc098f..ac74c7e 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -1337,6 +1337,11 @@ static void rna_def_field(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Use Max", "Use a maximum distance for 
the field to work");
        RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
        
+       prop = RNA_def_property(srna, "use_signed_distance", PROP_BOOLEAN, 
PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", 
PFIELD_USE_SIGNED_DISTANCE);
+       RNA_def_property_ui_text(prop, "Use Signed Distance", "Use negative 
distance on the interior of surface shapes");
+       RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
+       
        prop = RNA_def_property(srna, "use_radial_min", PROP_BOOLEAN, 
PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_USEMINR);
        RNA_def_property_ui_text(prop, "Use Min", "Use a minimum radial 
distance for the field's fall-off");

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

Reply via email to