Commit: 4c164487bc15854834577f2867623a83db75ed60
Author: Luca Rood
Date:   Thu Feb 23 19:00:03 2017 -0300
Branches: master
https://developer.blender.org/rB4c164487bc15854834577f2867623a83db75ed60

Add "Gravitation" option to "Force" type force fields

This adds an option to force fields of type "Force", which enables the
simulation of gravitational behavior (dist^-2 falloff).

Patch by @AndreasE

Reviewers: #physics, LucaRood, mont29

Reviewed By: #physics, LucaRood, mont29

Tags: #physics

Differential Revision: https://developer.blender.org/D2389

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

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 277b59d187..4478c6a437 100644
--- a/release/scripts/startup/bl_ui/properties_physics_common.py
+++ b/release/scripts/startup/bl_ui/properties_physics_common.py
@@ -274,6 +274,8 @@ def basic_force_field_settings_ui(self, context, field):
         col.prop(field, "use_global_coords", text="Global")
     elif field.type == 'HARMONIC':
         col.prop(field, "use_multiple_springs")
+    if field.type == 'FORCE':
+        col.prop(field, "use_gravity_falloff",  text="Gravitation")
 
     split = layout.split()
 
diff --git a/source/blender/blenkernel/intern/effect.c 
b/source/blender/blenkernel/intern/effect.c
index fe8f5ebdca..4eee24b378 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -848,6 +848,14 @@ static void do_physical_effector(EffectorCache *eff, 
EffectorData *efd, Effected
                        break;
                case PFIELD_FORCE:
                        normalize_v3(force);
+                       if (pd->flag & PFIELD_GRAVITATION){ /* Option: Multiply 
by 1/distance^2 */
+                               if (efd->distance < FLT_EPSILON){
+                                       strength = 0.0f;
+                               }
+                               else {
+                                       strength *= powf(efd->distance, -2.0f);
+                               }
+                       }
                        mul_v3_fl(force, strength * efd->falloff);
                        break;
                case PFIELD_VORTEX:
diff --git a/source/blender/makesdna/DNA_object_force.h 
b/source/blender/makesdna/DNA_object_force.h
index 59acefeffe..ed14c4b931 100644
--- a/source/blender/makesdna/DNA_object_force.h
+++ b/source/blender/makesdna/DNA_object_force.h
@@ -372,6 +372,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_GRAVITATION             (1<<18)             /* used for 
(simple) force */
 
 /* 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 1d89f7535c..514fca1b01 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -1275,7 +1275,7 @@ static void rna_def_field(BlenderRNA *brna)
        prop = RNA_def_property(srna, "falloff_power", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "f_power");
        RNA_def_property_range(prop, 0.0f, 10.0f);
-       RNA_def_property_ui_text(prop, "Falloff Power", "Falloff power (real 
gravitational falloff = 2)");
+       RNA_def_property_ui_text(prop, "Falloff Power", "");
        RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
        
        prop = RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_NONE);
@@ -1394,6 +1394,11 @@ static void rna_def_field(BlenderRNA *brna)
        RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_SMOKE_DENSITY);
        RNA_def_property_ui_text(prop, "Apply Density", "Adjust force strength 
based on smoke density");
        RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
+       prop = RNA_def_property(srna, "use_gravity_falloff", PROP_BOOLEAN, 
PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_GRAVITATION);
+       RNA_def_property_ui_text(prop, "Gravity Falloff", "Multiply force by 
1/distance²");
+       RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
+
        
        /* Pointer */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to