[Bf-blender-cvs] [0a4750a6587] fluid-mantaflow: replaced border collisions menu in UI with boolean flags
Sebastián Barschkis
noreply at git.blender.org
Mon Jun 5 16:37:17 CEST 2017
Commit: 0a4750a6587619959004ffb8f8fee24c7f89c812
Author: Sebastián Barschkis
Date: Mon Jun 5 16:33:47 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB0a4750a6587619959004ffb8f8fee24c7f89c812
replaced border collisions menu in UI with boolean flags
Setting domain borders should not be determined by a few textual descriptions. Rather, users should be able to set any combination of borders.
===================================================================
M intern/mantaflow/intern/FLUID.cpp
M intern/mantaflow/intern/strings/liquid_script.h
M release/scripts/startup/bl_operators/object_quick_effects.py
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/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index 434f256051a..4923c289b70 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -531,6 +531,7 @@ std::string FLUID::getRealValue(const std::string& varName, SmokeModifierData *
std::ostringstream ss;
bool is2D = false;
ModifierData *md;
+ int closedDomain;
if (smd) {
is2D = (smd->domain->manta_solver_res == 2);
@@ -547,20 +548,25 @@ std::string FLUID::getRealValue(const std::string& varName, SmokeModifierData *
ss << (smd->domain->flags & MOD_SMOKE_HIGHRES ? "True" : "False");
else if (varName == "SOLVER_DIM")
ss << smd->domain->manta_solver_res;
- else if (varName == "DO_OPEN")
- ss << (smd->domain->border_collisions == SM_BORDER_CLOSED ? "False" : "True");
- else if (varName == "BOUNDCONDITIONS") {
+ else if (varName == "DO_OPEN") {
+ closedDomain = (MOD_SMOKE_BORDER_BACK | MOD_SMOKE_BORDER_FRONT |
+ MOD_SMOKE_BORDER_LEFT | MOD_SMOKE_BORDER_RIGHT |
+ MOD_SMOKE_BORDER_BOTTOM | MOD_SMOKE_BORDER_TOP);
+ ss << (((smd->domain->border_collisions & closedDomain) == closedDomain) ? "False" : "True");
+ } else if (varName == "BOUNDCONDITIONS") {
if (smd->domain->manta_solver_res == 2) {
- if (smd->domain->border_collisions == SM_BORDER_OPEN) ss << "xXyY";
- else if (smd->domain->border_collisions == SM_BORDER_VERTICAL) ss << "yY";
- else if (smd->domain->border_collisions == SM_BORDER_HORIZONTAL) ss << "xX";
- else if (smd->domain->border_collisions == SM_BORDER_CLOSED) ss << "";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_BACK) == 0) ss << "x";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_FRONT) == 0) ss << "X";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_LEFT) == 0) ss << "y";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_RIGHT) == 0) ss << "Y";
}
if (smd->domain->manta_solver_res == 3) {
- if (smd->domain->border_collisions == SM_BORDER_OPEN) ss << "xXyYzZ";
- else if (smd->domain->border_collisions == SM_BORDER_VERTICAL) ss << "zZ";
- else if (smd->domain->border_collisions == SM_BORDER_HORIZONTAL) ss << "xXyY";
- else if (smd->domain->border_collisions == SM_BORDER_CLOSED) ss << "";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_BACK) == 0) ss << "x";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_FRONT) == 0) ss << "X";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_LEFT) == 0) ss << "y";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_RIGHT) == 0) ss << "Y";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_BOTTOM) == 0) ss << "z";
+ if ((smd->domain->border_collisions & MOD_SMOKE_BORDER_TOP) == 0) ss << "Z";
}
} else if (varName == "RES")
ss << smd->domain->maxres;
diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h
index e6f296934b9..6dc6600177b 100644
--- a/intern/mantaflow/intern/strings/liquid_script.h
+++ b/intern/mantaflow/intern/strings/liquid_script.h
@@ -163,8 +163,6 @@ def manta_step_$ID$(framenr):\n\
while s$ID$.frame == last_frame_s$ID$:\n\
\n\
flags_s$ID$.initDomain(boundaryWidth=boundaryWidth_s$ID$, phiWalls=phiObs_s$ID$)\n\
- if doOpen_s$ID$:\n\
- setOpenBound(flags=flags_s$ID$, bWidth=boundaryWidth_s$ID$, openBound=boundConditions_s$ID$, type=FlagOutflow|FlagEmpty)\n\
\n\
phiObs_s$ID$.join(phiObsIn_s$ID$)\n\
phi_s$ID$.join(phiIn_s$ID$)\n\
@@ -172,6 +170,8 @@ def manta_step_$ID$(framenr):\n\
\n\
#updateFractions(flags=flags_s$ID$, phiObs=phiObs_s$ID$, fractions=fractions_s$ID$, boundaryWidth=boundaryWidth_s$ID$) # TODO: uncomment for fractions\n\
setObstacleFlags(flags=flags_s$ID$, phiObs=phiObs_s$ID$, phiOut=phiOut_s$ID$)#, fractions=fractions_s$ID$) # TODO: uncomment for fractions\n\
+ if doOpen_s$ID$:\n\
+ setOpenBound(flags=flags_s$ID$, bWidth=boundaryWidth_s$ID$, openBound=boundConditions_s$ID$, type=FlagOutflow|FlagEmpty)\n\
\n\
sampleLevelsetWithParticles(phi=phiIn_s$ID$, flags=flags_s$ID$, parts=pp_s$ID$, discretization=particleNumber_s$ID$, randomness=randomness_s$ID$, refillEmpty=True)\n\
flags_s$ID$.updateFromLevelset(phi_s$ID$)\n\
diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py
index f4ca500091c..d16a9563e32 100644
--- a/release/scripts/startup/bl_operators/object_quick_effects.py
+++ b/release/scripts/startup/bl_operators/object_quick_effects.py
@@ -700,7 +700,13 @@ class QuickLiquid(Operator):
bpy.ops.object.modifier_add(type='SMOKE')
obj.modifiers[-1].smoke_type = 'DOMAIN'
obj.modifiers[-1].domain_settings.smoke_domain_type = 'LIQUID'
- obj.modifiers[-1].domain_settings.collision_extents = 'BORDERCLOSED'
+ # set all domain borders to obstacle
+ obj.modifiers[-1].domain_settings.use_collision_border_front = True
+ obj.modifiers[-1].domain_settings.use_collision_border_back = True
+ obj.modifiers[-1].domain_settings.use_collision_border_right = True
+ obj.modifiers[-1].domain_settings.use_collision_border_left = True
+ obj.modifiers[-1].domain_settings.use_collision_border_top = True
+ obj.modifiers[-1].domain_settings.use_collision_border_bottom = True
# set correct cache file format for liquid
obj.modifiers[-1].domain_settings.cache_file_format = 'OBJECT'
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index b8c66302381..05ed6a66e71 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -62,13 +62,27 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel):
flow = md.flow_settings
layout.prop(domain, "smoke_domain_type", expand=False)
- layout.prop(domain, "collision_extents", expand=False)
+ layout.label(text="Border collisions:")
split = layout.split()
split.enabled = not domain.point_cache.is_baked
col = split.column()
+ col.prop(domain, "use_collision_border_front", text="Front")
+ col.prop(domain, "use_collision_border_back", text="Back")
+
+ col = split.column()
+ col.prop(domain, "use_collision_border_right", text="Right")
+ col.prop(domain, "use_collision_border_left", text="Left")
+
+ col = split.column()
+ col.prop(domain, "use_collision_border_top", text="Top")
+ col.prop(domain, "use_collision_border_bottom", text="Bottom")
+
+ split = layout.split()
+
+ col = split.column()
col.label(text="Time:")
col.prop(domain, "time_scale", text="Scale")
col.prop(domain, "use_adaptive_stepping", text="Adaptive stepping")
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index e0dd4b57fed..44bb8ddda16 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -559,7 +559,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
smd->domain->beta = 0.3;
smd->domain->time_scale = 1.0;
smd->domain->vorticity = 0.2;
- smd->domain->border_collisions = SM_BORDER_OPEN; // open domain
+ smd->domain->border_collisions = 0; // open domain
smd->domain->flags = MOD_SMOKE_DISSOLVE_LOG;
smd->domain->highres_sampling = SM_HRES_FULLSAMPLE;
smd->domain->strength = 1.0;
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index e7a9cb3e56d..e93425d2f00 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -51,6 +51,16 @@ enum {
MOD_SMOKE_ADAPTIVE_DOMAIN = (1 << 7),
};
+/* border collisions */
+enum {
+ MOD_SMOKE_BORDER_FRONT = (1 << 1),
+ MOD_SMOKE_BORDER_BACK = (1 << 2),
+ MOD_SMOKE_BORDER_RIGHT = (1 << 3),
+ MOD_SMOKE_BORDER_LEFT = (1 << 4),
+ MOD_SMOKE_BORDER_TOP = (1 << 5),
+ MOD_SMOKE_BORDER_BOTTOM = (1 << 6),
+};
+
/* noise */
#define MOD_SMOKE_NOISEWAVE (1<<0)
#define MOD_SMOKE_NOISEFFT (1<<1)
@@ -103,6 +113,7 @@ enum {
#define SM_CACHE_HEAVY 1
/* domain border collision */
+/* TODO (sebbas): deprecated values. kept for possible versioning */
#define SM_BORDER_OPEN 0
#define SM_BORDER_VERTICAL 1
#define SM_BORDER_CLOSED 2
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 7436d83b928..aea7cb545b3 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -143,10 +143,15 @@ static EnumPropertyItem *rna_Smoke_cachetype_itemf(
return item;
}
-static void rna_Smoke_collisionextents_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_collisionextents_set(struct PointerRNA *ptr, int value, bool clear)
{
SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
- settings->border_collisions = value;
+ if (clear) {
+ settings->border_collisions &= value;
+ }
+ else {
+ settings->border_collisions |= value;
+ }
}
static void rna_Smoke_domaintype_set(struct PointerRNA *ptr, int value)
@@ -159,13 +164,23 @@ static void rna_Smoke_domaintype_set(struct PointerRNA *ptr, int value)
if (value == MOD_SMOKE_DOMAIN_TYPE_GAS)
{
rna_Smoke_cachetype_set(ptr, PTCACHE_FILE_PTCACHE);
- rna_Smoke_collisionextents_set(ptr, SM_BORDER_OPEN);
+ rna_Smoke_collisionextents_set(ptr, MOD_SMOKE_BORDER_FRONT, 1);
+ rna_Smoke_collisionextents_set(ptr, MOD_SMOKE_BORDER_BACK, 1);
+ rna_Smoke_collisionextents_set(ptr, MOD_SMOKE_BORDER_RIGHT, 1);
+ rna_Smoke_collisionextents_set(ptr, MOD_SMOKE_BORDER_LEFT, 1);
+ rna_Smoke_collisionextents_set(ptr, MOD_SMOKE_BORDER_TOP, 1);
+ rna_Smoke_collisionextents_set(ptr, MOD_SMOKE_BORDER_BOTTOM, 1);
BKE_object_draw_type_set(ob, OB_WIRE);
}
else if (value == MOD_SMOKE_DOMAIN_TYPE_LIQUID)
{
rna_Smoke_cachetype_set(ptr, PTCACH
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list