Blender  V2.59
Classes | Defines | Typedefs | Functions
physics_fluid.c File Reference
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_action_types.h"
#include "DNA_object_types.h"
#include "DNA_object_fluidsim.h"
#include "BLI_blenlib.h"
#include "BLI_fileops.h"
#include "BLI_threads.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_animsys.h"
#include "BKE_armature.h"
#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
#include "BKE_displist.h"
#include "BKE_effect.h"
#include "BKE_fluidsim.h"
#include "BKE_global.h"
#include "BKE_ipo.h"
#include "BKE_key.h"
#include "BKE_main.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_softbody.h"
#include "BKE_unit.h"
#include "LBM_fluidsim.h"
#include "ED_screen.h"
#include "ED_fluidsim.h"
#include "WM_types.h"
#include "WM_api.h"
#include "physics_intern.h"
#include "DNA_scene_types.h"
#include "DNA_ipo_types.h"
#include "DNA_mesh_types.h"
#include "PIL_time.h"

Go to the source code of this file.

Classes

struct  FluidAnimChannels
struct  FluidObject
struct  FluidBakeJob

Defines

#define CHANNEL_FLOAT   1
#define CHANNEL_VEC   3
#define FLUID_SUFFIX_CONFIG   "fluidsim.cfg"
#define FLUID_SUFFIX_SURFACE   "fluidsurface"

Typedefs

typedef struct FluidAnimChannels FluidAnimChannels
typedef struct FluidObject FluidObject
typedef struct FluidBakeJob FluidBakeJob

Functions

static float get_fluid_viscosity (FluidsimSettings *settings)
static void get_fluid_gravity (float *gravity, Scene *scene, FluidsimSettings *fss)
static float get_fluid_size_m (Scene *scene, Object *domainob, FluidsimSettings *fss)
static int fluid_is_animated_mesh (FluidsimSettings *fss)
static void init_time (FluidsimSettings *domainSettings, FluidAnimChannels *channels)
static void set_channel (float *channel, float time, float *value, int i, int size)
static void set_vertex_channel (float *channel, float time, struct Scene *scene, struct FluidObject *fobj, int i)
static void free_domain_channels (FluidAnimChannels *channels)
static void free_all_fluidobject_channels (ListBase *fobjects)
static void fluid_init_all_channels (bContext *C, Object *UNUSED(fsDomain), FluidsimSettings *domainSettings, FluidAnimChannels *channels, ListBase *fobjects)
static void export_fluid_objects (ListBase *fobjects, Scene *scene, int length)
static int fluid_validate_scene (ReportList *reports, Scene *scene, Object *fsDomain)
static int fluid_init_filepaths (Object *fsDomain, char *targetDir, char *targetFile, char *debugStrBuffer)
static void fluidbake_free (void *customdata)
static int fluidbake_breakjob (void *customdata)
static void fluidbake_updatejob (void *customdata, float progress)
static void fluidbake_startjob (void *customdata, short *stop, short *do_update, float *progress)
static void fluidbake_endjob (void *customdata)
int runSimulationCallback (void *data, int status, int frame)
static void fluidbake_free_data (FluidAnimChannels *channels, ListBase *fobjects, elbeemSimulationSettings *fsset, FluidBakeJob *fb)
static void fluidsim_delete_until_lastframe (FluidsimSettings *fss)
static int fluidsimBake (bContext *C, ReportList *reports, Object *fsDomain)
void fluidsimFreeBake (Object *UNUSED(ob))
static int fluid_bake_exec (bContext *C, wmOperator *op)
void FLUID_OT_bake (wmOperatorType *ot)

Detailed Description

Definition in file physics_fluid.c.


Define Documentation

#define CHANNEL_FLOAT   1

Definition at line 199 of file physics_fluid.c.

Referenced by fluid_init_all_channels(), and set_channel().

#define CHANNEL_VEC   3

Definition at line 200 of file physics_fluid.c.

Referenced by fluid_init_all_channels(), and set_channel().

#define FLUID_SUFFIX_CONFIG   "fluidsim.cfg"

Definition at line 639 of file physics_fluid.c.

Referenced by fluid_init_filepaths(), and fluidsimBake().

#define FLUID_SUFFIX_SURFACE   "fluidsurface"

