2009-07-30 15:00:26 +00:00
|
|
|
/**
|
|
|
|
* $Id$
|
|
|
|
*
|
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
|
|
*
|
|
|
|
* 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,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2009-07-30 15:00:26 +00:00
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 2009 by Daniel Genrich
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
2009-08-20 00:33:59 +00:00
|
|
|
* Contributor(s): Daniel Genrich
|
2009-07-30 15:00:26 +00:00
|
|
|
*
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef SMOKE_API_H_
|
|
|
|
#define SMOKE_API_H_
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2009-08-26 00:38:43 +00:00
|
|
|
struct FLUID_3D;
|
|
|
|
|
2009-08-20 00:33:59 +00:00
|
|
|
// export
|
|
|
|
void smoke_export(struct FLUID_3D *fluid, float *dt, float *dx, float **dens, float **densold, float **heat, float **heatold, float **vx, float **vy, float **vz, float **vxold, float **vyold, float **vzold, unsigned char **obstacles);
|
|
|
|
|
|
|
|
// low res
|
Smoke Patch + additions: a) Applying patch #22765 by Miika Hämäläinen (domain border collision settings, vorticity settings, time scale, non absolute density, smooth high res emitter, initial velocity multiplier, high res strength available to be set to 0), b) Additions by me: --Initial velocity is now per flow object, not per domain; --Using boundingbox as standard display mode for domains (was wire before); --When adding a flow object, an initial nice SmokeParticle system is added too with nice initial settings (life=1, no_render, unborn, etc) fitting smoke simulation; --Adaptive timesteps introduced to the smoke sim (depending on the magnitude of the velocity) because it was quite unstable when used for fire simulations, still needs to be tested and will also slow down some simulations.
2010-07-27 14:53:20 +00:00
|
|
|
struct FLUID_3D *smoke_init(int *res, float *p0);
|
2009-07-30 15:00:26 +00:00
|
|
|
void smoke_free(struct FLUID_3D *fluid);
|
|
|
|
|
Smoke Patch + additions: a) Applying patch #22765 by Miika Hämäläinen (domain border collision settings, vorticity settings, time scale, non absolute density, smooth high res emitter, initial velocity multiplier, high res strength available to be set to 0), b) Additions by me: --Initial velocity is now per flow object, not per domain; --Using boundingbox as standard display mode for domains (was wire before); --When adding a flow object, an initial nice SmokeParticle system is added too with nice initial settings (life=1, no_render, unborn, etc) fitting smoke simulation; --Adaptive timesteps introduced to the smoke sim (depending on the magnitude of the velocity) because it was quite unstable when used for fire simulations, still needs to be tested and will also slow down some simulations.
2010-07-27 14:53:20 +00:00
|
|
|
void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta, float *dt_factor, float *vorticity, int *border_colli);
|
2010-07-27 15:33:21 +00:00
|
|
|
void smoke_step(struct FLUID_3D *fluid, size_t framenr, float fps);
|
2009-07-30 15:00:26 +00:00
|
|
|
|
|
|
|
float *smoke_get_density(struct FLUID_3D *fluid);
|
|
|
|
float *smoke_get_heat(struct FLUID_3D *fluid);
|
|
|
|
float *smoke_get_velocity_x(struct FLUID_3D *fluid);
|
|
|
|
float *smoke_get_velocity_y(struct FLUID_3D *fluid);
|
|
|
|
float *smoke_get_velocity_z(struct FLUID_3D *fluid);
|
2009-10-08 10:18:14 +00:00
|
|
|
|
|
|
|
float *smoke_get_force_x(struct FLUID_3D *fluid);
|
|
|
|
float *smoke_get_force_y(struct FLUID_3D *fluid);
|
|
|
|
float *smoke_get_force_z(struct FLUID_3D *fluid);
|
2009-07-30 15:00:26 +00:00
|
|
|
|
|
|
|
unsigned char *smoke_get_obstacle(struct FLUID_3D *fluid);
|
|
|
|
|
2009-07-30 20:12:40 +00:00
|
|
|
size_t smoke_get_index(int x, int max_x, int y, int max_y, int z);
|
|
|
|
size_t smoke_get_index2d(int x, int max_x, int y);
|
2009-07-30 15:00:26 +00:00
|
|
|
|
2009-08-12 17:32:02 +00:00
|
|
|
void smoke_dissolve(struct FLUID_3D *fluid, int speed, int log);
|
|
|
|
|
2009-08-09 01:30:32 +00:00
|
|
|
// wavelet turbulence functions
|
|
|
|
struct WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype);
|
|
|
|
void smoke_turbulence_free(struct WTURBULENCE *wt);
|
|
|
|
void smoke_turbulence_step(struct WTURBULENCE *wt, struct FLUID_3D *fluid);
|
2009-07-30 15:00:26 +00:00
|
|
|
|
2009-08-09 01:30:32 +00:00
|
|
|
float *smoke_turbulence_get_density(struct WTURBULENCE *wt);
|
2009-09-09 18:39:40 +00:00
|
|
|
void smoke_turbulence_get_res(struct WTURBULENCE *wt, int *res);
|
2009-08-09 01:30:32 +00:00
|
|
|
void smoke_turbulence_set_noise(struct WTURBULENCE *wt, int type);
|
2009-09-09 18:39:40 +00:00
|
|
|
void smoke_initWaveletBlenderRNA(struct WTURBULENCE *wt, float *strength);
|
2009-08-20 00:33:59 +00:00
|
|
|
|
2009-09-09 18:39:40 +00:00
|
|
|
void smoke_dissolve_wavelet(struct WTURBULENCE *wt, int speed, int log);
|
2009-07-30 15:00:26 +00:00
|
|
|
|
2009-08-20 00:33:59 +00:00
|
|
|
// export
|
|
|
|
void smoke_turbulence_export(struct WTURBULENCE *wt, float **dens, float **densold, float **tcu, float **tcv, float **tcw);
|
2009-08-12 17:32:02 +00:00
|
|
|
|
2009-07-30 15:00:26 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2009-08-26 00:38:43 +00:00
|
|
|
#endif /* SMOKE_API_H_ */
|