Commit: dd075f267c07e56773cd36b26776c7e544522b32
Author: Sebastián Barschkis
Date:   Wed Jul 11 16:49:20 2018 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBdd075f267c07e56773cd36b26776c7e544522b32

added guiding object velocity factor (UI option)

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

M       release/scripts/startup/bl_ui/properties_physics_smoke.py
M       source/blender/blenkernel/intern/smoke.c
M       source/blender/makesdna/DNA_smoke_types.h
M       source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py 
b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 60efbffab8f..090525b30c7 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -218,9 +218,11 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel):
             col = split.column()
 
             col.label(text="Surface thickness:")
+            col.label(text="Velocity factor:")
             col = split.column()
 
             col.prop(effec, "surface_distance")
+            col.prop(effec, "velocity_factor")
 
 class PHYSICS_PT_smoke_flow_source(PhysicButtonsPanel, Panel):
     bl_label = "Fluid Source"
diff --git a/source/blender/blenkernel/intern/smoke.c 
b/source/blender/blenkernel/intern/smoke.c
index b68b7738dee..888c929b198 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -643,6 +643,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
                        smd->effec->type = 0; // static obstacle
                        smd->effec->dm = NULL;
                        smd->effec->surface_distance = 0.5f;
+                       smd->effec->vel_multi = 1.0f;
                }
        }
 }
@@ -795,6 +796,7 @@ void smokeModifier_copy(const struct SmokeModifierData 
*smd, struct SmokeModifie
        else if (tsmd->effec) {
                tsmd->effec->type = smd->effec->type;
                tsmd->effec->surface_distance = smd->effec->surface_distance;
+               tsmd->effec->vel_multi = smd->effec->vel_multi;
        }
 }
 
@@ -835,6 +837,7 @@ static int get_lamp(Scene *scene, float *light)
 
 typedef struct ObstaclesFromDMData {
        SmokeDomainSettings *sds;
+       SmokeCollSettings *scs;
        const MVert *mvert;
        const MLoop *mloop;
        const MLoopTri *looptri;
@@ -845,7 +848,6 @@ typedef struct ObstaclesFromDMData {
        float *velocityX, *velocityY, *velocityZ;
        int *num_objects;
        float *distances_map;
-       float surface_thickness;
 } ObstaclesFromDMData;
 
 static void obstacles_from_derivedmesh_task_cb(
@@ -888,9 +890,9 @@ static void obstacles_from_derivedmesh_task_cb(
                                        /* apply object velocity */
                                        float hit_vel[3];
                                        interp_v3_v3v3v3(hit_vel, 
&data->vert_vel[v1 * 3], &data->vert_vel[v2 * 3], &data->vert_vel[v3 * 3], 
weights);
-                                       data->velocityX[index] += hit_vel[0];
-                                       data->velocityY[index] += hit_vel[1];
-                                       data->velocityZ[index] += hit_vel[2];
+                                       data->velocityX[index] += hit_vel[0] * 
data->scs->vel_multi;
+                                       data->velocityY[index] += hit_vel[1] * 
data->scs->vel_multi;
+                                       data->velocityZ[index] += hit_vel[2] * 
data->scs->vel_multi;
                                        // printf("adding obvel: [%f, %f, %f], 
dx is: %f\n", hit_vel[0], hit_vel[1], hit_vel[2], sds->dx);
 
                                        /* increase object count */
@@ -901,7 +903,7 @@ static void obstacles_from_derivedmesh_task_cb(
 
                        /* Get distance to mesh surface from both within and 
outside grid (mantaflow phi grid) */
                        if (data->distances_map) {
-                               update_mesh_distances(index, 
data->distances_map, data->tree, ray_start, data->surface_thickness);
+                               update_mesh_distances(index, 
data->distances_map, data->tree, ray_start, data->scs->surface_distance);
 
                                /* Ensure that num objects are also counted 
inside object. But dont count twice (see object inc for nearest point) */
                                if (data->distances_map[index] < 0 && 
!hasIncObj) {
@@ -980,10 +982,10 @@ static void obstacles_from_derivedmesh(
 
                if (bvhtree_from_mesh_get(&treeData, dm, BVHTREE_FROM_LOOPTRI, 
4)) {
                        ObstaclesFromDMData data = {
-                           .sds = sds, .mvert = mvert, .mloop = mloop, 
.looptri = looptri,
+                           .sds = sds, .scs = scs, .mvert = mvert, .mloop = 
mloop, .looptri = looptri,
                            .tree = &treeData, .has_velocity = has_velocity, 
.vert_vel = vert_vel,
                            .velocityX = velocityX, .velocityY = velocityY, 
.velocityZ = velocityZ,
-                           .num_objects = num_objects, .distances_map = 
distances_map, .surface_thickness = scs->surface_distance
+                           .num_objects = num_objects, .distances_map = 
distances_map
                        };
                        ParallelRangeSettings settings;
                        BLI_parallel_range_settings_defaults(&settings);
diff --git a/source/blender/makesdna/DNA_smoke_types.h 
b/source/blender/makesdna/DNA_smoke_types.h
index d5843a31001..475ca9c625a 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -460,7 +460,7 @@ typedef struct SmokeCollSettings {
        short type;
        short pad;
        float surface_distance; /* thickness of mesh surface, used in obstacle 
sdf */
-       char pad2[4]; /* unused */
+       float vel_multi; // Multiplier for obstacle velocity
 } SmokeCollSettings;
 
 #endif
diff --git a/source/blender/makesrna/intern/rna_smoke.c 
b/source/blender/makesrna/intern/rna_smoke.c
index a6960ea54a3..c2100c945c6 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -2049,6 +2049,13 @@ static void rna_def_smoke_effec_settings(BlenderRNA 
*brna)
        RNA_def_property_range(prop, 0.0, 10.0);
        RNA_def_property_ui_text(prop, "Distance", "Distance around mesh 
surface to consider as effector");
        RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, 
"rna_Smoke_reset");
+
+       prop = RNA_def_property(srna, "velocity_factor", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "vel_multi");
+       RNA_def_property_range(prop, -100.0, 100.0);
+       RNA_def_property_ui_text(prop, "Source", "Multiplier of obstacle 
velocity");
+       RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, 
"rna_Smoke_reset");
+
 }
 
 void RNA_def_smoke(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