|
Blender
V2.59
|
#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) |
Definition in file physics_fluid.c.
| #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 struct FluidAnimChannels FluidAnimChannels |
| typedef struct FluidBakeJob FluidBakeJob |
| typedef struct FluidObject FluidObject |
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] |
Definition at line 1139 of file physics_fluid.c.
References CTX_data_active_object(), CTX_data_scene(), CTX_wm_manager(), fluidsimBake(), OPERATOR_CANCELLED, OPERATOR_FINISHED, wmOperator::reports, and WM_jobs_test().
Referenced by FLUID_OT_bake().
| 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] |
Definition at line 642 of file physics_fluid.c.
References BLI_delete(), BLI_make_existing_file(), BLI_path_abs(), BLI_replace_extension(), BLI_snprintf(), BLI_splitdirstring(), BLI_strncpy(), elbeemDebugOut(), eModifierType_Fluidsim, FILE_MAXDIR, FILE_MAXFILE, FLUID_SUFFIX_CONFIG, FluidsimModifierData::fss, G, Object::id, Global::main, modifiers_findByType(), Main::name, ID::name, pupmenu(), and FluidsimSettings::surfdataPath.
Referenced by fluidsimBake().
| static int fluid_is_animated_mesh | ( | FluidsimSettings * | fss | ) | [static] |
Definition at line 148 of file physics_fluid.c.
References FluidsimSettings::domainNovecgen, OB_FLUIDSIM_CONTROL, and FluidsimSettings::type.
Referenced by export_fluid_objects(), and fluid_init_all_channels().
| void FLUID_OT_bake | ( | wmOperatorType * | ot | ) |
Definition at line 1151 of file physics_fluid.c.
References wmOperatorType::description, ED_operator_object_active_editable(), wmOperatorType::exec, fluid_bake_exec(), wmOperatorType::idname, wmOperatorType::name, and wmOperatorType::poll.
Referenced by operatortypes_fluid().
| static int fluid_validate_scene | ( | ReportList * | reports, |
| Scene * | scene, | ||
| Object * | fsDomain | ||
| ) | [static] |
Definition at line 581 of file physics_fluid.c.
References Scene::base, BKE_report(), ELEM, eModifierType_Fluidsim, ListBase::first, FluidsimModifierData::fss, modifiers_findByType(), Base::next, NULL, OB_FLUIDSIM_DOMAIN, OB_FLUIDSIM_FLUID, OB_FLUIDSIM_INFLOW, OB_FLUIDSIM_PARTICLE, OB_MESH, Base::object, RPT_ERROR, FluidsimSettings::type, and Object::type.
Referenced by fluidsimBake().
| 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] |
Definition at line 793 of file physics_fluid.c.
References BLI_freelistN(), free_all_fluidobject_channels(), free_domain_channels(), MEM_freeN(), and NULL.
Referenced by fluidsimBake().
| static void fluidbake_startjob | ( | void * | customdata, |
| short * | stop, | ||
| short * | do_update, | ||
| float * | progress | ||
| ) | [static] |
Definition at line 752 of file physics_fluid.c.
References Global::afbreek, FluidBakeJob::do_update, elbeemSimulate(), fb(), G, FluidBakeJob::progress, and FluidBakeJob::stop.
Referenced by fluidsimBake().
| 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] |
Definition at line 816 of file physics_fluid.c.
References BLI_delete(), BLI_exist(), BLI_path_abs(), BLI_path_frame(), BLI_snprintf(), BLI_strncpy(), FILE_MAXDIR, FILE_MAXFILE, G, Global::main, Main::name, and FluidsimSettings::surfdataPath.
Referenced by fluidsimBake().
| 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] |
Definition at line 317 of file physics_fluid.c.
References FluidObject::Active, FluidObject::AttractforceRadius, FluidObject::AttractforceStrength, ListBase::first, FluidObject::InitialVelocity, MEM_freeN(), FluidObject::next, NULL, FluidObject::Rotation, FluidObject::Scale, FluidObject::Translation, FluidObject::VelocityforceRadius, FluidObject::VelocityforceStrength, and FluidObject::VertexCache.
Referenced by fluidbake_free_data().
| static void free_domain_channels | ( | FluidAnimChannels * | channels | ) | [static] |
Definition at line 305 of file physics_fluid.c.
References FluidAnimChannels::DomainGravity, FluidAnimChannels::DomainViscosity, MEM_freeN(), NULL, and FluidAnimChannels::timeAtFrame.
Referenced by fluidbake_free_data().
| static void get_fluid_gravity | ( | float * | gravity, |
| Scene * | scene, | ||
| FluidsimSettings * | fss | ||
| ) | [static] |
Definition at line 124 of file physics_fluid.c.
References copy_v3_v3(), PhysicsSettings::flag, FluidsimSettings::grav, PhysicsSettings::gravity, PHYS_GLOBAL_GRAVITY, and Scene::physics_settings.
Referenced by fluid_init_all_channels(), and fluidsimBake().
| static float get_fluid_size_m | ( | Scene * | scene, |
| Object * | domainob, | ||
| FluidsimSettings * | fss | ||
| ) | [static] |
Definition at line 133 of file physics_fluid.c.
References MAX3(), object_get_dimensions(), FluidsimSettings::realsize, UnitSettings::scale_length, UnitSettings::system, and Scene::unit.
Referenced by fluidsimBake().
| static float get_fluid_viscosity | ( | FluidsimSettings * | settings | ) | [static] |
Definition at line 107 of file physics_fluid.c.
References pow(), FluidsimSettings::viscosityExponent, FluidsimSettings::viscosityMode, and FluidsimSettings::viscosityValue.
Referenced by fluid_init_all_channels(), and fluidsimBake().
| static void init_time | ( | FluidsimSettings * | domainSettings, |
| FluidAnimChannels * | channels | ||
| ) | [static] |
Definition at line 245 of file physics_fluid.c.
References FluidAnimChannels::aniFrameTime, FluidsimSettings::animStart, i, FluidAnimChannels::length, MEM_callocN(), and FluidAnimChannels::timeAtFrame.
Referenced by fluid_init_all_channels().
| int runSimulationCallback | ( | void * | data, |
| int | status, | ||
| int | frame | ||
| ) |
Definition at line 777 of file physics_fluid.c.
References fb(), fluidbake_breakjob(), fluidbake_updatejob(), FLUIDSIM_CBRET_ABORT, FLUIDSIM_CBRET_CONTINUE, FLUIDSIM_CBSTATUS_NEWFRAME, elbeemSimulationSettings::noOfFrames, and FluidBakeJob::settings.
Referenced by fluidsimBake().
| 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] |
Definition at line 273 of file physics_fluid.c.
References eModifierType_Fluidsim, initElbeemMesh(), MEM_freeN(), modifiers_findByType(), modifiers_indexInObject(), NULL, FluidObject::numVerts, and FluidObject::object.
Referenced by fluid_init_all_channels().