Definition at line 640 of file physics_fluid.c.

Referenced by fluidsimBake().


Typedef Documentation

typedef struct FluidBakeJob FluidBakeJob
typedef struct FluidObject FluidObject

Function Documentation

static void export_fluid_objects ( ListBase fobjects,
Scene scene,
int  length 
) [static]

Definition at line 482 of file physics_fluid.c.

References FluidObject::Active, FluidObject::AttractforceRadius, FluidObject::AttractforceStrength, elbeemMesh::channelActive, elbeemMesh::channelAttractforceRadius, elbeemMesh::channelAttractforceStrength, elbeemMesh::channelInitialVel, elbeemMesh::channelRotation, elbeemMesh::channelScale, elbeemMesh::channelSizeActive, elbeemMesh::channelSizeAttractforceRadius, elbeemMesh::channelSizeAttractforceStrength, elbeemMesh::channelSizeInitialVel, elbeemMesh::channelSizeRotation, elbeemMesh::channelSizeScale, elbeemMesh::channelSizeTranslation, elbeemMesh::channelSizeVelocityforceRadius, elbeemMesh::channelSizeVelocityforceStrength, elbeemMesh::channelSizeVertices, elbeemMesh::channelTranslation, elbeemMesh::channelVelocityforceRadius, elbeemMesh::channelVelocityforceStrength, elbeemMesh::channelVertices, elbeemMesh::cpsQuality, elbeemMesh::cpsTimeEnd, elbeemMesh::cpsTimeStart, elbeemAddMesh(), elbeemResetMesh(), ELEM, eModifierType_Fluidsim, ListBase::first, fluid_is_animated_mesh(), FLUIDSIM_OBSTACLE_FREESLIP, FLUIDSIM_OBSTACLE_NOSLIP, FLUIDSIM_OBSTACLE_PARTSLIP, Object::id, initElbeemMesh(), FluidObject::InitialVelocity, length(), elbeemMesh::localInivelCoords, MEM_freeN(), modifiers_findByType(), modifiers_indexInObject(), ID::name, elbeemMesh::name, FluidObject::next, NULL, elbeemMesh::numTriangles, elbeemMesh::numVertices, OB_FLUIDSIM_CONTROL, OB_FLUIDSIM_DOMAIN, OB_FLUIDSIM_FLUID, OB_FLUIDSIM_INFLOW, OB_FLUIDSIM_PARTICLE, OB_FLUIDSIM_REVERSE, OB_FSBND_FREESLIP, OB_FSBND_NOSLIP, OB_FSBND_PARTSLIP, OB_FSINFLOW_LOCALCOORD, FluidObject::object, elbeemMesh::obstacleImpactFactor, elbeemMesh::obstaclePartslip, elbeemMesh::obstacleType, FluidObject::Rotation, FluidObject::Scale, FluidObject::Translation, elbeemMesh::triangles, ModifierData::type, elbeemMesh::type, FluidObject::VelocityforceRadius, FluidObject::VelocityforceStrength, FluidObject::VertexCache, elbeemMesh::vertices, and elbeemMesh::volumeInitType.

Referenced by fluidsimBake().

static int fluid_bake_exec ( bContext C,
wmOperator op 
) [static]
static void fluid_init_all_channels ( bContext C,
Object UNUSEDfsDomain,
FluidsimSettings domainSettings,
FluidAnimChannels channels,
ListBase fobjects 
) [static]

Definition at line 353 of file physics_fluid.c.

