Commit: 9b7d06b255b4584c989eac6da5f46a8efcce3e38 Author: Sebastián Barschkis Date: Mon Jun 26 21:20:50 2017 +0200 Branches: fluid-mantaflow https://developer.blender.org/rB9b7d06b255b4584c989eac6da5f46a8efcce3e38
added particle UI tab =================================================================== 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 d04248cbebf..cefbfeb0c2a 100644 --- a/release/scripts/startup/bl_ui/properties_physics_smoke.py +++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py @@ -278,7 +278,7 @@ class PHYSICS_PT_smoke_adaptive_domain(PhysicButtonsPanel, Panel): col.prop(domain, "adapt_threshold") -class PHYSICS_PT_smoke_highres(PhysicButtonsPanel, Panel): +class PHYSICS_PT_smoke_quality(PhysicButtonsPanel, Panel): bl_label = "Fluid Quality" COMPAT_ENGINES = {'BLENDER_RENDER'} @@ -342,6 +342,36 @@ class PHYSICS_PT_smoke_highres(PhysicButtonsPanel, Panel): sub.prop(domain, "noise_pos_scale") sub.prop(domain, "noise_time_anim") +class PHYSICS_PT_smoke_particles(PhysicButtonsPanel, Panel): + bl_label = "Fluid Particles" + COMPAT_ENGINES = {'BLENDER_RENDER'} + + @classmethod + def poll(cls, context): + md = context.smoke + rd = context.scene.render + return md and (md.smoke_type == 'DOMAIN') and (rd.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + domain = context.smoke.domain_settings + + split = layout.split() + + col = split.column() + col.enabled = not domain.point_cache.is_baked + col.label(text="Type:") + #col.prop(domain, "use_flip_particles", text="FLIP") + col.prop(domain, "use_drop_particles", text="Secondary") + #col.prop(domain, "use_float_particles", text="Floats") + #col.prop(domain, "use_tracer_particles", text="Tracer") + + col = split.column() + col.label(text="") + sub = col.column() + sub.active = domain.use_drop_particles + sub.prop(domain, "particle_velocity_threshold", text="Threshold") + class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, Panel): bl_label = "Fluid Groups" bl_options = {'DEFAULT_CLOSED'} @@ -446,7 +476,7 @@ class OBJECT_OT_RunMantaButton(bpy.types.Operator): bpy.ops.manta.make_file() return{'FINISHED'} -class PHYSICS_PT_smoke_manta_settings(PhysicButtonsPanel, Panel): +class PHYSICS_PT_smoke_export_manta(PhysicButtonsPanel, Panel): bl_label = "Fluid Export" bl_options = {'DEFAULT_CLOSED'} @@ -525,12 +555,13 @@ classes = ( PHYSICS_PT_smoke, PHYSICS_PT_smoke_flow_advanced, PHYSICS_PT_smoke_adaptive_domain, - PHYSICS_PT_smoke_highres, + PHYSICS_PT_smoke_quality, + PHYSICS_PT_smoke_particles, PHYSICS_PT_smoke_groups, PHYSICS_PT_smoke_cache, PHYSICS_PT_smoke_field_weights, OBJECT_OT_RunMantaButton, - PHYSICS_PT_smoke_manta_settings, + PHYSICS_PT_smoke_export_manta, PHYSICS_PT_smoke_display_settings, ) diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index 196982d46d8..3bd22dd8420 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -542,6 +542,8 @@ void smokeModifier_createType(struct SmokeModifierData *smd) smd->domain->particle_number = 2; smd->domain->particle_radius = 1.0f; smd->domain->particle_band_width = 3.0f; + smd->domain->particle_velocity_threshold = 2.0f; + smd->domain->particle_type = 0; /*mantaflow settings*/ smd->domain->manta_solver_res = 3; @@ -666,6 +668,7 @@ void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData tsmd->domain->particle_number = smd->domain->particle_number; tsmd->domain->particle_radius = smd->domain->particle_radius; tsmd->domain->particle_band_width = smd->domain->particle_band_width; + tsmd->domain->particle_velocity_threshold = smd->domain->particle_velocity_threshold; tsmd->domain->manta_solver_res = smd->domain->manta_solver_res; tsmd->domain->noise_pos_scale = smd->domain->noise_pos_scale; diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h index 0405cf2d716..17899b0c359 100644 --- a/source/blender/makesdna/DNA_smoke_types.h +++ b/source/blender/makesdna/DNA_smoke_types.h @@ -247,6 +247,8 @@ typedef struct SmokeDomainSettings { int particle_number; float particle_radius; float particle_band_width; + float particle_velocity_threshold; + int particle_type; /* Display settings */ char slice_method, axis_slice_method; @@ -297,6 +299,10 @@ typedef struct SmokeDomainSettings { #define MOD_SMOKE_FLOW_TEXTURE_MAP_AUTO 0 #define MOD_SMOKE_FLOW_TEXTURE_MAP_UV 1 +/* particle types */ +#define MOD_SMOKE_PARTICLE_FLIP (1<<0) +#define MOD_SMOKE_PARTICLE_SND (1<<1) + /* flags */ #define MOD_SMOKE_FLOW_ABSOLUTE (1<<1) /*old style emission*/ #define MOD_SMOKE_FLOW_INITVELOCITY (1<<2) /* passes particles speed to the smoke */ diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c index e4ee21fa7a7..54b68c109c5 100644 --- a/source/blender/makesrna/intern/rna_smoke.c +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -107,7 +107,7 @@ static void rna_Smoke_viewport_set(struct PointerRNA *ptr, int value) } } -static void rna_Smoke_update_volume_format(Main *bmain, Scene *scene, PointerRNA *ptr) +static void rna_Smoke_flip_parts_set(struct PointerRNA *ptr, int value) { Object *ob = (Object *)ptr->id.data; SmokeModifierData *smd; @@ -117,32 +117,26 @@ static void rna_Smoke_update_volume_format(Main *bmain, Scene *scene, PointerRNA smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke); - /* TODO (sebbas): for now, only liquid domains hold particle systems */ - if (smd->domain->type != MOD_SMOKE_DOMAIN_TYPE_LIQUID) { - rna_Smoke_resetCache(bmain, scene, ptr); - return; - } - /* remove fluidsim particle system */ - if (smd && smd->domain && smd->domain->flags & MOD_SMOKE_USE_VOLUME_CACHE) { + if (value && smd && smd->domain) { for (psys = ob->particlesystem.first; psys; psys = psys->next) if (psys->part->type == PART_MANTA) break; if (ob->type == OB_MESH && !psys) { /* add particle system */ - part = psys_new_settings("ParticleSettings", bmain); + part = psys_new_settings("ParticleSettings", NULL); psys = MEM_callocN(sizeof(ParticleSystem), "particle_system"); part->type = PART_MANTA; psys->part = part; psys->pointcache = BKE_ptcache_add(&psys->ptcaches); - BLI_strncpy(psys->name, "FlipParticles", sizeof(psys->name)); + BLI_strncpy(psys->name, "Secondary Particles", sizeof(psys->name)); BLI_addtail(&ob->particlesystem, psys); /* add modifier */ psmd = (ParticleSystemModifierData *)modifier_new(eModifierType_ParticleSystem); - BLI_strncpy(psmd->modifier.name, "FLIPParticleSystem", sizeof(psmd->modifier.name)); + BLI_strncpy(psmd->modifier.name, "Secondary Particle System", sizeof(psmd->modifier.name)); psmd->psys = psys; BLI_addtail(&ob->modifiers, psmd); modifier_unique_name(&ob->modifiers, (ModifierData *)psmd); @@ -167,7 +161,18 @@ static void rna_Smoke_update_volume_format(Main *bmain, Scene *scene, PointerRNA /* solid mode more convenient for meshes */ ob->dt = OB_SOLID; } - rna_Smoke_resetCache(bmain, scene, ptr); + + if (value == 1) { + smd->domain->particle_type |= MOD_SMOKE_PARTICLE_SND; + } + else { + /* Clear old caches. */ + PTCacheID id; + BKE_ptcache_id_from_smoke(&id, ob, smd); + BKE_ptcache_id_clear(&id, PTCACHE_CLEAR_ALL, 0); + + smd->domain->particle_type &= ~MOD_SMOKE_PARTICLE_SND; + } } static void rna_Smoke_use_surface_format_set(struct PointerRNA *ptr, int value) @@ -1072,7 +1077,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_USE_VOLUME_CACHE); RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_use_volume_format_set"); RNA_def_property_ui_text(prop, "Volumetric cache", "Enable volume cache"); - RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_update_volume_format"); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset"); prop = RNA_def_property(srna, "cache_surface_format", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "cache_surface_format"); @@ -1137,6 +1142,26 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Gravity", "Gravity in X, Y and Z direction"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_resetCache"); + prop = RNA_def_property(srna, "use_flip_particles", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "particle_type", MOD_SMOKE_PARTICLE_FLIP); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_flip_parts_set"); + RNA_def_property_ui_text(prop, "FLIP", "Create FLIP particle system"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset"); + + prop = RNA_def_property(srna, "use_drop_particles", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "particle_type", MOD_SMOKE_PARTICLE_SND); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_flip_parts_set"); + RNA_def_property_ui_text(prop, "FLIP", "Create secondary particle system"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset"); + + prop = RNA_def_property(srna, "particle_velocity_threshold", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0, 10.0); + RNA_def_property_ui_range(prop, 0.0, 10.0, 0.02, 5); + RNA_def_property_ui_text(prop, "Threshold", "Velocity threshold for drop particle generation (higher value results in fewer drops)"); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_resetCache"); + /* display settings */ prop = RNA_def_property(srna, "slice_method", PROP_ENUM, PROP_NONE); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs