In Blender, we used to use the term 'draw' to refer to information displayed to the user. For version 2.80, it was decided to change these instances to 'display' instead. This was to avoid the ambiguity between end-user drawing tools and display options. From the Oxford English Dictionary: - Draw: produce (a picture or diagram) by making lines and marks on paper with a pencil, pen, etc. - Display: show (data or an image) on a computer, television, or other screen. Therefore, we should use draw when referring to drawing tools for making marks, but use display when referring to information shown/displayed to the user. From a user POV, the computer displays certain information, whereas the user draws a mark. Apparently this change was not implemented consistently, so this patch changes all remaining relevant instances of "draw". Differential Revision: https://developer.blender.org/D10551
3036 lines
129 KiB
C
3036 lines
129 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
/** \file
|
|
* \ingroup RNA
|
|
*/
|
|
|
|
#include <limits.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "BLI_path_util.h"
|
|
#include "BLI_sys_types.h"
|
|
#include "BLI_utildefines.h"
|
|
|
|
#include "RNA_define.h"
|
|
#include "RNA_enum_types.h"
|
|
|
|
#include "rna_internal.h"
|
|
|
|
#include "BKE_fluid.h"
|
|
#include "BKE_modifier.h"
|
|
#include "BKE_pointcache.h"
|
|
|
|
#include "DNA_fluid_types.h"
|
|
#include "DNA_modifier_types.h"
|
|
#include "DNA_object_force_types.h"
|
|
#include "DNA_object_types.h"
|
|
#include "DNA_particle_types.h"
|
|
#include "DNA_scene_types.h"
|
|
|
|
#include "WM_api.h"
|
|
#include "WM_types.h"
|
|
|
|
#ifdef RNA_RUNTIME
|
|
|
|
# include "BLI_math.h"
|
|
# include "BLI_threads.h"
|
|
|
|
# include "BKE_colorband.h"
|
|
# include "BKE_context.h"
|
|
# include "BKE_particle.h"
|
|
|
|
# include "DEG_depsgraph.h"
|
|
# include "DEG_depsgraph_build.h"
|
|
|
|
# include "manta_fluid_API.h"
|
|
|
|
static void rna_Fluid_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
|
|
|
|
/* Needed for liquid domain objects */
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
|
|
}
|
|
|
|
static void rna_Fluid_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
DEG_relations_tag_update(bmain);
|
|
}
|
|
|
|
static void rna_Fluid_datacache_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
if (settings->fmd && settings->fmd->domain) {
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
int cache_map = (FLUID_DOMAIN_OUTDATED_DATA | FLUID_DOMAIN_OUTDATED_NOISE |
|
|
FLUID_DOMAIN_OUTDATED_MESH | FLUID_DOMAIN_OUTDATED_PARTICLES);
|
|
|
|
/* In replay mode, always invalidate guiding cache too. */
|
|
if (settings->cache_type == FLUID_DOMAIN_CACHE_REPLAY) {
|
|
cache_map |= FLUID_DOMAIN_OUTDATED_GUIDE;
|
|
}
|
|
BKE_fluid_cache_free(settings, ob, cache_map);
|
|
}
|
|
# endif
|
|
DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
|
|
}
|
|
static void rna_Fluid_noisecache_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
if (settings->fmd && settings->fmd->domain) {
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
int cache_map = FLUID_DOMAIN_OUTDATED_NOISE;
|
|
BKE_fluid_cache_free(settings, ob, cache_map);
|
|
}
|
|
# endif
|
|
DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
|
|
}
|
|
static void rna_Fluid_meshcache_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
if (settings->fmd && settings->fmd->domain) {
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
int cache_map = FLUID_DOMAIN_OUTDATED_MESH;
|
|
BKE_fluid_cache_free(settings, ob, cache_map);
|
|
}
|
|
# endif
|
|
DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
|
|
}
|
|
static void rna_Fluid_particlescache_reset(Main *UNUSED(bmain),
|
|
Scene *UNUSED(scene),
|
|
PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
if (settings->fmd && settings->fmd->domain) {
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
int cache_map = FLUID_DOMAIN_OUTDATED_PARTICLES;
|
|
BKE_fluid_cache_free(settings, ob, cache_map);
|
|
}
|
|
# endif
|
|
DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
|
|
}
|
|
static void rna_Fluid_guidingcache_reset(Main *UNUSED(bmain),
|
|
Scene *UNUSED(scene),
|
|
PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
if (settings->fmd && settings->fmd->domain) {
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
int cache_map = (FLUID_DOMAIN_OUTDATED_DATA | FLUID_DOMAIN_OUTDATED_NOISE |
|
|
FLUID_DOMAIN_OUTDATED_MESH | FLUID_DOMAIN_OUTDATED_PARTICLES |
|
|
FLUID_DOMAIN_OUTDATED_GUIDE);
|
|
BKE_fluid_cache_free(settings, ob, cache_map);
|
|
}
|
|
# endif
|
|
DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
|
|
}
|
|
|
|
static void rna_Fluid_effector_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidEffectorSettings *settings = (FluidEffectorSettings *)ptr->data;
|
|
settings->flags |= FLUID_EFFECTOR_NEEDS_UPDATE;
|
|
# endif
|
|
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_flow_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidFlowSettings *settings = (FluidFlowSettings *)ptr->data;
|
|
settings->flags |= FLUID_FLOW_NEEDS_UPDATE;
|
|
# endif
|
|
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_domain_data_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_modifier_reset(settings->fmd);
|
|
# endif
|
|
|
|
rna_Fluid_datacache_reset(bmain, scene, ptr);
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_domain_noise_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_modifier_reset(settings->fmd);
|
|
# endif
|
|
|
|
rna_Fluid_noisecache_reset(bmain, scene, ptr);
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_domain_mesh_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_modifier_reset(settings->fmd);
|
|
# endif
|
|
|
|
rna_Fluid_meshcache_reset(bmain, scene, ptr);
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_domain_particles_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_modifier_reset(settings->fmd);
|
|
# endif
|
|
|
|
rna_Fluid_particlescache_reset(bmain, scene, ptr);
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_reset_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
# ifdef WITH_FLUID
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_modifier_reset(settings->fmd);
|
|
# endif
|
|
|
|
rna_Fluid_dependency_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_parts_create(Main *bmain,
|
|
PointerRNA *ptr,
|
|
const char *pset_name,
|
|
const char *parts_name,
|
|
const char *psys_name,
|
|
int psys_type)
|
|
{
|
|
# ifndef WITH_FLUID
|
|
UNUSED_VARS(bmain, ptr, pset_name, parts_name, psys_name, psys_type);
|
|
# else
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
BKE_fluid_particle_system_create(bmain, ob, pset_name, parts_name, psys_name, psys_type);
|
|
# endif
|
|
}
|
|
|
|
static void rna_Fluid_parts_delete(PointerRNA *ptr, int ptype)
|
|
{
|
|
# ifndef WITH_FLUID
|
|
UNUSED_VARS(ptr, ptype);
|
|
# else
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
BKE_fluid_particle_system_destroy(ob, ptype);
|
|
# endif
|
|
}
|
|
|
|
static bool rna_Fluid_parts_exists(PointerRNA *ptr, int ptype)
|
|
{
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
ParticleSystem *psys;
|
|
|
|
for (psys = ob->particlesystem.first; psys; psys = psys->next) {
|
|
if (psys->part->type == ptype) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
static void rna_Fluid_flip_parts_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
FluidModifierData *fmd;
|
|
fmd = (FluidModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Fluid);
|
|
bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_FLIP);
|
|
|
|
/* Only create a particle system in liquid domain mode.
|
|
* Remove any remaining data from a liquid sim when switching to gas. */
|
|
if (fmd->domain->type != FLUID_DOMAIN_TYPE_LIQUID) {
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FLIP);
|
|
fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_FLIP;
|
|
rna_Fluid_domain_data_reset(bmain, scene, ptr);
|
|
return;
|
|
}
|
|
|
|
if (ob->type == OB_MESH && !exists) {
|
|
rna_Fluid_parts_create(
|
|
bmain, ptr, "LiquidParticleSettings", "Liquid", "Liquid Particle System", PART_FLUID_FLIP);
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FLIP;
|
|
}
|
|
else {
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FLIP);
|
|
fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_FLIP;
|
|
}
|
|
rna_Fluid_update(bmain, scene, ptr);
|
|
}
|
|
|
|
static void rna_Fluid_spray_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
FluidModifierData *fmd;
|
|
fmd = (FluidModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Fluid);
|
|
bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAY);
|
|
|
|
if (ob->type == OB_MESH && !exists) {
|
|
rna_Fluid_parts_create(
|
|
bmain, ptr, "SprayParticleSettings", "Spray", "Spray Particle System", PART_FLUID_SPRAY);
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
|
}
|
|
else {
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
|
fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_SPRAY;
|
|
}
|
|
}
|
|
|
|
static void rna_Fluid_bubble_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
FluidModifierData *fmd;
|
|
fmd = (FluidModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Fluid);
|
|
bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_BUBBLE);
|
|
|
|
if (ob->type == OB_MESH && !exists) {
|
|
rna_Fluid_parts_create(bmain,
|
|
ptr,
|
|
"BubbleParticleSettings",
|
|
"Bubbles",
|
|
"Bubble Particle System",
|
|
PART_FLUID_BUBBLE);
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
|
}
|
|
else {
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
|
fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_BUBBLE;
|
|
}
|
|
}
|
|
|
|
static void rna_Fluid_foam_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
FluidModifierData *fmd;
|
|
fmd = (FluidModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Fluid);
|
|
bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_FOAM);
|
|
|
|
if (ob->type == OB_MESH && !exists) {
|
|
rna_Fluid_parts_create(
|
|
bmain, ptr, "FoamParticleSettings", "Foam", "Foam Particle System", PART_FLUID_FOAM);
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
|
}
|
|
else {
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
|
fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_FOAM;
|
|
}
|
|
}
|
|
|
|
static void rna_Fluid_tracer_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
|
{
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
FluidModifierData *fmd;
|
|
fmd = (FluidModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Fluid);
|
|
bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_TRACER);
|
|
|
|
if (ob->type == OB_MESH && !exists) {
|
|
rna_Fluid_parts_create(bmain,
|
|
ptr,
|
|
"TracerParticleSettings",
|
|
"Tracers",
|
|
"Tracer Particle System",
|
|
PART_FLUID_TRACER);
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_TRACER;
|
|
}
|
|
else {
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_TRACER);
|
|
fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_TRACER;
|
|
}
|
|
}
|
|
|
|
static void rna_Fluid_combined_export_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|
{
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
FluidModifierData *fmd;
|
|
fmd = (FluidModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Fluid);
|
|
|
|
if (fmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_OFF) {
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
|
|
|
bool exists_spray = rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAY);
|
|
bool exists_foam = rna_Fluid_parts_exists(ptr, PART_FLUID_FOAM);
|
|
bool exists_bubble = rna_Fluid_parts_exists(ptr, PART_FLUID_BUBBLE);
|
|
|
|
/* Re-add each particle type if enabled and no particle system exists for them anymore. */
|
|
if ((fmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && !exists_spray) {
|
|
rna_Fluid_spray_parts_update(bmain, scene, ptr);
|
|
}
|
|
if ((fmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) && !exists_foam) {
|
|
rna_Fluid_foam_parts_update(bmain, scene, ptr);
|
|
}
|
|
if ((fmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) && !exists_bubble) {
|
|
rna_Fluid_bubble_parts_update(bmain, scene, ptr);
|
|
}
|
|
}
|
|
else if (fmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM) {
|
|
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAYFOAM)) {
|
|
|
|
rna_Fluid_parts_create(bmain,
|
|
ptr,
|
|
"SprayFoamParticleSettings",
|
|
"Spray + Foam",
|
|
"Spray + Foam Particle System",
|
|
PART_FLUID_SPRAYFOAM);
|
|
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
|
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
|
|
|
/* Re-add spray if enabled and no particle system exists for it anymore. */
|
|
bool exists_bubble = rna_Fluid_parts_exists(ptr, PART_FLUID_BUBBLE);
|
|
if ((fmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) && !exists_bubble) {
|
|
rna_Fluid_bubble_parts_update(bmain, scene, ptr);
|
|
}
|
|
}
|
|
}
|
|
else if (fmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_SPRAY_BUBBLE) {
|
|
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAYBUBBLE)) {
|
|
|
|
rna_Fluid_parts_create(bmain,
|
|
ptr,
|
|
"SprayBubbleParticleSettings",
|
|
"Spray + Bubbles",
|
|
"Spray + Bubble Particle System",
|
|
PART_FLUID_SPRAYBUBBLE);
|
|
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
|
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
|
|
|
/* Re-add foam if enabled and no particle system exists for it anymore. */
|
|
bool exists_foam = rna_Fluid_parts_exists(ptr, PART_FLUID_FOAM);
|
|
if ((fmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) && !exists_foam) {
|
|
rna_Fluid_foam_parts_update(bmain, scene, ptr);
|
|
}
|
|
}
|
|
}
|
|
else if (fmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_FOAM_BUBBLE) {
|
|
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_FOAMBUBBLE)) {
|
|
|
|
rna_Fluid_parts_create(bmain,
|
|
ptr,
|
|
"FoamBubbleParticleSettings",
|
|
"Foam + Bubble Particles",
|
|
"Foam + Bubble Particle System",
|
|
PART_FLUID_FOAMBUBBLE);
|
|
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
|
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
|
|
|
/* Re-add foam if enabled and no particle system exists for it anymore. */
|
|
bool exists_spray = rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAY);
|
|
if ((fmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && !exists_spray) {
|
|
rna_Fluid_spray_parts_update(bmain, scene, ptr);
|
|
}
|
|
}
|
|
}
|
|
else if (fmd->domain->sndparticle_combined_export ==
|
|
SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM_BUBBLE) {
|
|
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAYFOAMBUBBLE)) {
|
|
|
|
rna_Fluid_parts_create(bmain,
|
|
ptr,
|
|
"SprayFoamBubbleParticleSettings",
|
|
"Spray + Foam + Bubbles",
|
|
"Spray + Foam + Bubble Particle System",
|
|
PART_FLUID_SPRAYFOAMBUBBLE);
|
|
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
|
fmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
|
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
|
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
|
}
|
|
}
|
|
else {
|
|
/* sanity check, should not occur */
|
|
printf("ERROR: Unexpected combined export setting encountered!");
|
|
}
|
|
}
|
|
|
|
static void rna_Fluid_cache_startframe_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_cache_startframe_set(settings, value);
|
|
}
|
|
|
|
static void rna_Fluid_cache_endframe_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_cache_endframe_set(settings, value);
|
|
}
|
|
|
|
static void rna_Fluid_cachetype_mesh_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_cachetype_mesh_set(settings, value);
|
|
}
|
|
|
|
static void rna_Fluid_cachetype_data_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_cachetype_data_set(settings, value);
|
|
}
|
|
|
|
static void rna_Fluid_cachetype_particle_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_cachetype_particle_set(settings, value);
|
|
}
|
|
|
|
static void rna_Fluid_cachetype_noise_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
BKE_fluid_cachetype_noise_set(settings, value);
|
|
}
|
|
|
|
static void rna_Fluid_cachetype_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
|
|
if (value != settings->cache_type) {
|
|
settings->cache_type = value;
|
|
settings->cache_flag = 0;
|
|
}
|
|
}
|
|
|
|
static void rna_Fluid_guide_parent_set(struct PointerRNA *ptr,
|
|
struct PointerRNA value,
|
|
struct ReportList *UNUSED(reports))
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
Object *par = (Object *)value.data;
|
|
|
|
FluidModifierData *fmd_par = NULL;
|
|
|
|
if (par != NULL) {
|
|
fmd_par = (FluidModifierData *)BKE_modifiers_findby_type(par, eModifierType_Fluid);
|
|
if (fmd_par && fmd_par->domain) {
|
|
fds->guide_parent = value.data;
|
|
copy_v3_v3_int(fds->guide_res, fmd_par->domain->res);
|
|
}
|
|
}
|
|
else {
|
|
fds->guide_parent = NULL;
|
|
}
|
|
}
|
|
|
|
static const EnumPropertyItem *rna_Fluid_cachetype_mesh_itemf(bContext *UNUSED(C),
|
|
PointerRNA *UNUSED(ptr),
|
|
PropertyRNA *UNUSED(prop),
|
|
bool *r_free)
|
|
{
|
|
EnumPropertyItem *item = NULL;
|
|
EnumPropertyItem tmp = {0, "", 0, "", ""};
|
|
int totitem = 0;
|
|
|
|
tmp.value = FLUID_DOMAIN_FILE_BIN_OBJECT;
|
|
tmp.identifier = "BOBJECT";
|
|
tmp.name = "Binary Object";
|
|
tmp.description = "Binary object file format (.bobj.gz)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FILE_OBJECT;
|
|
tmp.identifier = "OBJECT";
|
|
tmp.name = "Object";
|
|
tmp.description = "Object file format (.obj)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
RNA_enum_item_end(&item, &totitem);
|
|
*r_free = true;
|
|
|
|
return item;
|
|
}
|
|
|
|
static const EnumPropertyItem *rna_Fluid_cachetype_volume_itemf(bContext *UNUSED(C),
|
|
PointerRNA *ptr,
|
|
PropertyRNA *UNUSED(prop),
|
|
bool *r_free)
|
|
{
|
|
EnumPropertyItem *item = NULL;
|
|
EnumPropertyItem tmp = {0, "", 0, "", ""};
|
|
int totitem = 0;
|
|
|
|
tmp.value = FLUID_DOMAIN_FILE_UNI;
|
|
tmp.identifier = "UNI";
|
|
tmp.name = "Uni Cache";
|
|
tmp.description = "Uni file format (.uni)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
# ifdef WITH_OPENVDB
|
|
tmp.value = FLUID_DOMAIN_FILE_OPENVDB;
|
|
tmp.identifier = "OPENVDB";
|
|
tmp.name = "OpenVDB";
|
|
tmp.description = "OpenVDB file format (.vdb)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
# endif
|
|
|
|
/* Support for deprecated .raw format. */
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
if (fds->cache_data_format == FLUID_DOMAIN_FILE_RAW ||
|
|
fds->cache_noise_format == FLUID_DOMAIN_FILE_RAW) {
|
|
tmp.value = FLUID_DOMAIN_FILE_RAW;
|
|
tmp.identifier = "RAW";
|
|
tmp.name = "Raw Cache";
|
|
tmp.description = "Raw file format (.raw)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
}
|
|
|
|
RNA_enum_item_end(&item, &totitem);
|
|
*r_free = true;
|
|
|
|
return item;
|
|
}
|
|
|
|
static const EnumPropertyItem *rna_Fluid_cachetype_particle_itemf(bContext *UNUSED(C),
|
|
PointerRNA *UNUSED(ptr),
|
|
PropertyRNA *UNUSED(prop),
|
|
bool *r_free)
|
|
{
|
|
EnumPropertyItem *item = NULL;
|
|
EnumPropertyItem tmp = {0, "", 0, "", ""};
|
|
int totitem = 0;
|
|
|
|
tmp.value = FLUID_DOMAIN_FILE_UNI;
|
|
tmp.identifier = "UNI";
|
|
tmp.name = "Uni Cache";
|
|
tmp.description = "Uni file format";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
RNA_enum_item_end(&item, &totitem);
|
|
*r_free = true;
|
|
|
|
return item;
|
|
}
|
|
|
|
static void rna_Fluid_cache_directory_set(struct PointerRNA *ptr, const char *value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
|
|
if (STREQ(settings->cache_directory, value)) {
|
|
return;
|
|
}
|
|
|
|
BLI_strncpy(settings->cache_directory, value, sizeof(settings->cache_directory));
|
|
|
|
/* TODO(sebbas): Read cache state in order to set cache bake flags and cache pause frames
|
|
* correctly. */
|
|
// settings->cache_flag = 0;
|
|
}
|
|
|
|
static const EnumPropertyItem *rna_Fluid_cobafield_itemf(bContext *UNUSED(C),
|
|
PointerRNA *ptr,
|
|
PropertyRNA *UNUSED(prop),
|
|
bool *r_free)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
|
|
EnumPropertyItem *item = NULL;
|
|
EnumPropertyItem tmp = {0, "", 0, "", ""};
|
|
int totitem = 0;
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_FLAGS;
|
|
tmp.identifier = "FLAGS";
|
|
tmp.icon = 0;
|
|
tmp.name = "Flags";
|
|
tmp.description = "Flag grid of the fluid domain";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_PRESSURE;
|
|
tmp.identifier = "PRESSURE";
|
|
tmp.icon = 0;
|
|
tmp.name = "Pressure";
|
|
tmp.description = "Pressure field of the fluid domain";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_VELOCITY_X;
|
|
tmp.identifier = "VELOCITY_X";
|
|
tmp.icon = 0;
|
|
tmp.name = "X Velocity";
|
|
tmp.description = "X component of the velocity field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_VELOCITY_Y;
|
|
tmp.identifier = "VELOCITY_Y";
|
|
tmp.icon = 0;
|
|
tmp.name = "Y Velocity";
|
|
tmp.description = "Y component of the velocity field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_VELOCITY_Z;
|
|
tmp.identifier = "VELOCITY_Z";
|
|
tmp.icon = 0;
|
|
tmp.name = "Z Velocity";
|
|
tmp.description = "Z component of the velocity field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_FORCE_X;
|
|
tmp.identifier = "FORCE_X";
|
|
tmp.icon = 0;
|
|
tmp.name = "X Force";
|
|
tmp.description = "X component of the force field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_FORCE_Y;
|
|
tmp.identifier = "FORCE_Y";
|
|
tmp.icon = 0;
|
|
tmp.name = "Y Force";
|
|
tmp.description = "Y component of the force field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_FORCE_Z;
|
|
tmp.identifier = "FORCE_Z";
|
|
tmp.icon = 0;
|
|
tmp.name = "Z Force";
|
|
tmp.description = "Z component of the force field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
if (settings->type == FLUID_DOMAIN_TYPE_GAS) {
|
|
tmp.value = FLUID_DOMAIN_FIELD_COLOR_R;
|
|
tmp.identifier = "COLOR_R";
|
|
tmp.icon = 0;
|
|
tmp.name = "Red";
|
|
tmp.description = "Red component of the color field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_COLOR_G;
|
|
tmp.identifier = "COLOR_G";
|
|
tmp.icon = 0;
|
|
tmp.name = "Green";
|
|
tmp.description = "Green component of the color field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_COLOR_B;
|
|
tmp.identifier = "COLOR_B";
|
|
tmp.icon = 0;
|
|
tmp.name = "Blue";
|
|
tmp.description = "Blue component of the color field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_DENSITY;
|
|
tmp.identifier = "DENSITY";
|
|
tmp.icon = 0;
|
|
tmp.name = "Density";
|
|
tmp.description = "Quantity of soot in the fluid";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_FLAME;
|
|
tmp.identifier = "FLAME";
|
|
tmp.icon = 0;
|
|
tmp.name = "Flame";
|
|
tmp.description = "Flame field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_FUEL;
|
|
tmp.identifier = "FUEL";
|
|
tmp.icon = 0;
|
|
tmp.name = "Fuel";
|
|
tmp.description = "Fuel field";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_HEAT;
|
|
tmp.identifier = "HEAT";
|
|
tmp.icon = 0;
|
|
tmp.name = "Heat";
|
|
tmp.description = "Temperature of the fluid";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
}
|
|
else if (settings->type == FLUID_DOMAIN_TYPE_LIQUID) {
|
|
tmp.value = FLUID_DOMAIN_FIELD_PHI;
|
|
tmp.identifier = "PHI";
|
|
tmp.icon = 0;
|
|
tmp.name = "Fluid Levelset";
|
|
tmp.description = "Levelset representation of the fluid";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_PHI_IN;
|
|
tmp.identifier = "PHI_IN";
|
|
tmp.icon = 0;
|
|
tmp.name = "Inflow Levelset";
|
|
tmp.description = "Levelset representation of the inflow";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_PHI_OUT;
|
|
tmp.identifier = "PHI_OUT";
|
|
tmp.icon = 0;
|
|
tmp.name = "Outflow Levelset";
|
|
tmp.description = "Levelset representation of the outflow";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = FLUID_DOMAIN_FIELD_PHI_OBSTACLE;
|
|
tmp.identifier = "PHI_OBSTACLE";
|
|
tmp.icon = 0;
|
|
tmp.name = "Obstacle Levelset";
|
|
tmp.description = "Levelset representation of the obstacles";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
}
|
|
|
|
RNA_enum_item_end(&item, &totitem);
|
|
*r_free = true;
|
|
|
|
return item;
|
|
}
|
|
|
|
static const EnumPropertyItem *rna_Fluid_data_depth_itemf(bContext *UNUSED(C),
|
|
PointerRNA *ptr,
|
|
PropertyRNA *UNUSED(prop),
|
|
bool *r_free)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
|
|
EnumPropertyItem *item = NULL;
|
|
EnumPropertyItem tmp = {0, "", 0, "", ""};
|
|
int totitem = 0;
|
|
|
|
tmp.value = VDB_PRECISION_FULL_FLOAT;
|
|
tmp.identifier = "32";
|
|
tmp.icon = 0;
|
|
tmp.name = "Full";
|
|
tmp.description = "Full float (Use 32 bit for all data)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
tmp.value = VDB_PRECISION_HALF_FLOAT;
|
|
tmp.identifier = "16";
|
|
tmp.icon = 0;
|
|
tmp.name = "Half";
|
|
tmp.description = "Half float (Use 16 bit for all data)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
if (settings->type == FLUID_DOMAIN_TYPE_LIQUID) {
|
|
tmp.value = VDB_PRECISION_MINI_FLOAT;
|
|
tmp.identifier = "8";
|
|
tmp.icon = 0;
|
|
tmp.name = "Mini";
|
|
tmp.description = "Mini float (Use 8 bit where possible, otherwise use 16 bit)";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
}
|
|
|
|
RNA_enum_item_end(&item, &totitem);
|
|
*r_free = true;
|
|
|
|
return item;
|
|
}
|
|
|
|
static void rna_Fluid_domaintype_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
Object *ob = (Object *)ptr->owner_id;
|
|
BKE_fluid_domain_type_set(ob, settings, value);
|
|
BKE_fluid_fields_sanitize(settings);
|
|
}
|
|
|
|
static char *rna_FluidDomainSettings_path(PointerRNA *ptr)
|
|
{
|
|
FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
|
|
ModifierData *md = (ModifierData *)settings->fmd;
|
|
char name_esc[sizeof(md->name) * 2];
|
|
|
|
BLI_str_escape(name_esc, md->name, sizeof(name_esc));
|
|
return BLI_sprintfN("modifiers[\"%s\"].domain_settings", name_esc);
|
|
}
|
|
|
|
static char *rna_FluidFlowSettings_path(PointerRNA *ptr)
|
|
{
|
|
FluidFlowSettings *settings = (FluidFlowSettings *)ptr->data;
|
|
ModifierData *md = (ModifierData *)settings->fmd;
|
|
char name_esc[sizeof(md->name) * 2];
|
|
|
|
BLI_str_escape(name_esc, md->name, sizeof(name_esc));
|
|
return BLI_sprintfN("modifiers[\"%s\"].flow_settings", name_esc);
|
|
}
|
|
|
|
static char *rna_FluidEffectorSettings_path(PointerRNA *ptr)
|
|
{
|
|
FluidEffectorSettings *settings = (FluidEffectorSettings *)ptr->data;
|
|
ModifierData *md = (ModifierData *)settings->fmd;
|
|
char name_esc[sizeof(md->name) * 2];
|
|
|
|
BLI_str_escape(name_esc, md->name, sizeof(name_esc));
|
|
return BLI_sprintfN("modifiers[\"%s\"].effector_settings", name_esc);
|
|
}
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Grid Accessors
|
|
* \{ */
|
|
|
|
# ifdef WITH_FLUID
|
|
|
|
static int rna_FluidModifier_grid_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
float *density = NULL;
|
|
int size = 0;
|
|
|
|
if (fds->flags & FLUID_DOMAIN_USE_NOISE && fds->fluid) {
|
|
/* high resolution smoke */
|
|
int res[3];
|
|
|
|
manta_noise_get_res(fds->fluid, res);
|
|
size = res[0] * res[1] * res[2];
|
|
|
|
density = manta_noise_get_density(fds->fluid);
|
|
}
|
|
else if (fds->fluid) {
|
|
/* regular resolution */
|
|
size = fds->res[0] * fds->res[1] * fds->res[2];
|
|
density = manta_smoke_get_density(fds->fluid);
|
|
}
|
|
|
|
length[0] = (density) ? size : 0;
|
|
return length[0];
|
|
}
|
|
|
|
static int rna_FluidModifier_color_grid_get_length(PointerRNA *ptr,
|
|
int length[RNA_MAX_ARRAY_DIMENSION])
|
|
{
|
|
rna_FluidModifier_grid_get_length(ptr, length);
|
|
|
|
length[0] *= 4;
|
|
return length[0];
|
|
}
|
|
|
|
static int rna_FluidModifier_velocity_grid_get_length(PointerRNA *ptr,
|
|
int length[RNA_MAX_ARRAY_DIMENSION])
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
float *vx = NULL;
|
|
float *vy = NULL;
|
|
float *vz = NULL;
|
|
int size = 0;
|
|
|
|
/* Velocity data is always low-resolution. */
|
|
if (fds->fluid) {
|
|
size = 3 * fds->res[0] * fds->res[1] * fds->res[2];
|
|
vx = manta_get_velocity_x(fds->fluid);
|
|
vy = manta_get_velocity_y(fds->fluid);
|
|
vz = manta_get_velocity_z(fds->fluid);
|
|
}
|
|
|
|
length[0] = (vx && vy && vz) ? size : 0;
|
|
return length[0];
|
|
}
|
|
|
|
static int rna_FluidModifier_heat_grid_get_length(PointerRNA *ptr,
|
|
int length[RNA_MAX_ARRAY_DIMENSION])
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
float *heat = NULL;
|
|
int size = 0;
|
|
|
|
/* Heat data is always low-resolution. */
|
|
if (fds->fluid) {
|
|
size = fds->res[0] * fds->res[1] * fds->res[2];
|
|
heat = manta_smoke_get_heat(fds->fluid);
|
|
}
|
|
|
|
length[0] = (heat) ? size : 0;
|
|
return length[0];
|
|
}
|
|
|
|
static void rna_FluidModifier_density_grid_get(PointerRNA *ptr, float *values)
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
int length[RNA_MAX_ARRAY_DIMENSION];
|
|
int size = rna_FluidModifier_grid_get_length(ptr, length);
|
|
float *density;
|
|
|
|
BLI_rw_mutex_lock(fds->fluid_mutex, THREAD_LOCK_READ);
|
|
|
|
if (fds->flags & FLUID_DOMAIN_USE_NOISE && fds->fluid) {
|
|
density = manta_noise_get_density(fds->fluid);
|
|
}
|
|
else {
|
|
density = manta_smoke_get_density(fds->fluid);
|
|
}
|
|
|
|
memcpy(values, density, size * sizeof(float));
|
|
|
|
BLI_rw_mutex_unlock(fds->fluid_mutex);
|
|
}
|
|
|
|
static void rna_FluidModifier_velocity_grid_get(PointerRNA *ptr, float *values)
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
int length[RNA_MAX_ARRAY_DIMENSION];
|
|
int size = rna_FluidModifier_velocity_grid_get_length(ptr, length);
|
|
float *vx, *vy, *vz;
|
|
int i;
|
|
|
|
BLI_rw_mutex_lock(fds->fluid_mutex, THREAD_LOCK_READ);
|
|
|
|
vx = manta_get_velocity_x(fds->fluid);
|
|
vy = manta_get_velocity_y(fds->fluid);
|
|
vz = manta_get_velocity_z(fds->fluid);
|
|
|
|
for (i = 0; i < size; i += 3) {
|
|
*(values++) = *(vx++);
|
|
*(values++) = *(vy++);
|
|
*(values++) = *(vz++);
|
|
}
|
|
|
|
BLI_rw_mutex_unlock(fds->fluid_mutex);
|
|
}
|
|
|
|
static void rna_FluidModifier_color_grid_get(PointerRNA *ptr, float *values)
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
int length[RNA_MAX_ARRAY_DIMENSION];
|
|
int size = rna_FluidModifier_grid_get_length(ptr, length);
|
|
|
|
BLI_rw_mutex_lock(fds->fluid_mutex, THREAD_LOCK_READ);
|
|
|
|
if (!fds->fluid) {
|
|
memset(values, 0, size * sizeof(float));
|
|
}
|
|
else {
|
|
if (fds->flags & FLUID_DOMAIN_USE_NOISE) {
|
|
if (manta_noise_has_colors(fds->fluid)) {
|
|
manta_noise_get_rgba(fds->fluid, values, 0);
|
|
}
|
|
else {
|
|
manta_noise_get_rgba_fixed_color(fds->fluid, fds->active_color, values, 0);
|
|
}
|
|
}
|
|
else {
|
|
if (manta_smoke_has_colors(fds->fluid)) {
|
|
manta_smoke_get_rgba(fds->fluid, values, 0);
|
|
}
|
|
else {
|
|
manta_smoke_get_rgba_fixed_color(fds->fluid, fds->active_color, values, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
BLI_rw_mutex_unlock(fds->fluid_mutex);
|
|
}
|
|
|
|
static void rna_FluidModifier_flame_grid_get(PointerRNA *ptr, float *values)
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
int length[RNA_MAX_ARRAY_DIMENSION];
|
|
int size = rna_FluidModifier_grid_get_length(ptr, length);
|
|
float *flame;
|
|
|
|
BLI_rw_mutex_lock(fds->fluid_mutex, THREAD_LOCK_READ);
|
|
|
|
if (fds->flags & FLUID_DOMAIN_USE_NOISE && fds->fluid) {
|
|
flame = manta_noise_get_flame(fds->fluid);
|
|
}
|
|
else {
|
|
flame = manta_smoke_get_flame(fds->fluid);
|
|
}
|
|
|
|
if (flame) {
|
|
memcpy(values, flame, size * sizeof(float));
|
|
}
|
|
else {
|
|
memset(values, 0, size * sizeof(float));
|
|
}
|
|
|
|
BLI_rw_mutex_unlock(fds->fluid_mutex);
|
|
}
|
|
|
|
static void rna_FluidModifier_heat_grid_get(PointerRNA *ptr, float *values)
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
int length[RNA_MAX_ARRAY_DIMENSION];
|
|
int size = rna_FluidModifier_heat_grid_get_length(ptr, length);
|
|
float *heat;
|
|
|
|
BLI_rw_mutex_lock(fds->fluid_mutex, THREAD_LOCK_READ);
|
|
|
|
heat = manta_smoke_get_heat(fds->fluid);
|
|
|
|
if (heat != NULL) {
|
|
/* scale heat values from -2.0-2.0 to -1.0-1.0. */
|
|
for (int i = 0; i < size; i++) {
|
|
values[i] = heat[i] * 0.5f;
|
|
}
|
|
}
|
|
else {
|
|
memset(values, 0, size * sizeof(float));
|
|
}
|
|
|
|
BLI_rw_mutex_unlock(fds->fluid_mutex);
|
|
}
|
|
|
|
static void rna_FluidModifier_temperature_grid_get(PointerRNA *ptr, float *values)
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
int length[RNA_MAX_ARRAY_DIMENSION];
|
|
int size = rna_FluidModifier_grid_get_length(ptr, length);
|
|
float *flame;
|
|
|
|
BLI_rw_mutex_lock(fds->fluid_mutex, THREAD_LOCK_READ);
|
|
|
|
if (fds->flags & FLUID_DOMAIN_USE_NOISE && fds->fluid) {
|
|
flame = manta_noise_get_flame(fds->fluid);
|
|
}
|
|
else {
|
|
flame = manta_smoke_get_flame(fds->fluid);
|
|
}
|
|
|
|
if (flame) {
|
|
/* Output is such that 0..1 maps to 0..1000K */
|
|
float offset = fds->flame_ignition;
|
|
float scale = fds->flame_max_temp - fds->flame_ignition;
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
values[i] = (flame[i] > 0.01f) ? offset + flame[i] * scale : 0.0f;
|
|
}
|
|
}
|
|
else {
|
|
memset(values, 0, size * sizeof(float));
|
|
}
|
|
|
|
BLI_rw_mutex_unlock(fds->fluid_mutex);
|
|
}
|
|
# endif /* WITH_FLUID */
|
|
|
|
/** \} */
|
|
|
|
static void rna_FluidFlow_density_vgroup_get(PointerRNA *ptr, char *value)
|
|
{
|
|
FluidFlowSettings *flow = (FluidFlowSettings *)ptr->data;
|
|
rna_object_vgroup_name_index_get(ptr, value, flow->vgroup_density);
|
|
}
|
|
|
|
static int rna_FluidFlow_density_vgroup_length(PointerRNA *ptr)
|
|
{
|
|
FluidFlowSettings *flow = (FluidFlowSettings *)ptr->data;
|
|
return rna_object_vgroup_name_index_length(ptr, flow->vgroup_density);
|
|
}
|
|
|
|
static void rna_FluidFlow_density_vgroup_set(struct PointerRNA *ptr, const char *value)
|
|
{
|
|
FluidFlowSettings *flow = (FluidFlowSettings *)ptr->data;
|
|
rna_object_vgroup_name_index_set(ptr, value, &flow->vgroup_density);
|
|
}
|
|
|
|
static void rna_FluidFlow_uvlayer_set(struct PointerRNA *ptr, const char *value)
|
|
{
|
|
FluidFlowSettings *flow = (FluidFlowSettings *)ptr->data;
|
|
rna_object_uvlayer_name_set(ptr, value, flow->uvlayer_name, sizeof(flow->uvlayer_name));
|
|
}
|
|
|
|
static void rna_Fluid_use_color_ramp_set(struct PointerRNA *ptr, bool value)
|
|
{
|
|
FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data;
|
|
|
|
fds->use_coba = value;
|
|
|
|
if (value && fds->coba == NULL) {
|
|
fds->coba = BKE_colorband_add(false);
|
|
}
|
|
}
|
|
|
|
static void rna_Fluid_flowsource_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidFlowSettings *settings = (FluidFlowSettings *)ptr->data;
|
|
|
|
if (value != settings->source) {
|
|
settings->source = value;
|
|
}
|
|
}
|
|
|
|
static const EnumPropertyItem *rna_Fluid_flowsource_itemf(bContext *UNUSED(C),
|
|
PointerRNA *ptr,
|
|
PropertyRNA *UNUSED(prop),
|
|
bool *r_free)
|
|
{
|
|
FluidFlowSettings *settings = (FluidFlowSettings *)ptr->data;
|
|
|
|
EnumPropertyItem *item = NULL;
|
|
EnumPropertyItem tmp = {0, "", 0, "", ""};
|
|
int totitem = 0;
|
|
|
|
tmp.value = FLUID_FLOW_SOURCE_MESH;
|
|
tmp.identifier = "MESH";
|
|
tmp.icon = ICON_META_CUBE;
|
|
tmp.name = "Mesh";
|
|
tmp.description = "Emit fluid from mesh surface or volume";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
|
|
if (settings->type != FLUID_FLOW_TYPE_LIQUID) {
|
|
tmp.value = FLUID_FLOW_SOURCE_PARTICLES;
|
|
tmp.identifier = "PARTICLES";
|
|
tmp.icon = ICON_PARTICLES;
|
|
tmp.name = "Particle System";
|
|
tmp.description = "Emit smoke from particles";
|
|
RNA_enum_item_add(&item, &totitem, &tmp);
|
|
}
|
|
|
|
RNA_enum_item_end(&item, &totitem);
|
|
*r_free = true;
|
|
|
|
return item;
|
|
}
|
|
|
|
static void rna_Fluid_flowtype_set(struct PointerRNA *ptr, int value)
|
|
{
|
|
FluidFlowSettings *settings = (FluidFlowSettings *)ptr->data;
|
|
|
|
if (value != settings->type) {
|
|
short prev_value = settings->type;
|
|
settings->type = value;
|
|
|
|
/* Force flow source to mesh for liquids.
|
|
* Also use different surface emission. Liquids should by default not emit around surface. */
|
|
if (value == FLUID_FLOW_TYPE_LIQUID) {
|
|
rna_Fluid_flowsource_set(ptr, FLUID_FLOW_SOURCE_MESH);
|
|
settings->surface_distance = 0.0f;
|
|
}
|
|
/* Use some surface emission when switching to a gas emitter. Gases should by default emit a
|
|
* bit around surface. */
|
|
if (prev_value == FLUID_FLOW_TYPE_LIQUID) {
|
|
settings->surface_distance = 1.5f;
|
|
}
|
|
}
|
|
}
|
|
|
|
#else
|
|
|
|
static void rna_def_fluid_mesh_vertices(BlenderRNA *brna)
|
|
{
|
|
StructRNA *srna;
|
|
PropertyRNA *prop;
|
|
|
|
srna = RNA_def_struct(brna, "FluidDomainVertexVelocity", NULL);
|
|
RNA_def_struct_ui_text(srna, "Fluid Mesh Velocity", "Velocity of a simulated fluid mesh");
|
|
RNA_def_struct_ui_icon(srna, ICON_VERTEXSEL);
|
|
|
|
prop = RNA_def_property(srna, "velocity", PROP_FLOAT, PROP_VELOCITY);
|
|
RNA_def_property_array(prop, 3);
|
|
RNA_def_property_float_sdna(prop, NULL, "vel");
|
|
RNA_def_property_ui_text(prop, "Velocity", "");
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
}
|
|
|
|
static void rna_def_fluid_domain_settings(BlenderRNA *brna)
|
|
{
|
|
StructRNA *srna;
|
|
PropertyRNA *prop;
|
|
|
|
static EnumPropertyItem domain_types[] = {
|
|
{FLUID_DOMAIN_TYPE_GAS, "GAS", 0, "Gas", "Create domain for gases"},
|
|
{FLUID_DOMAIN_TYPE_LIQUID, "LIQUID", 0, "Liquid", "Create domain for liquids"},
|
|
{0, NULL, 0, NULL, NULL}};
|
|
|
|
static const EnumPropertyItem prop_noise_type_items[] = {
|
|
{FLUID_NOISE_TYPE_WAVELET, "NOISEWAVE", 0, "Wavelet", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem prop_compression_items[] = {
|
|
{VDB_COMPRESSION_ZIP, "ZIP", 0, "Zip", "Effective but slow compression"},
|
|
# ifdef WITH_OPENVDB_BLOSC
|
|
{VDB_COMPRESSION_BLOSC,
|
|
"BLOSC",
|
|
0,
|
|
"Blosc",
|
|
"Multithreaded compression, similar in size and quality as 'Zip'"},
|
|
# endif
|
|
{VDB_COMPRESSION_NONE, "NONE", 0, "None", "Do not use any compression"},
|
|
{0, NULL, 0, NULL, NULL}};
|
|
|
|
static const EnumPropertyItem smoke_highres_sampling_items[] = {
|
|
{SM_HRES_FULLSAMPLE, "FULLSAMPLE", 0, "Full Sample", ""},
|
|
{SM_HRES_LINEAR, "LINEAR", 0, "Linear", ""},
|
|
{SM_HRES_NEAREST, "NEAREST", 0, "Nearest", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static EnumPropertyItem cache_types[] = {
|
|
{FLUID_DOMAIN_CACHE_REPLAY, "REPLAY", 0, "Replay", "Use the timeline to bake the scene"},
|
|
{FLUID_DOMAIN_CACHE_MODULAR,
|
|
"MODULAR",
|
|
0,
|
|
"Modular",
|
|
"Bake every stage of the simulation separately"},
|
|
{FLUID_DOMAIN_CACHE_ALL, "ALL", 0, "All", "Bake all simulation settings at once"},
|
|
{0, NULL, 0, NULL, NULL}};
|
|
|
|
/* OpenVDB data depth - generated dynamically based on domain type */
|
|
static EnumPropertyItem fluid_data_depth_items[] = {
|
|
{0, "NONE", 0, "", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static EnumPropertyItem fluid_mesh_quality_items[] = {
|
|
{FLUID_DOMAIN_MESH_IMPROVED,
|
|
"IMPROVED",
|
|
0,
|
|
"Final",
|
|
"Use improved particle level set (slower but more precise and with mesh smoothening "
|
|
"options)"},
|
|
{FLUID_DOMAIN_MESH_UNION,
|
|
"UNION",
|
|
0,
|
|
"Preview",
|
|
"Use union particle level set (faster but lower quality)"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static EnumPropertyItem fluid_guide_source_items[] = {
|
|
{FLUID_DOMAIN_GUIDE_SRC_DOMAIN,
|
|
"DOMAIN",
|
|
0,
|
|
"Domain",
|
|
"Use a fluid domain for guiding (domain needs to be baked already so that velocities can "
|
|
"be extracted). Guiding domain can be of any type (i.e. gas or liquid)"},
|
|
{FLUID_DOMAIN_GUIDE_SRC_EFFECTOR,
|
|
"EFFECTOR",
|
|
0,
|
|
"Effector",
|
|
"Use guiding (effector) objects to create fluid guiding (guiding objects should be "
|
|
"animated and baked once set up completely)"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
/* Cache type - generated dynamically based on domain type */
|
|
static EnumPropertyItem cache_file_type_items[] = {
|
|
{0, "NONE", 0, "", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem interp_method_item[] = {
|
|
{FLUID_DISPLAY_INTERP_LINEAR, "LINEAR", 0, "Linear", "Good smoothness and speed"},
|
|
{FLUID_DISPLAY_INTERP_CUBIC,
|
|
"CUBIC",
|
|
0,
|
|
"Cubic",
|
|
"Smoothed high quality interpolation, but slower"},
|
|
{FLUID_DISPLAY_INTERP_CLOSEST, "CLOSEST", 0, "Closest", "No interpolation"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem axis_slice_position_items[] = {
|
|
{SLICE_AXIS_AUTO,
|
|
"AUTO",
|
|
0,
|
|
"Auto",
|
|
"Adjust slice direction according to the view direction"},
|
|
{SLICE_AXIS_X, "X", 0, "X", "Slice along the X axis"},
|
|
{SLICE_AXIS_Y, "Y", 0, "Y", "Slice along the Y axis"},
|
|
{SLICE_AXIS_Z, "Z", 0, "Z", "Slice along the Z axis"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem vector_draw_items[] = {
|
|
{VECTOR_DRAW_NEEDLE, "NEEDLE", 0, "Needle", "Display vectors as needles"},
|
|
{VECTOR_DRAW_STREAMLINE, "STREAMLINE", 0, "Streamlines", "Display vectors as streamlines"},
|
|
{VECTOR_DRAW_MAC, "MAC", 0, "MAC Grid", "Display vector field as MAC grid"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem vector_field_items[] = {
|
|
{FLUID_DOMAIN_VECTOR_FIELD_VELOCITY,
|
|
"FLUID_VELOCITY",
|
|
0,
|
|
"Fluid Velocity",
|
|
"Velocity field of the fluid domain"},
|
|
{FLUID_DOMAIN_VECTOR_FIELD_GUIDE_VELOCITY,
|
|
"GUIDE_VELOCITY",
|
|
0,
|
|
"Guide Velocity",
|
|
"Guide velocity field of the fluid domain"},
|
|
{FLUID_DOMAIN_VECTOR_FIELD_FORCE, "FORCE", 0, "Force", "Force field of the fluid domain"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem gridlines_color_field_items[] = {
|
|
{0, "NONE", 0, "None", "None"},
|
|
{FLUID_GRIDLINE_COLOR_TYPE_FLAGS, "FLAGS", 0, "Flags", "Flag grid of the fluid domain"},
|
|
{FLUID_GRIDLINE_COLOR_TYPE_RANGE,
|
|
"RANGE",
|
|
0,
|
|
"Highlight Range",
|
|
"Highlight the voxels with values of the color mapped field within the range"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem gridlines_cell_filter_items[] = {
|
|
{FLUID_CELL_TYPE_NONE, "NONE", 0, "None", "Highlight the cells regardless of their type"},
|
|
{FLUID_CELL_TYPE_FLUID, "FLUID", 0, "Fluid", "Highlight only the cells of type Fluid"},
|
|
{FLUID_CELL_TYPE_OBSTACLE,
|
|
"OBSTACLE",
|
|
0,
|
|
"Obstacle",
|
|
"Highlight only the cells of type Obstacle"},
|
|
{FLUID_CELL_TYPE_EMPTY, "EMPTY", 0, "Empty", "Highlight only the cells of type Empty"},
|
|
{FLUID_CELL_TYPE_INFLOW, "INFLOW", 0, "Inflow", "Highlight only the cells of type Inflow"},
|
|
{FLUID_CELL_TYPE_OUTFLOW,
|
|
"OUTFLOW",
|
|
0,
|
|
"Outflow",
|
|
"Highlight only the cells of type Outflow"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem sndparticle_boundary_items[] = {
|
|
{SNDPARTICLE_BOUNDARY_DELETE,
|
|
"DELETE",
|
|
0,
|
|
"Delete",
|
|
"Delete secondary particles that are inside obstacles or left the domain"},
|
|
{SNDPARTICLE_BOUNDARY_PUSHOUT,
|
|
"PUSHOUT",
|
|
0,
|
|
"Push Out",
|
|
"Push secondary particles that left the domain back into the domain"},
|
|
{0, NULL, 0, NULL, NULL}};
|
|
|
|
static const EnumPropertyItem sndparticle_combined_export_items[] = {
|
|
{SNDPARTICLE_COMBINED_EXPORT_OFF,
|
|
"OFF",
|
|
0,
|
|
"Off",
|
|
"Create a separate particle system for every secondary particle type"},
|
|
{SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM,
|
|
"SPRAY_FOAM",
|
|
0,
|
|
"Spray + Foam",
|
|
"Spray and foam particles are saved in the same particle system"},
|
|
{SNDPARTICLE_COMBINED_EXPORT_SPRAY_BUBBLE,
|
|
"SPRAY_BUBBLES",
|
|
0,
|
|
"Spray + Bubbles",
|
|
"Spray and bubble particles are saved in the same particle system"},
|
|
{SNDPARTICLE_COMBINED_EXPORT_FOAM_BUBBLE,
|
|
"FOAM_BUBBLES",
|
|
0,
|
|
"Foam + Bubbles",
|
|
"Foam and bubbles particles are saved in the same particle system"},
|
|
{SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM_BUBBLE,
|
|
"SPRAY_FOAM_BUBBLES",
|
|
0,
|
|
"Spray + Foam + Bubbles",
|
|
"Create one particle system that contains all three secondary particle types"},
|
|
{0, NULL, 0, NULL, NULL}};
|
|
|
|
static EnumPropertyItem simulation_methods[] = {
|
|
{FLUID_DOMAIN_METHOD_FLIP,
|
|
"FLIP",
|
|
0,
|
|
"FLIP",
|
|
"Use FLIP as the simulation method (more splashy behavior)"},
|
|
{FLUID_DOMAIN_METHOD_APIC,
|
|
"APIC",
|
|
0,
|
|
"APIC",
|
|
"Use APIC as the simulation method (more energetic and stable behavior)"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
srna = RNA_def_struct(brna, "FluidDomainSettings", NULL);
|
|
RNA_def_struct_ui_text(srna, "Domain Settings", "Fluid domain settings");
|
|
RNA_def_struct_sdna(srna, "FluidDomainSettings");
|
|
RNA_def_struct_path_func(srna, "rna_FluidDomainSettings_path");
|
|
|
|
prop = RNA_def_property(srna, "effector_weights", PROP_POINTER, PROP_NONE);
|
|
RNA_def_property_struct_type(prop, "EffectorWeights");
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "Effector Weights", "");
|
|
|
|
/* object collections */
|
|
|
|
prop = RNA_def_property(srna, "effector_group", PROP_POINTER, PROP_NONE);
|
|
RNA_def_property_pointer_sdna(prop, NULL, "effector_group");
|
|
RNA_def_property_struct_type(prop, "Collection");
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "Effector Collection", "Limit effectors to this collection");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_reset_dependency");
|
|
|
|
prop = RNA_def_property(srna, "fluid_group", PROP_POINTER, PROP_NONE);
|
|
RNA_def_property_pointer_sdna(prop, NULL, "fluid_group");
|
|
RNA_def_property_struct_type(prop, "Collection");
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "Fluid Collection", "Limit fluid objects to this collection");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_reset_dependency");
|
|
|
|
prop = RNA_def_property(srna, "force_collection", PROP_POINTER, PROP_NONE);
|
|
RNA_def_property_pointer_sdna(prop, NULL, "force_group");
|
|
RNA_def_property_struct_type(prop, "Collection");
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "Force Collection", "Limit forces to this collection");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_reset_dependency");
|
|
|
|
/* grid access */
|
|
|
|
# ifdef WITH_FLUID
|
|
prop = RNA_def_property(srna, "density_grid", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_array(prop, 32);
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_FluidModifier_grid_get_length");
|
|
RNA_def_property_float_funcs(prop, "rna_FluidModifier_density_grid_get", NULL, NULL);
|
|
RNA_def_property_ui_text(prop, "Density Grid", "Smoke density grid");
|
|
|
|
prop = RNA_def_property(srna, "velocity_grid", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_array(prop, 32);
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_FluidModifier_velocity_grid_get_length");
|
|
RNA_def_property_float_funcs(prop, "rna_FluidModifier_velocity_grid_get", NULL, NULL);
|
|
RNA_def_property_ui_text(prop, "Velocity Grid", "Smoke velocity grid");
|
|
|
|
prop = RNA_def_property(srna, "flame_grid", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_array(prop, 32);
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_FluidModifier_grid_get_length");
|
|
RNA_def_property_float_funcs(prop, "rna_FluidModifier_flame_grid_get", NULL, NULL);
|
|
RNA_def_property_ui_text(prop, "Flame Grid", "Smoke flame grid");
|
|
|
|
prop = RNA_def_property(srna, "color_grid", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_array(prop, 32);
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_FluidModifier_color_grid_get_length");
|
|
RNA_def_property_float_funcs(prop, "rna_FluidModifier_color_grid_get", NULL, NULL);
|
|
RNA_def_property_ui_text(prop, "Color Grid", "Smoke color grid");
|
|
|
|
prop = RNA_def_property(srna, "heat_grid", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_array(prop, 32);
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_FluidModifier_heat_grid_get_length");
|
|
RNA_def_property_float_funcs(prop, "rna_FluidModifier_heat_grid_get", NULL, NULL);
|
|
RNA_def_property_ui_text(prop, "Heat Grid", "Smoke heat grid");
|
|
|
|
prop = RNA_def_property(srna, "temperature_grid", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_array(prop, 32);
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_FluidModifier_grid_get_length");
|
|
RNA_def_property_float_funcs(prop, "rna_FluidModifier_temperature_grid_get", NULL, NULL);
|
|
RNA_def_property_ui_text(
|
|
prop, "Temperature Grid", "Smoke temperature grid, range 0 to 1 represents 0 to 1000K");
|
|
# endif /* WITH_FLUID */
|
|
|
|
/* domain object data */
|
|
|
|
prop = RNA_def_property(srna,
|
|
"start_point",
|
|
PROP_FLOAT,
|
|
PROP_XYZ); /* can change each frame when using adaptive domain */
|
|
RNA_def_property_float_sdna(prop, NULL, "p0");
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "p0", "Start point");
|
|
|
|
prop = RNA_def_property(srna,
|
|
"cell_size",
|
|
PROP_FLOAT,
|
|
PROP_XYZ); /* can change each frame when using adaptive domain */
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "cell_size", "Cell Size");
|
|
|
|
prop = RNA_def_property(srna,
|
|
"domain_resolution",
|
|
PROP_INT,
|
|
PROP_XYZ); /* can change each frame when using adaptive domain */
|
|
RNA_def_property_int_sdna(prop, NULL, "res");
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "res", "Smoke Grid Resolution");
|
|
|
|
/* adaptive domain options */
|
|
|
|
prop = RNA_def_property(srna, "additional_res", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "adapt_res");
|
|
RNA_def_property_range(prop, 0, 512);
|
|
RNA_def_property_ui_text(prop, "Additional", "Maximum number of additional cells");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "adapt_margin", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "adapt_margin");
|
|
RNA_def_property_range(prop, 2, 24);
|
|
RNA_def_property_ui_text(
|
|
prop, "Margin", "Margin added around fluid to minimize boundary interference");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "adapt_threshold", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 1.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1.0, 0.02, 6);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Threshold",
|
|
"Minimum amount of fluid a cell can contain before it is considered empty");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_adaptive_domain", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_ADAPTIVE_DOMAIN);
|
|
RNA_def_property_ui_text(
|
|
prop, "Adaptive Domain", "Adapt simulation resolution and size to fluid");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_data_reset");
|
|
|
|
/* fluid domain options */
|
|
|
|
prop = RNA_def_property(srna, "resolution_max", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "maxres");
|
|
RNA_def_property_range(prop, 6, 10000);
|
|
RNA_def_property_ui_range(prop, 24, 10000, 2, -1);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Maximum Resolution",
|
|
"Resolution used for the fluid domain. Value corresponds to the longest domain side "
|
|
"(resolution for other domain sides is calculated automatically)");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_data_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_collision_border_front", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "border_collisions", FLUID_DOMAIN_BORDER_FRONT);
|
|
RNA_def_property_ui_text(prop, "Front", "Enable collisions with front domain border");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_collision_border_back", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "border_collisions", FLUID_DOMAIN_BORDER_BACK);
|
|
RNA_def_property_ui_text(prop, "Back", "Enable collisions with back domain border");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_collision_border_right", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "border_collisions", FLUID_DOMAIN_BORDER_RIGHT);
|
|
RNA_def_property_ui_text(prop, "Right", "Enable collisions with right domain border");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_collision_border_left", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "border_collisions", FLUID_DOMAIN_BORDER_LEFT);
|
|
RNA_def_property_ui_text(prop, "Left", "Enable collisions with left domain border");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_collision_border_top", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "border_collisions", FLUID_DOMAIN_BORDER_TOP);
|
|
RNA_def_property_ui_text(prop, "Top", "Enable collisions with top domain border");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_collision_border_bottom", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "border_collisions", FLUID_DOMAIN_BORDER_BOTTOM);
|
|
RNA_def_property_ui_text(prop, "Bottom", "Enable collisions with bottom domain border");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_ACCELERATION);
|
|
RNA_def_property_float_sdna(prop, NULL, "gravity");
|
|
RNA_def_property_array(prop, 3);
|
|
RNA_def_property_range(prop, -1000.1, 1000.1);
|
|
RNA_def_property_ui_text(prop, "Gravity", "Gravity in X, Y and Z direction");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "domain_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "type");
|
|
RNA_def_property_enum_items(prop, domain_types);
|
|
RNA_def_property_enum_funcs(prop, NULL, "rna_Fluid_domaintype_set", NULL);
|
|
RNA_def_property_ui_text(prop, "Domain Type", "Change domain type of the simulation");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_flip_parts_update");
|
|
|
|
prop = RNA_def_property(srna, "delete_in_obstacle", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_DELETE_IN_OBSTACLE);
|
|
RNA_def_property_ui_text(prop, "Clear In Obstacle", "Delete fluid inside obstacles");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
/* smoke domain options */
|
|
|
|
prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "alpha");
|
|
RNA_def_property_range(prop, -5.0, 5.0);
|
|
RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Buoyancy Density",
|
|
"Buoyant force based on smoke density (higher value results in faster rising smoke)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "beta", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "beta");
|
|
RNA_def_property_range(prop, -5.0, 5.0);
|
|
RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Buoyancy Heat",
|
|
"Buoyant force based on smoke heat (higher value results in faster rising smoke)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "dissolve_speed", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "diss_speed");
|
|
RNA_def_property_range(prop, 1.0, 10000.0);
|
|
RNA_def_property_ui_range(prop, 1.0, 10000.0, 1, -1);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Dissolve Speed",
|
|
"Determine how quickly the smoke dissolves (lower value makes smoke disappear faster)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "vorticity", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "vorticity");
|
|
RNA_def_property_range(prop, 0.0, 4.0);
|
|
RNA_def_property_ui_text(prop, "Vorticity", "Amount of turbulence and rotation in smoke");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "highres_sampling", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_items(prop, smoke_highres_sampling_items);
|
|
RNA_def_property_ui_text(prop, "Emitter", "Method for sampling the high resolution flow");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_dissolve_smoke", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_DISSOLVE);
|
|
RNA_def_property_ui_text(prop, "Dissolve Smoke", "Let smoke disappear over time");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_dissolve_smoke_log", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_DISSOLVE_LOG);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Logarithmic Dissolve",
|
|
"Dissolve smoke in a logarithmic fashion. Dissolves quickly at first, but lingers longer");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
/* flame options */
|
|
|
|
prop = RNA_def_property(srna, "burning_rate", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.01, 4.0);
|
|
RNA_def_property_ui_range(prop, 0.01, 2.0, 1.0, 5);
|
|
RNA_def_property_ui_text(
|
|
prop, "Speed", "Speed of the burning reaction (higher value results in smaller flames)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "flame_smoke", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 8.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 4.0, 1.0, 5);
|
|
RNA_def_property_ui_text(prop, "Smoke", "Amount of smoke created by burning fuel");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "flame_vorticity", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 2.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1.0, 1.0, 5);
|
|
RNA_def_property_ui_text(prop, "Vorticity", "Additional vorticity for the flames");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "flame_ignition", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.5, 5.0);
|
|
RNA_def_property_ui_range(prop, 0.5, 2.5, 1.0, 5);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Minimum",
|
|
"Minimum temperature of the flames (higher value results in faster rising flames)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "flame_max_temp", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 1.0, 10.0);
|
|
RNA_def_property_ui_range(prop, 1.0, 5.0, 1.0, 5);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Maximum",
|
|
"Maximum temperature of the flames (higher value results in faster rising flames)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "flame_smoke_color", PROP_FLOAT, PROP_COLOR_GAMMA);
|
|
RNA_def_property_array(prop, 3);
|
|
RNA_def_property_ui_text(prop, "Smoke Color", "Color of smoke emitted from burning fuel");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
/* noise options */
|
|
|
|
prop = RNA_def_property(srna, "noise_strength", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "noise_strength");
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 10.0, 1, 2);
|
|
RNA_def_property_ui_text(prop, "Strength", "Strength of noise");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_noisecache_reset");
|
|
|
|
prop = RNA_def_property(srna, "noise_pos_scale", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "noise_pos_scale");
|
|
RNA_def_property_range(prop, 0.0001, 10.0);
|
|
RNA_def_property_ui_text(
|
|
prop, "Scale", "Scale of noise (higher value results in larger vortices)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_noisecache_reset");
|
|
|
|
prop = RNA_def_property(srna, "noise_time_anim", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "noise_time_anim");
|
|
RNA_def_property_range(prop, 0.0001, 10.0);
|
|
RNA_def_property_ui_text(prop, "Time", "Animation time of noise");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_noisecache_reset");
|
|
|
|
prop = RNA_def_property(srna, "noise_scale", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "noise_scale");
|
|
RNA_def_property_range(prop, 1, 100);
|
|
RNA_def_property_ui_range(prop, 1, 10, 1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Noise Scale",
|
|
"The noise simulation is scaled up by this factor (compared to the "
|
|
"base resolution of the domain)");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_noise_reset");
|
|
|
|
prop = RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "noise_type");
|
|
RNA_def_property_enum_items(prop, prop_noise_type_items);
|
|
RNA_def_property_ui_text(
|
|
prop, "Noise Method", "Noise method which is used during the high-res simulation");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_noise_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_noise", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_NOISE);
|
|
RNA_def_property_ui_text(prop, "Use Noise", "Enable fluid noise (using amplification)");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_update");
|
|
|
|
/* liquid domain options */
|
|
|
|
prop = RNA_def_property(srna, "simulation_method", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "simulation_method");
|
|
RNA_def_property_enum_items(prop, simulation_methods);
|
|
RNA_def_property_ui_text(prop, "Simulation Method", "Change the underlying simulation method");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_data_reset");
|
|
|
|
prop = RNA_def_property(srna, "flip_ratio", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 1.0);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"FLIP Ratio",
|
|
"PIC/FLIP Ratio. A value of 1.0 will result in a completely FLIP based simulation. Use a "
|
|
"lower value for simulations which should produce smaller splashes");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_randomness", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_text(prop, "Randomness", "Randomness factor for particle sampling");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_number", PROP_INT, PROP_NONE);
|
|
RNA_def_property_range(prop, 1, 5);
|
|
RNA_def_property_ui_text(
|
|
prop, "Number", "Particle number factor (higher value results in more particles)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_min", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "particle_minimum");
|
|
RNA_def_property_range(prop, 0, 1000);
|
|
RNA_def_property_ui_text(prop,
|
|
"Minimum",
|
|
"Minimum number of particles per cell (ensures that each cell has at "
|
|
"least this amount of particles)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_max", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "particle_maximum");
|
|
RNA_def_property_range(prop, 0, 1000);
|
|
RNA_def_property_ui_text(prop,
|
|
"Maximum",
|
|
"Maximum number of particles per cell (ensures that each cell has at "
|
|
"most this amount of particles)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_radius", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_text(prop,
|
|
"Radius",
|
|
"Particle radius factor. Increase this value if the simulation appears "
|
|
"to leak volume, decrease it if the simulation seems to gain volume");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_band_width", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Width",
|
|
"Particle (narrow) band width (higher value results in thicker band and more particles)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_flip_particles", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_FLIP);
|
|
RNA_def_property_ui_text(prop, "FLIP", "Create liquid particle system");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_flip_parts_update");
|
|
|
|
prop = RNA_def_property(srna, "use_fractions", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_FRACTIONS);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Fractional Obstacles",
|
|
"Fractional obstacles improve and smoothen the fluid-obstacle boundary");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "fractions_threshold", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.001, 1.0);
|
|
RNA_def_property_ui_range(prop, 0.01, 1.0, 0.05, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Obstacle Threshold",
|
|
"Determines how much fluid is allowed in an obstacle cell "
|
|
"(higher values will tag a boundary cell as an obstacle easier "
|
|
"and reduce the boundary smoothening effect)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "fractions_distance", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, -5.0, 5.0);
|
|
RNA_def_property_ui_range(prop, 0.01, 5.0, 0.1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Obstacle Distance",
|
|
"Determines how far apart fluid and obstacle are (higher values will "
|
|
"result in fluid being further away from obstacles, smaller values "
|
|
"will let fluid move towards the inside of obstacles)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sys_particle_maximum", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "sys_particle_maximum");
|
|
RNA_def_property_range(prop, 0, INT_MAX);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"System Maximum",
|
|
"Maximum number of fluid particles that are allowed in this simulation");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
/* viscosity options */
|
|
|
|
prop = RNA_def_property(srna, "use_viscosity", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_VISCOSITY);
|
|
RNA_def_property_ui_text(prop, "Use Viscosity", "Enable fluid viscosity settings");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "viscosity_value", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 5.0, 1.0, 3);
|
|
RNA_def_property_ui_text(prop,
|
|
"Strength",
|
|
"Viscosity of liquid (higher values result in more viscous fluids, a "
|
|
"value of 0 will still apply some viscosity)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
/* diffusion options */
|
|
|
|
prop = RNA_def_property(srna, "use_diffusion", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_DIFFUSION);
|
|
RNA_def_property_ui_text(
|
|
prop, "Use Diffusion", "Enable fluid diffusion settings (e.g. viscosity, surface tension)");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "surface_tension", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 100.0);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Tension",
|
|
"Surface tension of liquid (higher value results in greater hydrophobic behavior)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "viscosity_base", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "viscosity_base");
|
|
RNA_def_property_range(prop, 0, 10);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Viscosity Base",
|
|
"Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "viscosity_exponent", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "viscosity_exponent");
|
|
RNA_def_property_range(prop, 0, 10);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Viscosity Exponent",
|
|
"Negative exponent for the viscosity value (to simplify entering small values "
|
|
"e.g. 5*10^-6)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
/* mesh options options */
|
|
|
|
prop = RNA_def_property(srna, "mesh_concave_upper", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Upper Concavity",
|
|
"Upper mesh concavity bound (high values tend to smoothen and fill out concave regions)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_meshcache_reset");
|
|
|
|
prop = RNA_def_property(srna, "mesh_concave_lower", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Lower Concavity",
|
|
"Lower mesh concavity bound (high values tend to smoothen and fill out concave regions)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_meshcache_reset");
|
|
|
|
prop = RNA_def_property(srna, "mesh_smoothen_pos", PROP_INT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0, 100);
|
|
RNA_def_property_ui_text(prop, "Smoothen Pos", "Positive mesh smoothening");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_meshcache_reset");
|
|
|
|
prop = RNA_def_property(srna, "mesh_smoothen_neg", PROP_INT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0, 100);
|
|
RNA_def_property_ui_text(prop, "Smoothen Neg", "Negative mesh smoothening");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_meshcache_reset");
|
|
|
|
prop = RNA_def_property(srna, "mesh_scale", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "mesh_scale");
|
|
RNA_def_property_range(prop, 1, 100);
|
|
RNA_def_property_ui_range(prop, 1, 10, 1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Mesh scale",
|
|
"The mesh simulation is scaled up by this factor (compared to the base "
|
|
"resolution of the domain). For best meshing, it is recommended to "
|
|
"adjust the mesh particle radius alongside this value");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_mesh_reset");
|
|
|
|
prop = RNA_def_property(srna, "mesh_generator", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "mesh_generator");
|
|
RNA_def_property_enum_items(prop, fluid_mesh_quality_items);
|
|
RNA_def_property_ui_text(prop, "Mesh generator", "Which particle level set generator to use");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_update");
|
|
|
|
prop = RNA_def_property(srna, "mesh_vertices", PROP_COLLECTION, PROP_NONE);
|
|
RNA_def_property_collection_sdna(prop, NULL, "mesh_velocities", "totvert");
|
|
RNA_def_property_struct_type(prop, "FluidDomainVertexVelocity");
|
|
RNA_def_property_ui_text(
|
|
prop, "Fluid Mesh Vertices", "Vertices of the fluid mesh generated by simulation");
|
|
|
|
rna_def_fluid_mesh_vertices(brna);
|
|
|
|
prop = RNA_def_property(srna, "use_mesh", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_MESH);
|
|
RNA_def_property_ui_text(prop, "Use Mesh", "Enable fluid mesh (using amplification)");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_update");
|
|
|
|
prop = RNA_def_property(srna, "use_speed_vectors", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_SPEED_VECTORS);
|
|
RNA_def_property_ui_text(prop,
|
|
"Speed Vectors",
|
|
"Caches velocities of mesh vertices. These will be used "
|
|
"(automatically) when rendering with motion blur enabled");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_meshcache_reset");
|
|
|
|
prop = RNA_def_property(srna, "mesh_particle_radius", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_text(prop,
|
|
"Radius",
|
|
"Particle radius factor (higher value results in larger (meshed) "
|
|
"particles). Needs to be adjusted after changing the mesh scale");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_meshcache_reset");
|
|
|
|
/* secondary particles options */
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_potential_min_wavecrest", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_tau_min_wc");
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1000.0, 100.0, 3);
|
|
RNA_def_property_ui_text(prop,
|
|
"Minimum Wave Crest Potential",
|
|
"Lower clamping threshold for marking fluid cells as wave crests "
|
|
"(lower value results in more marked cells)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_potential_max_wavecrest", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_tau_max_wc");
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1000.0, 100.0, 3);
|
|
RNA_def_property_ui_text(prop,
|
|
"Maximum Wave Crest Potential",
|
|
"Upper clamping threshold for marking fluid cells as wave crests "
|
|
"(higher value results in less marked cells)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_potential_min_trappedair", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_tau_min_ta");
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 10000.0, 100.0, 3);
|
|
RNA_def_property_ui_text(prop,
|
|
"Minimum Trapped Air Potential",
|
|
"Lower clamping threshold for marking fluid cells where air is trapped "
|
|
"(lower value results in more marked cells)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_potential_max_trappedair", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_tau_max_ta");
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1000.0, 100.0, 3);
|
|
RNA_def_property_ui_text(prop,
|
|
"Maximum Trapped Air Potential",
|
|
"Upper clamping threshold for marking fluid cells where air is trapped "
|
|
"(higher value results in less marked cells)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_potential_min_energy", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_tau_min_k");
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1000.0, 100.0, 3);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Minimum Kinetic Energy Potential",
|
|
"Lower clamping threshold that indicates the fluid speed where cells start to emit "
|
|
"particles (lower values result in generally more particles)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_potential_max_energy", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_tau_max_k");
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1000.0, 100.0, 3);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Maximum Kinetic Energy Potential",
|
|
"Upper clamping threshold that indicates the fluid speed where cells no longer emit more "
|
|
"particles (higher value results in generally less particles)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_sampling_wavecrest", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "sndparticle_k_wc");
|
|
RNA_def_property_range(prop, 0, 10000);
|
|
RNA_def_property_ui_range(prop, 0, 10000, 1.0, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Wave Crest Sampling",
|
|
"Maximum number of particles generated per wave crest cell per frame");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_sampling_trappedair", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "sndparticle_k_ta");
|
|
RNA_def_property_range(prop, 0, 10000);
|
|
RNA_def_property_ui_range(prop, 0, 10000, 1.0, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Trapped Air Sampling",
|
|
"Maximum number of particles generated per trapped air cell per frame");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_bubble_buoyancy", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_k_b");
|
|
RNA_def_property_range(prop, 0.0, 100.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 100.0, 10.0, 2);
|
|
RNA_def_property_ui_text(prop,
|
|
"Bubble Buoyancy",
|
|
"Amount of buoyancy force that rises bubbles (high value results in "
|
|
"bubble movement mainly upwards)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_bubble_drag", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_k_d");
|
|
RNA_def_property_range(prop, 0.0, 100.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 100.0, 10.0, 2);
|
|
RNA_def_property_ui_text(prop,
|
|
"Bubble Drag",
|
|
"Amount of drag force that moves bubbles along with the fluid (high "
|
|
"value results in bubble movement mainly along with the fluid)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_life_min", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_l_min");
|
|
RNA_def_property_range(prop, 0.0, 10000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 10000.0, 100.0, 1);
|
|
RNA_def_property_ui_text(prop, "Minimum Lifetime", "Lowest possible particle lifetime");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_life_max", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "sndparticle_l_max");
|
|
RNA_def_property_range(prop, 0.0, 10000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 10000.0, 100.0, 1);
|
|
RNA_def_property_ui_text(prop, "Maximum Lifetime", "Highest possible particle lifetime");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_boundary", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "sndparticle_boundary");
|
|
RNA_def_property_enum_items(prop, sndparticle_boundary_items);
|
|
RNA_def_property_ui_text(
|
|
prop, "Particles in Boundary", "How particles that left the domain are treated");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_combined_export", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "sndparticle_combined_export");
|
|
RNA_def_property_enum_items(prop, sndparticle_combined_export_items);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Combined Export",
|
|
"Determines which particle systems are created from secondary particles");
|
|
RNA_def_property_update(prop, 0, "rna_Fluid_combined_export_update");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_potential_radius", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "sndparticle_potential_radius");
|
|
RNA_def_property_range(prop, 1, 4);
|
|
RNA_def_property_ui_range(prop, 1, 4, 1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Potential Radius",
|
|
"Radius to compute potential for each cell (higher values are slower "
|
|
"but create smoother potential grids)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "sndparticle_update_radius", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "sndparticle_update_radius");
|
|
RNA_def_property_range(prop, 1, 4);
|
|
RNA_def_property_ui_range(prop, 1, 4, 1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Update Radius",
|
|
"Radius to compute position update for each particle (higher values "
|
|
"are slower but particles move less chaotic)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_scale", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "particle_scale");
|
|
RNA_def_property_range(prop, 1, 100);
|
|
RNA_def_property_ui_range(prop, 1, 10, 1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Particle scale",
|
|
"The particle simulation is scaled up by this factor (compared to the "
|
|
"base resolution of the domain)");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_particles_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_spray_particles", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_SPRAY);
|
|
RNA_def_property_ui_text(prop, "Spray", "Create spray particle system");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_spray_parts_update");
|
|
|
|
prop = RNA_def_property(srna, "use_bubble_particles", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_BUBBLE);
|
|
RNA_def_property_ui_text(prop, "Bubble", "Create bubble particle system");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_bubble_parts_update");
|
|
|
|
prop = RNA_def_property(srna, "use_foam_particles", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_FOAM);
|
|
RNA_def_property_ui_text(prop, "Foam", "Create foam particle system");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_foam_parts_update");
|
|
|
|
prop = RNA_def_property(srna, "use_tracer_particles", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_TRACER);
|
|
RNA_def_property_ui_text(prop, "Tracer", "Create tracer particle system");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_tracer_parts_update");
|
|
|
|
/* fluid guiding options */
|
|
|
|
prop = RNA_def_property(srna, "guide_alpha", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "guide_alpha");
|
|
RNA_def_property_range(prop, 1.0, 100.0);
|
|
RNA_def_property_ui_text(prop, "Weight", "Guiding weight (higher value results in greater lag)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "guide_beta", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "guide_beta");
|
|
RNA_def_property_range(prop, 1, 50);
|
|
RNA_def_property_ui_text(prop, "Size", "Guiding size (higher value results in larger vortices)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "guide_vel_factor", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "guide_vel_factor");
|
|
RNA_def_property_range(prop, 0.0, 100.0);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Velocity Factor",
|
|
"Guiding velocity factor (higher value results in greater guiding velocities)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "guide_source", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "guide_source");
|
|
RNA_def_property_enum_items(prop, fluid_guide_source_items);
|
|
RNA_def_property_ui_text(prop, "Guiding source", "Choose where to get guiding velocities from");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_update");
|
|
|
|
prop = RNA_def_property(srna, "guide_parent", PROP_POINTER, PROP_NONE);
|
|
RNA_def_property_pointer_sdna(prop, NULL, "guide_parent");
|
|
RNA_def_property_struct_type(prop, "Object");
|
|
RNA_def_property_pointer_funcs(prop, NULL, "rna_Fluid_guide_parent_set", NULL, NULL);
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop,
|
|
"",
|
|
"Use velocities from this object for the guiding effect (object needs "
|
|
"to have fluid modifier and be of type domain))");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_guidingcache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_guide", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_GUIDE);
|
|
RNA_def_property_ui_text(prop, "Use Guiding", "Enable fluid guiding");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_update");
|
|
|
|
/* cache options */
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_start", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_start");
|
|
RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
|
|
RNA_def_property_int_funcs(prop, NULL, "rna_Fluid_cache_startframe_set", NULL);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Start",
|
|
"Frame on which the simulation starts. This is the first frame that will be baked");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_end", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_end");
|
|
RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
|
|
RNA_def_property_int_funcs(prop, NULL, "rna_Fluid_cache_endframe_set", NULL);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"End",
|
|
"Frame on which the simulation stops. This is the last frame that will be baked");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_offset", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_offset");
|
|
RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Offset",
|
|
"Frame offset that is used when loading the simulation from the cache. It is not considered "
|
|
"when baking the simulation, only when loading it");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_pause_data", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_pause_data");
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_pause_noise", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_pause_noise");
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_pause_mesh", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_pause_mesh");
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_pause_particles", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_pause_particles");
|
|
|
|
prop = RNA_def_property(srna, "cache_frame_pause_guide", PROP_INT, PROP_TIME);
|
|
RNA_def_property_int_sdna(prop, NULL, "cache_frame_pause_guide");
|
|
|
|
prop = RNA_def_property(srna, "cache_mesh_format", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "cache_mesh_format");
|
|
RNA_def_property_enum_items(prop, cache_file_type_items);
|
|
RNA_def_property_enum_funcs(
|
|
prop, NULL, "rna_Fluid_cachetype_mesh_set", "rna_Fluid_cachetype_mesh_itemf");
|
|
RNA_def_property_ui_text(
|
|
prop, "File Format", "Select the file format to be used for caching surface data");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_meshcache_reset");
|
|
|
|
prop = RNA_def_property(srna, "cache_data_format", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "cache_data_format");
|
|
RNA_def_property_enum_items(prop, cache_file_type_items);
|
|
RNA_def_property_enum_funcs(
|
|
prop, NULL, "rna_Fluid_cachetype_data_set", "rna_Fluid_cachetype_volume_itemf");
|
|
RNA_def_property_ui_text(
|
|
prop, "File Format", "Select the file format to be used for caching volumetric data");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "cache_particle_format", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "cache_particle_format");
|
|
RNA_def_property_enum_items(prop, cache_file_type_items);
|
|
RNA_def_property_enum_funcs(
|
|
prop, NULL, "rna_Fluid_cachetype_particle_set", "rna_Fluid_cachetype_particle_itemf");
|
|
RNA_def_property_ui_text(
|
|
prop, "File Format", "Select the file format to be used for caching particle data");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_particlescache_reset");
|
|
|
|
prop = RNA_def_property(srna, "cache_noise_format", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "cache_noise_format");
|
|
RNA_def_property_enum_items(prop, cache_file_type_items);
|
|
RNA_def_property_enum_funcs(
|
|
prop, NULL, "rna_Fluid_cachetype_noise_set", "rna_Fluid_cachetype_volume_itemf");
|
|
RNA_def_property_ui_text(
|
|
prop, "File Format", "Select the file format to be used for caching noise data");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_noisecache_reset");
|
|
|
|
prop = RNA_def_property(srna, "cache_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "cache_type");
|
|
RNA_def_property_enum_items(prop, cache_types);
|
|
RNA_def_property_enum_funcs(prop, NULL, "rna_Fluid_cachetype_set", NULL);
|
|
RNA_def_property_ui_text(prop, "Type", "Change the cache type of the simulation");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_domain_data_reset");
|
|
|
|
prop = RNA_def_property(srna, "cache_resumable", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_RESUMABLE_CACHE);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Resumable",
|
|
"Additional data will be saved so that the bake jobs can be resumed after pausing. Because "
|
|
"more data will be written to disk it is recommended to avoid enabling this option when "
|
|
"baking at high resolutions");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "cache_directory", PROP_STRING, PROP_DIRPATH);
|
|
RNA_def_property_string_maxlength(prop, FILE_MAX);
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Fluid_cache_directory_set");
|
|
RNA_def_property_string_sdna(prop, NULL, "cache_directory");
|
|
RNA_def_property_ui_text(prop, "Cache directory", "Directory that contains fluid cache files");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_update");
|
|
|
|
prop = RNA_def_property(srna, "is_cache_baking_data", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKING_DATA);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "has_cache_baked_data", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKED_DATA);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "is_cache_baking_noise", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKING_NOISE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "has_cache_baked_noise", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKED_NOISE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "is_cache_baking_mesh", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKING_MESH);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "has_cache_baked_mesh", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKED_MESH);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "is_cache_baking_particles", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKING_PARTICLES);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "has_cache_baked_particles", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKED_PARTICLES);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "is_cache_baking_guide", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKING_GUIDE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "has_cache_baked_guide", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKED_GUIDE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
/* Read only checks, avoids individually accessing flags above. */
|
|
prop = RNA_def_property(srna, "is_cache_baking_any", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKING_ALL);
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
|
|
prop = RNA_def_property(srna, "has_cache_baked_any", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", FLUID_DOMAIN_BAKED_ALL);
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
|
|
prop = RNA_def_property(srna, "export_manta_script", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_EXPORT_MANTA_SCRIPT);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Export Mantaflow Script",
|
|
"Generate and export Mantaflow script from current domain settings during bake. This is "
|
|
"only needed if you plan to analyze the cache (e.g. view grids, velocity vectors, "
|
|
"particles) in Mantaflow directly (outside of Blender) after baking the simulation");
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_data_reset");
|
|
|
|
prop = RNA_def_property(srna, "openvdb_cache_compress_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "openvdb_compression");
|
|
RNA_def_property_enum_items(prop, prop_compression_items);
|
|
RNA_def_property_ui_text(prop, "Compression", "Compression method to be used");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_data_reset");
|
|
|
|
prop = RNA_def_property(srna, "openvdb_data_depth", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "openvdb_data_depth");
|
|
RNA_def_property_enum_items(prop, fluid_data_depth_items);
|
|
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Fluid_data_depth_itemf");
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Data Depth",
|
|
"Bit depth for fluid particles and grids (lower bit values reduce file size)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_data_reset");
|
|
|
|
/* time options */
|
|
|
|
prop = RNA_def_property(srna, "time_scale", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "time_scale");
|
|
RNA_def_property_range(prop, 0.0001, 10.0);
|
|
RNA_def_property_ui_text(prop, "Time Scale", "Adjust simulation speed");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "cfl_condition", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "cfl_condition");
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_text(
|
|
prop, "CFL", "Maximal velocity per cell (higher value results in greater timesteps)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_adaptive_timesteps", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_ADAPTIVE_TIME);
|
|
RNA_def_property_ui_text(prop, "Use Adaptive Time Steps", "");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "timesteps_min", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "timesteps_minimum");
|
|
RNA_def_property_range(prop, 1, 100);
|
|
RNA_def_property_ui_range(prop, 0, 100, 1, -1);
|
|
RNA_def_property_ui_text(
|
|
prop, "Minimum", "Minimum number of simulation steps to perform for one frame");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
prop = RNA_def_property(srna, "timesteps_max", PROP_INT, PROP_NONE);
|
|
RNA_def_property_int_sdna(prop, NULL, "timesteps_maximum");
|
|
RNA_def_property_range(prop, 1, 100);
|
|
RNA_def_property_ui_range(prop, 0, 100, 1, -1);
|
|
RNA_def_property_ui_text(
|
|
prop, "Maximum", "Maximum number of simulation steps to perform for one frame");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_datacache_reset");
|
|
|
|
/* display settings */
|
|
|
|
prop = RNA_def_property(srna, "use_slice", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "axis_slice_method", AXIS_SLICE_SINGLE);
|
|
RNA_def_property_ui_text(prop, "Slice", "Perform a single slice of the domain object");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "slice_axis", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "slice_axis");
|
|
RNA_def_property_enum_items(prop, axis_slice_position_items);
|
|
RNA_def_property_ui_text(prop, "Axis", "");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "slice_per_voxel", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "slice_per_voxel");
|
|
RNA_def_property_range(prop, 0.0, 100.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 5.0, 0.1, 1);
|
|
RNA_def_property_ui_text(
|
|
prop, "Slice Per Voxel", "How many slices per voxel should be generated");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "slice_depth", PROP_FLOAT, PROP_FACTOR);
|
|
RNA_def_property_float_sdna(prop, NULL, "slice_depth");
|
|
RNA_def_property_range(prop, 0.0, 1.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 3);
|
|
RNA_def_property_ui_text(prop, "Position", "Position of the slice");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "display_thickness", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "display_thickness");
|
|
RNA_def_property_range(prop, 0.001, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.1, 100.0, 0.1, 3);
|
|
RNA_def_property_ui_text(prop, "Thickness", "Thickness of smoke display in the viewport");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "display_interpolation", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "interp_method");
|
|
RNA_def_property_enum_items(prop, interp_method_item);
|
|
RNA_def_property_ui_text(
|
|
prop, "Interpolation", "Interpolation method to use for smoke/fire volumes in solid mode");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "show_gridlines", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "show_gridlines", 0);
|
|
RNA_def_property_ui_text(prop, "Gridlines", "Show gridlines");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "show_velocity", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "draw_velocity", 0);
|
|
RNA_def_property_ui_text(prop, "Vector Display", "Visualize vector fields");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "vector_display_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "vector_draw_type");
|
|
RNA_def_property_enum_items(prop, vector_draw_items);
|
|
RNA_def_property_ui_text(prop, "Display Type", "");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "vector_field", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "vector_field");
|
|
RNA_def_property_enum_items(prop, vector_field_items);
|
|
RNA_def_property_ui_text(prop, "Field", "Vector field to be represented by the display vectors");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "vector_scale_with_magnitude", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "vector_scale_with_magnitude", 0);
|
|
RNA_def_property_ui_text(prop, "Magnitude", "Scale vectors with their magnitudes");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "vector_show_mac_x", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "vector_draw_mac_components", VECTOR_DRAW_MAC_X);
|
|
RNA_def_property_ui_text(prop, "X", "Show X-component of MAC Grid");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "vector_show_mac_y", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "vector_draw_mac_components", VECTOR_DRAW_MAC_Y);
|
|
RNA_def_property_ui_text(prop, "Y", "Show Y-component of MAC Grid");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "vector_show_mac_z", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "vector_draw_mac_components", VECTOR_DRAW_MAC_Z);
|
|
RNA_def_property_ui_text(prop, "Z", "Show Z-component of MAC Grid");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "vector_scale", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "vector_scale");
|
|
RNA_def_property_range(prop, 0.0, 1000.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 100.0, 0.1, 3);
|
|
RNA_def_property_ui_text(prop, "Scale", "Multiplier for scaling the vectors");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
/* --------- Color mapping. --------- */
|
|
|
|
prop = RNA_def_property(srna, "use_color_ramp", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "use_coba", 0);
|
|
RNA_def_property_boolean_funcs(prop, NULL, "rna_Fluid_use_color_ramp_set");
|
|
RNA_def_property_ui_text(prop,
|
|
"Grid Display",
|
|
"Render a simulation field while mapping its voxels values to the "
|
|
"colors of a ramp or using a predefined color code");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
/* Coba field items - generated dynamically based on domain type */
|
|
static const EnumPropertyItem coba_field_items[] = {
|
|
{0, "NONE", 0, "", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
prop = RNA_def_property(srna, "color_ramp_field", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "coba_field");
|
|
RNA_def_property_enum_items(prop, coba_field_items);
|
|
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Fluid_cobafield_itemf");
|
|
RNA_def_property_ui_text(prop, "Field", "Simulation field to color map");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "color_ramp_field_scale", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "grid_scale");
|
|
RNA_def_property_range(prop, 0.001, 100000.0);
|
|
RNA_def_property_ui_range(prop, 0.001, 1000.0, 0.1, 3);
|
|
RNA_def_property_ui_text(
|
|
prop, "Scale", "Multiplier for scaling the selected field to color map");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NEVER_NULL);
|
|
RNA_def_property_pointer_sdna(prop, NULL, "coba");
|
|
RNA_def_property_struct_type(prop, "ColorRamp");
|
|
RNA_def_property_ui_text(prop, "Color Ramp", "");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "clipping", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "clipping");
|
|
RNA_def_property_range(prop, 0.0, 1.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 6);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Clipping",
|
|
"Value under which voxels are considered empty space to optimize rendering");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "gridlines_color_field", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "gridlines_color_field");
|
|
RNA_def_property_enum_items(prop, gridlines_color_field_items);
|
|
RNA_def_property_ui_text(
|
|
prop, "Color Gridlines", "Simulation field to color map onto gridlines");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
|
|
prop = RNA_def_property(srna, "gridlines_lower_bound", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "gridlines_lower_bound");
|
|
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
|
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 0.1, 6);
|
|
RNA_def_property_ui_text(prop, "Lower Bound", "Lower bound of the highlighting range");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "gridlines_upper_bound", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "gridlines_upper_bound");
|
|
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
|
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 0.1, 6);
|
|
RNA_def_property_ui_text(prop, "Upper Bound", "Upper bound of the highlighting range");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "gridlines_range_color", PROP_FLOAT, PROP_COLOR);
|
|
RNA_def_property_float_sdna(prop, NULL, "gridlines_range_color");
|
|
RNA_def_property_array(prop, 4);
|
|
RNA_def_property_ui_text(prop, "Color", "Color used to highlight the range");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
|
|
|
prop = RNA_def_property(srna, "gridlines_cell_filter", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "gridlines_cell_filter");
|
|
RNA_def_property_enum_items(prop, gridlines_cell_filter_items);
|
|
RNA_def_property_ui_text(prop, "Cell Type", "Cell type to be highlighted");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
}
|
|
|
|
static void rna_def_fluid_flow_settings(BlenderRNA *brna)
|
|
{
|
|
StructRNA *srna;
|
|
PropertyRNA *prop;
|
|
|
|
static const EnumPropertyItem flow_type_items[] = {
|
|
{FLUID_FLOW_TYPE_SMOKE, "SMOKE", 0, "Smoke", "Add smoke"},
|
|
{FLUID_FLOW_TYPE_SMOKEFIRE, "BOTH", 0, "Fire + Smoke", "Add fire and smoke"},
|
|
{FLUID_FLOW_TYPE_FIRE, "FIRE", 0, "Fire", "Add fire"},
|
|
{FLUID_FLOW_TYPE_LIQUID, "LIQUID", 0, "Liquid", "Add liquid"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static EnumPropertyItem flow_behavior_items[] = {
|
|
{FLUID_FLOW_BEHAVIOR_INFLOW, "INFLOW", 0, "Inflow", "Add fluid to simulation"},
|
|
{FLUID_FLOW_BEHAVIOR_OUTFLOW, "OUTFLOW", 0, "Outflow", "Delete fluid from simulation"},
|
|
{FLUID_FLOW_BEHAVIOR_GEOMETRY,
|
|
"GEOMETRY",
|
|
0,
|
|
"Geometry",
|
|
"Only use given geometry for fluid"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
/* Flow source - generated dynamically based on flow type */
|
|
static EnumPropertyItem flow_sources[] = {
|
|
{0, "NONE", 0, "", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static const EnumPropertyItem flow_texture_types[] = {
|
|
{FLUID_FLOW_TEXTURE_MAP_AUTO,
|
|
"AUTO",
|
|
0,
|
|
"Generated",
|
|
"Generated coordinates centered to flow object"},
|
|
{FLUID_FLOW_TEXTURE_MAP_UV, "UV", 0, "UV", "Use UV layer for texture coordinates"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
srna = RNA_def_struct(brna, "FluidFlowSettings", NULL);
|
|
RNA_def_struct_ui_text(srna, "Flow Settings", "Fluid flow settings");
|
|
RNA_def_struct_sdna(srna, "FluidFlowSettings");
|
|
RNA_def_struct_path_func(srna, "rna_FluidFlowSettings_path");
|
|
|
|
prop = RNA_def_property(srna, "density", PROP_FLOAT, PROP_FACTOR);
|
|
RNA_def_property_float_sdna(prop, NULL, "density");
|
|
RNA_def_property_range(prop, 0.0, 10);
|
|
RNA_def_property_ui_range(prop, 0.0, 1.0, 1.0, 4);
|
|
RNA_def_property_ui_text(prop, "Density", "");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "smoke_color", PROP_FLOAT, PROP_COLOR_GAMMA);
|
|
RNA_def_property_float_sdna(prop, NULL, "color");
|
|
RNA_def_property_array(prop, 3);
|
|
RNA_def_property_ui_text(prop, "Smoke Color", "Color of smoke");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "fuel_amount", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10);
|
|
RNA_def_property_ui_range(prop, 0.0, 5.0, 1.0, 4);
|
|
RNA_def_property_ui_text(prop, "Flame Rate", "");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "temperature", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "temperature");
|
|
RNA_def_property_range(prop, -10, 10);
|
|
RNA_def_property_ui_range(prop, -10, 10, 1, 1);
|
|
RNA_def_property_ui_text(prop, "Temp. Diff.", "Temperature difference to ambient temperature");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
|
|
RNA_def_property_pointer_sdna(prop, NULL, "psys");
|
|
RNA_def_property_struct_type(prop, "ParticleSystem");
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "Particle Systems", "Particle systems emitted from the object");
|
|
RNA_def_property_update(prop, 0, "rna_Fluid_reset_dependency");
|
|
|
|
prop = RNA_def_property(srna, "flow_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "type");
|
|
RNA_def_property_enum_items(prop, flow_type_items);
|
|
RNA_def_property_enum_funcs(prop, NULL, "rna_Fluid_flowtype_set", NULL);
|
|
RNA_def_property_ui_text(prop, "Flow Type", "Change type of fluid in the simulation");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "flow_behavior", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "behavior");
|
|
RNA_def_property_enum_items(prop, flow_behavior_items);
|
|
RNA_def_property_ui_text(prop, "Flow Behavior", "Change flow behavior in the simulation");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "flow_source", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "source");
|
|
RNA_def_property_enum_items(prop, flow_sources);
|
|
RNA_def_property_enum_funcs(
|
|
prop, NULL, "rna_Fluid_flowsource_set", "rna_Fluid_flowsource_itemf");
|
|
RNA_def_property_ui_text(prop, "Source", "Change how fluid is emitted");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_absolute", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_FLOW_ABSOLUTE);
|
|
RNA_def_property_ui_text(prop,
|
|
"Absolute Density",
|
|
"Only allow given density value in emitter area and will not add up");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_initial_velocity", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_FLOW_INITVELOCITY);
|
|
RNA_def_property_ui_text(
|
|
prop, "Initial Velocity", "Fluid has some initial velocity when it is emitted");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_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_range(prop, -2.0, 2.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop,
|
|
"Source",
|
|
"Multiplier of source velocity passed to fluid (source velocity is "
|
|
"non-zero only if object is moving)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "velocity_normal", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "vel_normal");
|
|
RNA_def_property_range(prop, -100.0, 100.0);
|
|
RNA_def_property_ui_range(prop, -2.0, 2.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop, "Normal", "Amount of normal directional velocity");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "velocity_random", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_float_sdna(prop, NULL, "vel_random");
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 2.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop, "Random", "Amount of random velocity");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "velocity_coord", PROP_FLOAT, PROP_VELOCITY);
|
|
RNA_def_property_float_sdna(prop, NULL, "vel_coord");
|
|
RNA_def_property_array(prop, 3);
|
|
RNA_def_property_range(prop, -1000.1, 1000.1);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Initial",
|
|
"Additional initial velocity in X, Y and Z direction (added to source velocity)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "volume_density", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 1.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 1.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop,
|
|
"Volume Emission",
|
|
"Controls fluid emission from within the mesh (higher value results in "
|
|
"greater emissions from inside the mesh)");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "surface_distance", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 10.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop,
|
|
"Surface Emission",
|
|
"Controls fluid emission from the mesh surface (higher value results "
|
|
"in emission further away from the mesh surface");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_plane_init", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_FLOW_USE_PLANE_INIT);
|
|
RNA_def_property_ui_text(
|
|
prop,
|
|
"Is Planar",
|
|
"Treat this object as a planar and unclosed mesh. Fluid will only be emitted from the mesh "
|
|
"surface and based on the surface emission value");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "particle_size", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.1, FLT_MAX);
|
|
RNA_def_property_ui_range(prop, 0.5, 5.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop, "Size", "Particle size in simulation cells");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_particle_size", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_FLOW_USE_PART_SIZE);
|
|
RNA_def_property_ui_text(
|
|
prop, "Set Size", "Set particle size in simulation cells or use nearest cell");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_inflow", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_FLOW_USE_INFLOW);
|
|
RNA_def_property_ui_text(prop, "Use Flow", "Control when to apply fluid flow");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "subframes", PROP_INT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0, 200);
|
|
RNA_def_property_ui_range(prop, 0, 10, 1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Subframes",
|
|
"Number of additional samples to take between frames to improve "
|
|
"quality of fast moving flows");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "density_vertex_group", PROP_STRING, PROP_NONE);
|
|
RNA_def_property_string_funcs(prop,
|
|
"rna_FluidFlow_density_vgroup_get",
|
|
"rna_FluidFlow_density_vgroup_length",
|
|
"rna_FluidFlow_density_vgroup_set");
|
|
RNA_def_property_ui_text(
|
|
prop, "Vertex Group", "Name of vertex group which determines surface emission rate");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_texture", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_FLOW_TEXTUREEMIT);
|
|
RNA_def_property_ui_text(prop, "Use Texture", "Use a texture to control emission strength");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "texture_map_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "texture_type");
|
|
RNA_def_property_enum_items(prop, flow_texture_types);
|
|
RNA_def_property_ui_text(prop, "Mapping", "Texture mapping type");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
|
|
RNA_def_property_string_sdna(prop, NULL, "uvlayer_name");
|
|
RNA_def_property_ui_text(prop, "UV Map", "UV map name");
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_FluidFlow_uvlayer_set");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "noise_texture", PROP_POINTER, PROP_NONE);
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
RNA_def_property_ui_text(prop, "Texture", "Texture that controls emission strength");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "texture_size", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.01, 10.0);
|
|
RNA_def_property_ui_range(prop, 0.1, 5.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop, "Size", "Size of texture mapping");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
|
|
prop = RNA_def_property(srna, "texture_offset", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 200.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 100.0, 0.05, 5);
|
|
RNA_def_property_ui_text(prop, "Offset", "Z-offset of texture mapping");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_flow_reset");
|
|
}
|
|
|
|
static void rna_def_fluid_effector_settings(BlenderRNA *brna)
|
|
{
|
|
static EnumPropertyItem effector_type_items[] = {
|
|
{FLUID_EFFECTOR_TYPE_COLLISION, "COLLISION", 0, "Collision", "Create collision object"},
|
|
{FLUID_EFFECTOR_TYPE_GUIDE, "GUIDE", 0, "Guide", "Create guide object"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
static EnumPropertyItem fluid_guide_mode_items[] = {
|
|
{FLUID_EFFECTOR_GUIDE_MAX,
|
|
"MAXIMUM",
|
|
0,
|
|
"Maximize",
|
|
"Compare velocities from previous frame with new velocities from current frame and keep "
|
|
"the maximum"},
|
|
{FLUID_EFFECTOR_GUIDE_MIN,
|
|
"MINIMUM",
|
|
0,
|
|
"Minimize",
|
|
"Compare velocities from previous frame with new velocities from current frame and keep "
|
|
"the minimum"},
|
|
{FLUID_EFFECTOR_GUIDE_OVERRIDE,
|
|
"OVERRIDE",
|
|
0,
|
|
"Override",
|
|
"Always write new guide velocities for every frame (each frame only contains current "
|
|
"velocities from guiding objects)"},
|
|
{FLUID_EFFECTOR_GUIDE_AVERAGED,
|
|
"AVERAGED",
|
|
0,
|
|
"Averaged",
|
|
"Take average of velocities from previous frame and new velocities from current frame"},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
StructRNA *srna;
|
|
PropertyRNA *prop;
|
|
|
|
srna = RNA_def_struct(brna, "FluidEffectorSettings", NULL);
|
|
RNA_def_struct_ui_text(srna, "Effector Settings", "Smoke collision settings");
|
|
RNA_def_struct_sdna(srna, "FluidEffectorSettings");
|
|
RNA_def_struct_path_func(srna, "rna_FluidEffectorSettings_path");
|
|
|
|
prop = RNA_def_property(srna, "effector_type", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "type");
|
|
RNA_def_property_enum_items(prop, effector_type_items);
|
|
RNA_def_property_ui_text(prop, "Effector Type", "Change type of effector in the simulation");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_effector_reset");
|
|
|
|
prop = RNA_def_property(srna, "surface_distance", PROP_FLOAT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0.0, 10.0);
|
|
RNA_def_property_ui_range(prop, 0.0, 10.0, 0.05, 5);
|
|
RNA_def_property_ui_text(
|
|
prop, "Surface", "Additional distance around mesh surface to consider as effector");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_effector_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_plane_init", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_EFFECTOR_USE_PLANE_INIT);
|
|
RNA_def_property_ui_text(prop, "Is Planar", "Treat this object as a planar, unclosed mesh");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_domain_data_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_Fluid_effector_reset");
|
|
|
|
prop = RNA_def_property(srna, "guide_mode", PROP_ENUM, PROP_NONE);
|
|
RNA_def_property_enum_sdna(prop, NULL, "guide_mode");
|
|
RNA_def_property_enum_items(prop, fluid_guide_mode_items);
|
|
RNA_def_property_ui_text(prop, "Guiding mode", "How to create guiding velocities");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_effector_reset");
|
|
|
|
prop = RNA_def_property(srna, "use_effector", PROP_BOOLEAN, PROP_NONE);
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_EFFECTOR_USE_EFFEC);
|
|
RNA_def_property_ui_text(prop, "Enabled", "Control when to apply the effector");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_effector_reset");
|
|
|
|
prop = RNA_def_property(srna, "subframes", PROP_INT, PROP_NONE);
|
|
RNA_def_property_range(prop, 0, 200);
|
|
RNA_def_property_ui_range(prop, 0, 10, 1, -1);
|
|
RNA_def_property_ui_text(prop,
|
|
"Subframes",
|
|
"Number of additional samples to take between frames to improve "
|
|
"quality of fast moving effector objects");
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_effector_reset");
|
|
}
|
|
|
|
void RNA_def_fluid(BlenderRNA *brna)
|
|
{
|
|
rna_def_fluid_domain_settings(brna);
|
|
rna_def_fluid_flow_settings(brna);
|
|
rna_def_fluid_effector_settings(brna);
|
|
}
|
|
|
|
#endif
|