References FluidObject::Active, FluidsimSettings::attractforceRadius, FluidObject::AttractforceRadius, FluidsimSettings::attractforceStrength, FluidObject::AttractforceStrength, FluidsimSettings::bakeStart, Scene::base, BLI_addtail(), RenderData::cfra, CHANNEL_FLOAT, CHANNEL_VEC, copy_v3_v3(), CTX_data_main(), CTX_data_scene(), CTX_wm_screen(), FluidAnimChannels::DomainGravity, FluidAnimChannels::DomainViscosity, ED_update_for_newframe(), ELEM, eModifierType_Fluidsim, ListBase::first, FluidsimSettings::flag, fluid_is_animated_mesh(), FluidsimModifierData::fss, get_fluid_gravity(), get_fluid_viscosity(), i, init_time(), initElbeemMesh(), FluidObject::InitialVelocity, FluidsimSettings::iniVelx, FluidAnimChannels::length, length(), Object::loc, M_PI, mat4_to_compatible_eulO(), MEM_callocN(), MEM_freeN(), modifiers_findByType(), modifiers_indexInObject(), mul_v3_fl(), Base::next, FluidObject::next, NULL, FluidObject::numTris, FluidObject::numVerts, OB_FLUIDSIM_ACTIVE, OB_FLUIDSIM_CONTROL, OB_FLUIDSIM_DOMAIN, OB_FLUIDSIM_PARTICLE, Base::object, FluidObject::object, Object::obmat, Scene::r, FluidObject::Rotation, FluidObject::Scale, set_channel(), set_vertex_channel(), Object::size, FluidAnimChannels::timeAtFrame, FluidObject::Translation, FluidsimSettings::type, FluidsimSettings::velocityforceRadius, FluidObject::VelocityforceRadius, FluidsimSettings::velocityforceStrength, FluidObject::VelocityforceStrength, and FluidObject::VertexCache.

Referenced by fluidsimBake().

static int fluid_init_filepaths ( Object fsDomain,
char *  targetDir,
char *  targetFile,
char *  debugStrBuffer 
) [static]
static int fluid_is_animated_mesh ( FluidsimSettings fss) [static]
void FLUID_OT_bake ( wmOperatorType ot)
static int fluid_validate_scene ( ReportList reports,
Scene scene,
Object fsDomain 
) [static]
static int fluidbake_breakjob ( void *  customdata) [static]

Definition at line 730 of file physics_fluid.c.

References Global::afbreek, fb(), G, and FluidBakeJob::stop.

Referenced by runSimulationCallback().

static void fluidbake_endjob ( void *  customdata) [static]

Definition at line 767 of file physics_fluid.c.

References fb(), MEM_freeN(), NULL, and FluidBakeJob::settings.

Referenced by fluidsimBake().

static void fluidbake_free ( void *  customdata) [static]

Definition at line 723 of file physics_fluid.c.

References fb(), and MEM_freeN().

Referenced by fluidsimBake().

static void fluidbake_free_data ( FluidAnimChannels channels,
ListBase fobjects,
elbeemSimulationSettings fsset,
FluidBakeJob fb 
) [static]
static void fluidbake_startjob ( void *  customdata,
short *  stop,
short *  do_update,
float *  progress 
) [static]
static void fluidbake_updatejob ( void *  customdata,
float  progress 
) [static]

Definition at line 744 of file physics_fluid.c.

References FluidBakeJob::do_update, fb(), and FluidBakeJob::progress.

Referenced by runSimulationCallback().

static void fluidsim_delete_until_lastframe ( FluidsimSettings fss) [static]
static int fluidsimBake ( bContext C,
ReportList reports,
Object fsDomain 
) [static]

Definition at line 853 of file physics_fluid.c.

References elbeemSimulationSettings::aniFrameTime, FluidAnimChannels::aniFrameTime, FluidsimSettings::animEnd, elbeemSimulationSettings::animStart, FluidsimSettings::animStart, FluidsimSettings::bakeEnd, FluidsimSettings::bakeStart, FluidsimSettings::bbSize, FluidsimSettings::bbStart, BKE_report(), BLI_make_existing_file(), BLI_snprintf(), BLI_strncpy(), RenderData::cfra, elbeemSimulationSettings::channelFrameTime, elbeemSimulationSettings::channelGravity, elbeemSimulationSettings::channelSizeFrameTime, elbeemSimulationSettings::channelSizeGravity, elbeemSimulationSettings::channelSizeViscosity, elbeemSimulationSettings::channelViscosity, copy_m4_m4(), copy_v3_v3(), CTX_data_main(), CTX_data_scene(), CTX_wm_manager(), CTX_wm_screen(), CTX_wm_window(), Object::data, FluidAnimChannels::DomainGravity, FluidsimSettings::domainNovecgen, elbeemSimulationSettings::domainobsPartslip, elbeemSimulationSettings::domainobsType, FluidAnimChannels::DomainTime, FluidAnimChannels::DomainViscosity, ED_update_for_newframe(), RenderData::efra, elbeemAddDomain(), elbeemDebugOut(), elbeemInit(), elbeemResetSettings(), elbeemSetDebugLevel(), eModifierType_Fluidsim, export_fluid_objects(), elbeemSimulationSettings::farFieldSize, FluidsimSettings::farFieldSize, fb(), FILE_MAXDIR, FILE_MAXFILE, fluid_get_bb(), fluid_init_all_channels(), fluid_init_filepaths(), FLUID_SUFFIX_CONFIG, FLUID_SUFFIX_SURFACE, fluid_validate_scene(), fluidbake_endjob(), fluidbake_free(), fluidbake_free_data(), fluidbake_startjob(), fluidsim_delete_until_lastframe(), FLUIDSIM_FSSG_NOOBS, FLUIDSIM_OBSTACLE_FREESLIP, FLUIDSIM_OBSTACLE_NOSLIP, FLUIDSIM_OBSTACLE_PARTSLIP, FluidsimModifierData::fss, elbeemSimulationSettings::generateParticles, FluidsimSettings::generateParticles, FluidsimSettings::generateTracers, elbeemSimulationSettings::generateVertexVectors, elbeemSimulationSettings::geoSize, elbeemSimulationSettings::geoStart, get_fluid_gravity(), get_fluid_size_m(), get_fluid_viscosity(), elbeemSimulationSettings::gravity, elbeemSimulationSettings::gstar, FluidsimSettings::gstar, i, Object::id, invert_m4_m4(), FluidsimSettings::lastgoodframe, FluidAnimChannels::length, elbeemSimulationSettings::maxRefine, FluidsimSettings::maxRefine, MEM_callocN(), elbeemSimulationSettings::mFsSurfGenSetting, modifiers_findByType(), Mesh::mvert, ID::name, NC_SCENE, ND_FRAME, elbeemSimulationSettings::noOfFrames, NULL, elbeemSimulationSettings::numTracerParticles, OB_FSBND_FREESLIP, OB_FSBND_NOSLIP, OB_FSBND_PARTSLIP, OB_FSSG_NOOBS, Object::obmat, elbeemSimulationSettings::outputPath, FluidsimSettings::partSlipValue, elbeemSimulationSettings::previewresxyz, FluidsimSettings::previewresxyz, Scene::r, elbeemSimulationSettings::realsize, elbeemSimulationSettings::resolutionxyz, FluidsimSettings::resolutionxyz, RPT_ERROR, elbeemSimulationSettings::runsimCallback, runSimulationCallback(), elbeemSimulationSettings::runsimUserData, FluidBakeJob::settings, elbeemSimulationSettings::surfaceSmoothing, FluidsimSettings::surfaceSmoothing, elbeemSimulationSettings::surfaceSubdivs, FluidsimSettings::surfaceSubdivs, elbeemSimulationSettings::surfaceTrafo, Mesh::totvert, FluidsimSettings::typeFlags, elbeemSimulationSettings::version, elbeemSimulationSettings::viscosity, WM_JOB_PROGRESS, WM_jobs_callbacks(), WM_jobs_customdata(), WM_jobs_get(), WM_jobs_start(), and WM_jobs_timer().

Referenced by fluid_bake_exec().

void fluidsimFreeBake ( Object UNUSEDob)

Definition at line 1106 of file physics_fluid.c.

static void free_all_fluidobject_channels ( ListBase fobjects) [static]
static void free_domain_channels ( FluidAnimChannels channels) [static]
static void get_fluid_gravity ( float *  gravity,
Scene scene,
FluidsimSettings fss 
) [static]
static float get_fluid_size_m ( Scene scene,
Object domainob,
FluidsimSettings fss 
) [static]
static float get_fluid_viscosity ( FluidsimSettings settings) [static]
static void init_time ( FluidsimSettings domainSettings,
FluidAnimChannels channels 
) [static]
int runSimulationCallback ( void *  data,
int  status,
int  frame 
)
static void set_channel ( float *  channel,
float  time,
float *  value,
int  i,
int  size 
) [static]

Definition at line 259 of file physics_fluid.c.

References CHANNEL_FLOAT, and CHANNEL_VEC.

Referenced by fluid_init_all_channels().

static void set_vertex_channel ( float *  channel,
float  time,
struct Scene scene,
struct FluidObject fobj,
int  i 
) [static]